home *** CD-ROM | disk | FTP | other *** search
- ;
- ; (C) Copyright 1990 Whitney Software, Inc.
- ; All Rights Reserved
- ;
- ; Source for MP.COM. Displays a list of the interrupt vectors that point to
- ; interrupt handlers in the parent process.
- ;
-
- arena struc ; arena header
- sig db 0 ; 'M' or 'Z' if last block
- own dw 0 ; PSP of owner or 0 if free
- siz dw 0 ; size not including header
- arena ends
-
- _TEXT SEGMENT word public 'CODE'
-
- ORG 100h
-
- ASSUME cs:_TEXT
- ASSUME ds:_TEXT
- ASSUME es:_TEXT
- ASSUME ss:_TEXT
-
- begin: mov cx,36 ; length
- mov dx,offset msg1 ; message 1
- call printm ; print message
- mov di,ds:[16h] ; parent's PSP segment
- dec di
- mov es,di ; parent's arena header
- inc di ; parent's PSP segment
- mov dx,di
- add dx,es:[siz] ; next block
- xor cx,cx ; interrupt number
-
- ; top of loop for each interrupt (0-FF)
-
- display1: mov ah,35h ; get interrupt vector
- mov al,cl ; interrupt number
- int 21h
- mov ax,es ; vector segment
- push cx ; interrupt number
- mov cl,4 ; shift count
- shr bx,cl ; divide vector offset by 16
- pop cx ; interrupt number
- add ax,bx ; AX = segment + offset / 16
- cmp ax,di ; vector < parent's PSP?
- jb display2 ; yes, jump
- cmp ax,dx ; vector >= next block?
- jae display2 ; yes, jump
- push cx ; interrupt number
- push dx ; next block
- mov ax,cx ; integer = interrupt number
- call printi ; print integer
- pop dx ; next block
- pop cx ; interrupt number
-
- display2: inc cx ; next interrupt
- or ch,ch ; is interrupt number <= 255?
- jz display1 ; yes, jump
- mov cx,2 ; length
- mov dx,offset msg2 ; message 2 (CR/LF)
- call printm ; print message
- mov ax,4C00h ; terminate with 0 return code
- int 21h
-
- printm PROC near
-
- ; Call with: CX = message length
- ; DX = message
-
- mov ah,40h ; write file or device
- mov bx,1 ; standard output device handle
- int 21h
- ret
-
- printm ENDP
-
- printi PROC near
-
- ; Call with: AX = integer
-
- mov cl,16 ; radix equals 16
- mov si,offset buffer + 2 ; end of buffer
- push si
-
- printi1: div cl ; divide integer by 16
- add ah,'0' ; convert remainder to ASCII
- cmp ah,'9' ; is it 0-9?
- jle printi2 ; yes, jump
- add ah,'A'-'9'-1 ; it is A-F, correct
-
- printi2: dec si ; back up through buffer
- mov [si],ah ; store character in buffer
- xor ah,ah
- or al,al ; is integer 0 yet?
- jnz printi1 ; no, get next character
-
- pop cx ; end of buffer
- sub cx,si ; calculate string length
- inc cx ; trailing space
- mov dx,si ; beginning of string
- call printm ; print string
- ret
-
- printi ENDP
-
- buffer db 2 dup (?),' '
-
- msg1 db 'list of parent''s interrupt vectors'
-
- msg2 db 0Dh,0Ah ; also part of message 1
-
- _TEXT ENDS
-
- END begin