home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / PASCAL / IOSTUFF.ZIP / INTRPT.ASM < prev    next >
Encoding:
Assembly Source File  |  1985-12-28  |  1.6 KB  |  59 lines

  1. NAME    INTRPT
  2. ;**********************************************************************
  3. ;*                                  *
  4. ;*    INTERRUPT HANDLER FOR USE WITH IBM PERSONAL COMPUTER PASCAL   *
  5. ;*    PROGRAMS TO ALLOW DIRECT CALLING OF DOS INTERRUPT FUNCTIONS   *
  6. ;*    FROM WITHIN A PASCAL PROGRAM.                      *
  7. ;*                                      *
  8. ;**********************************************************************
  9. ;
  10. ;
  11. FRAME      STRUC             ;Define structure (DSECT)
  12. SAVEBP      DW    ?            ;Caller's BP
  13. SAVERET   DD    ?            ;Four byte return address
  14.                     ;pushed by PASCAL
  15. DXREG      DW    ?            ;Address of word with DX value
  16. CXREG    DW    ?            ;Address of word with CX value
  17. BXREG      DW    ?            ;Address of word with BX value
  18. AXREG      DW    ?            ;Address of word with AX value
  19. NUMBER      DW    ?            ;Interrupt to be performed
  20. FRAME      ENDS
  21. ;
  22. CSEG      SEGMENT    'CODE'
  23. DGROUP      GROUP     DATA,STACK,CONST,HEAP,MEMORY
  24.       ASSUME    CS:CSEG,DS:DGROUP,ES:DGROUP,SS:DGROUP
  25. INTRPT      PROC        FAR
  26.       PUBLIC    INTRPT
  27.       PUSH        BP
  28.       MOV        BP,SP            ;Point SP at FRAME structure
  29.       MOV        AL,BYTE PTR [BP].NUMBER ;Move the interrupt number
  30.                         ;into the right place
  31.       MOV        CS:INTERUPT+1,AL
  32.       MOV        SI,[BP].AXREG        ;Set up regs for interrupt
  33.       MOV        AX,[SI]
  34.       MOV        SI,[BP].BXREG
  35.       MOV        BX,[SI]
  36.       MOV        SI,[BP].CXREG
  37.       MOV        CX,[SI]
  38.       MOV        SI,[BP].DXREG
  39.       MOV        DX,[SI]
  40.       PUSH        BP
  41. INTERUPT  EQU        THIS BYTE        ;Perform the interrupt
  42.       INT        16
  43.       POP        BP
  44.       MOV        SI,[BP].AXREG        ;Save the registers in
  45.                         ;VAR parameters, so that
  46.                         ;Pascal can access them
  47.       MOV        [SI],AX
  48.       MOV        SI,[BP].BXREG
  49.       MOV        [SI],BX
  50.       MOV        SI,[BP].CXREG
  51.       MOV        [SI],CX
  52.       MOV        SI,[BP].DXREG
  53.       MOV        [SI],DX
  54.       POP        BP
  55.       RET        10
  56. INTRPT      ENDP
  57. CSEG      ENDS
  58.       END
  59.