home *** CD-ROM | disk | FTP | other *** search
- NAME INTRPT
- ;**********************************************************************
- ;* *
- ;* INTERRUPT HANDLER FOR USE WITH IBM PERSONAL COMPUTER PASCAL *
- ;* PROGRAMS TO ALLOW DIRECT CALLING OF DOS INTERRUPT FUNCTIONS *
- ;* FROM WITHIN A PASCAL PROGRAM. *
- ;* *
- ;**********************************************************************
- ;
- ;
- FRAME STRUC ;Define structure (DSECT)
- SAVEBP DW ? ;Caller's BP
- SAVERET DD ? ;Four byte return address
- ;pushed by PASCAL
- DXREG DW ? ;Address of word with DX value
- CXREG DW ? ;Address of word with CX value
- BXREG DW ? ;Address of word with BX value
- AXREG DW ? ;Address of word with AX value
- NUMBER DW ? ;Interrupt to be performed
- FRAME ENDS
- ;
- CSEG SEGMENT 'CODE'
- DGROUP GROUP DATA,STACK,CONST,HEAP,MEMORY
- ASSUME CS:CSEG,DS:DGROUP,ES:DGROUP,SS:DGROUP
- INTRPT PROC FAR
- PUBLIC INTRPT
- PUSH BP
- MOV BP,SP ;Point SP at FRAME structure
- MOV AL,BYTE PTR [BP].NUMBER ;Move the interrupt number
- ;into the right place
- MOV CS:INTERUPT+1,AL
- MOV SI,[BP].AXREG ;Set up regs for interrupt
- MOV AX,[SI]
- MOV SI,[BP].BXREG
- MOV BX,[SI]
- MOV SI,[BP].CXREG
- MOV CX,[SI]
- MOV SI,[BP].DXREG
- MOV DX,[SI]
- PUSH BP
- INTERUPT EQU THIS BYTE ;Perform the interrupt
- INT 16
- POP BP
- MOV SI,[BP].AXREG ;Save the registers in
- ;VAR parameters, so that
- ;Pascal can access them
- MOV [SI],AX
- MOV SI,[BP].BXREG
- MOV [SI],BX
- MOV SI,[BP].CXREG
- MOV [SI],CX
- MOV SI,[BP].DXREG
- MOV [SI],DX
- POP BP
- RET 10
- INTRPT ENDP
- CSEG ENDS
- END