home *** CD-ROM | disk | FTP | other *** search
/ Between Heaven & Hell 2 / BetweenHeavenHell.cdr / 100 / 96 / sysint.asm < prev    next >
Assembly Source File  |  1983-09-24  |  3KB  |  69 lines

  1. page 66,132
  2. ;+
  3. ;       .title sysint
  4. ; index  system interrupt call function   sysint()
  5. ;
  6. ; Usage
  7. ;       int flags;
  8. ;
  9. ;       flags = sysint(inum,&inreg,&outreg);
  10. ;
  11. ; in
  12. ;       int     inum;           ; interrupt number to execute
  13. ;       int     inreg[4];       ; input registers ax,bx,cx,dx
  14. ;
  15. ; out
  16. ;       int     outreg[4];      ; registers returned ax,bx,cx,dx
  17. ;       sysint                  ; flag register returned
  18. ;
  19. ; Description
  20. ;       This is a system interface call to allow system intrinsic functions
  21. ;      to be called from C. Parameters are passed via the register values
  22. ;      stored in inreg for input to the system call and returned in the
  23. ;      outreg struct. The default values for the segment registers are the
  24. ;      same as C routines.
  25. ;
  26. ; status
  27. ;       ax register is returned as status
  28. ;
  29. ; bugs
  30. ;       low level internal routine must be modified to be ported.
  31. ;
  32. ; Updates
  33. ;
  34. ;       date            vers    who     description
  35. ;       15-aug-83       0001    EJK     Added documemtation
  36. ;       13-sep-83       0002    CMC     Added flag register return
  37. ;-
  38. pgroup  group   prog
  39. prog    segment byte    public 'prog'
  40.         assume  cs:pgroup
  41.         public  sysint
  42.  
  43. sysint  proc    near
  44.         push bp         ;save bp
  45.         mov bp,sp       ;sp->bp
  46.         mov ax,[bp]+4   ;get int#
  47.         mov cs:itm+1,al ;set int#
  48.         mov si,[bp]+6   ;in struc
  49.         mov ax,[si]     ;set ax
  50.         mov bx,[si]+2   ;set bx
  51.         mov cx,[si]+4   ;set cx
  52.         mov dx,[si]+6   ;set dx
  53.         push bp         ;save bp2
  54. itm     equ  this byte  ; 'this byte' is a keyword.
  55.         int 16          ;interrupt
  56.         pop bp          ;restore bp2
  57.         mov si,[bp]+8   ;out struc
  58.         mov [si],ax     ;ret ax
  59.         mov [si]+2,bx   ;ret bx
  60.         mov [si]+4,cx   ;ret cx
  61.         mov [si]+6,dx   ;ret dx
  62.         pop bp          ;restore bp
  63.     pushf           ;save return flag register on stack
  64.         pop ax          ;restore flag register in ax
  65.         ret             ;return
  66. sysint  endp
  67. prog    ends
  68.         end
  69.