User manual

Appendix D Register-Level Programming
©
National Instruments Corporation D-33 PC-DIO-96/PnP User Manual
; see if our vector is installed--if not, do not remove the vector
cmp vect_num,0 ; See if vect_num was ever set
jz short ri_exit ; Our vector never installed--exit
mov al,vect_num ; Get vector number
mov ah,35h ; Get current vector from DOS
int 21h ; Get previous int_addr in es:bx
mov cx,cs ; Prep to compare old/current vectors
mov dx,es
cmp dx,cx ; See if our vector is already there
jne short ri_exit ; Different vector segment--exit
cmp bx,offset _isr_handler
jne short ri_exit ; Different vector offset--exit
; restore old mask and vector values
mov cx,int_mask ; Get the old mask value
in al,maskm ; Get current master mask
jmp $+2 ; Delay--wait for data transfer
or al,cl ; OR in old mask value
out maskm,al ; Send out new setting
jmp $+2 ; Delay--wait for data transfer
in al,masks ; Get current slave mask
jmp $+2 ; Delay--wait for data transfer
or al,ch ; OR in old mask value
out masks,al ; Send out new setting
jmp $+2 ; Delay--wait for data transfer
mov al,vect_num ; al holds interrupt level
mov ah,25h
lds dx,int_addr ; ds:dx points to new handler
int 21h ; Install the old vector