home *** CD-ROM | disk | FTP | other *** search
-
- ; *******************************************************
- ; * *
- ; * Turbo Pascal Runtime Library Version 5.5 *
- ; * Interrupt Vector Swapping *
- ; * *
- ; * Copyright (C) 1988,89 Borland International *
- ; * *
- ; *******************************************************
-
- TITLE SWAP
-
- LOCALS @@
-
- DATA SEGMENT WORD PUBLIC
-
- EXTRN SaveInt00:DWORD
-
- DATA ENDS
-
- CODE SEGMENT BYTE PUBLIC
-
- ASSUME CS:CODE,DS:DATA
-
- PUBLIC SwapVectors
-
- IFDEF _DPMI_
-
- SwapVectors PROC FAR
-
- MOV DI,OFFSET SaveInt00
- MOV SI,OFFSET SaveIntTab
- MOV CX,SaveIntCnt
- CLD
- @@1: PUSH CX
- SEGCS LODSW
- MOV BL,AH
- MOV AH,2
- INT 31H
- XCHG DX,[DI]
- XCHG CX,[DI+2]
- INC AX
- INT 31H
- POP CX
- ADD DI,4
- LOOP @@1
- RET
-
- SwapVectors ENDP
-
- ; Saved interrupt and exception numbers
-
- SaveIntTab LABEL BYTE
-
- DB 2,00H
- DB 4,02H
- DB 2,0CH
- DB 2,0DH
- DB 4,1BH
- DB 4,21H
- DB 0,23H
- DB 0,24H
- DB 4,34H
- DB 4,35H
- DB 4,36H
- DB 4,37H
- DB 4,38H
- DB 4,39H
- DB 4,3AH
- DB 4,3BH
- DB 4,3CH
- DB 4,3DH
- DB 4,3EH
- DB 4,3FH
- DB 4,75H
-
- SaveIntCnt EQU ($-SaveIntTab)/2
-
- ELSE
-
- SwapVectors PROC FAR
-
- MOV DI,OFFSET SaveInt00
- MOV SI,OFFSET SaveIntTab
- MOV CX,SaveIntCnt
- CLD
- @@1: SEGCS LODSB
- MOV AH,35H
- INT 21H
- PUSH ES
- PUSH BX
- PUSH DS
- LDS DX,[DI]
- MOV AH,25H
- INT 21H
- POP DS
- POP WORD PTR [DI]
- POP WORD PTR [DI+2]
- ADD DI,4
- LOOP @@1
- RET
-
- SwapVectors ENDP
-
- ; Saved interrupt numbers
-
- SaveIntTab DB 00H,02H,1BH,21H,23H,24H,34H,35H,36H,37H
- DB 38H,39H,3AH,3BH,3CH,3DH,3EH,3FH,75H
- SaveIntCnt EQU $-SaveIntTab
-
- ENDIF
-
- CODE ENDS
-
- END
-