home *** CD-ROM | disk | FTP | other *** search
- page 60,132
- TITLE CALLSVC issues bios/dos interrupt for PC PASCAL program
- ;
- ; THIS ROUTINE ASSUMES IT IS CALLED FROM PC PASCAL
- ;IT CAN BE USED TO DIRECTLY INVOKE ANY BIOS/DOS INTERRUPT
- ;EXCEPT DOS INT 20 WHICH REQUIRES SETTING THE CS REGISTER
- ;THE ABOVE IS AN EXIT WHICH CAN BE DONE VIA THE ABORT FUNCTION.
- ;
- ; TO INVOKE THIS PROGRAM A RECORD IS PASSED AS THE ONLY
- ;PARM. THIS RECORD CONTAINS BEFORE AND AFTER SETTINGS
- ;FOR MOST OF THE REGISTERS IN THE 8088/86
- ;
- ; CALLSVC (VAR : T_PARM_CALLSVC) ;
- ;
- ; THE FORMAT OF THE RECORD IS DEFINED IN THE
- ;FILE CALLSVC.ENT
- ;
- ZSVC SEGMENT 'CODE'
- PUBLIC CALLSVC
- CALLSVC PROC FAR
- ASSUME CS:ZSVC,DS:NOTHING,ES:NOTHING,SS:NOTHING
- PUSH BP ;SAVE FRAME POINTER
- MOV BP,SP ;FOR PARMS ADDRESSING
- PUSH BX ;SAVE CALLERS REGISTERS
- PUSH CX ;
- PUSH DX ;
- PUSH SI ;
- PUSH DI ;
- PUSH DS ;
- PUSH ES ;
- MOV BX,[BP+6] ;GET POINTER TO RECORD
- MOV AL,[BX] ;GET INTERRUPT
- LEA SI,INT+1 ;GET INSTRUCTION LOCATION
- PUSH DS ;SAVE IT
- PUSH CS ;FAKE OUT ASSEMBLER
- POP DS ;INTO LETTING ME STORE IN CODE AREA
- MOV [SI],AL ;MOVE DAT INTERRUPT NUMBER
- POP DS ;RESTORE ORIGINAL
- ; SET UP REGS FOR INTERRUPT/SVC
- MOV AX,[BX+2]
- MOV CX,[BX+6]
- MOV DX,[BX+8]
- MOV DI,[BX+12]
- MOV ES,[BX+16]
- MOV SI,[BX+10]
- ; THINGS NOW GET A LITTLE TRICKY
- PUSH BP ; SAVE PTR TO PARMS
- MOV BP,[BX+4] ;GET INPUT BX CONTENTS
- PUSH BP ;SAVE IT TEMPORARILY
- MOV BP,[BX+14] ;GET INPUT DS CONTENTS
- PUSH BP ;SAVE IT TEMPORARILY
- POP DS ;PUT RECORD VALUE IN DS
- POP BX ; SAME FOR BX
- INT: INT 0 ;DO THE INTERRUPT
- POP BP ;RESTORE GOOD STUFF
- PUSHF ;SAVE FLAGS
- PUSH BX ;SAVE BX AFTER SVC
- PUSH DS ;SAME
- MOV DS,SS:[BP-12] ;FISH ORIGINAL DS FROM STACK
- MOV BX,[BP+6] ; GET RECORD ADDRESS
- MOV [BX+18],AX ; START STUFFING WITH RESULTS
- MOV [BX+22],CX
- MOV [BX+24],DX
- MOV [BX+26],SI
- MOV [BX+28],DI
- MOV [BX+32],ES
- POP SI ;GET DS RESULT
- MOV [BX+30],SI
- POP SI ;GET BX RESULT
- MOV [BX+20],SI
- POP SI ;GET FLAGS
- MOV [BX+34],SI
- ; INTERUPT COMPLETE RESTORE REGS AND EXIT
- POP ES
- POP DS
- POP DI
- POP SI
- POP DX
- POP CX
- POP BX
- POP BP
- RET 2 ;POP PAST PARMS
- CALLSVC ENDP
- ZSVC ENDS
- END
-