home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / newemacs / sysint.a < prev    next >
Encoding:
Text File  |  1983-11-22  |  1015 b   |  54 lines

  1. ;
  2. ; sysint -- system interrupt call
  3. ;
  4. ; Tom Poindexter, October 1983
  5. ;
  6. ; struct regval {int ax, bx, cx, dx, si, di, ds, es;} input_regs, output_regs;
  7. ;
  8. ; int int_vec;
  9. ;
  10. ; sysint(int_vec, &input_regs, &output_regs)
  11. ;
  12.     cseg
  13.     public    sysint_
  14.  
  15. sysint_:
  16.     push    bp            ; standard
  17.     mov    bp,sp            ;    prolog
  18.     push    ds            ; C data seg
  19.  
  20.     mov    ax,[bp+4]        ; get interrupt #
  21.     mov    cs:intcal+1,al        ; modify int
  22.  
  23.     push    bp            ; save for after int
  24.     mov    bp,[bp+06]        ; point to input_regs
  25.     mov    ax,[bp+00]
  26.     mov    bx,[bp+02]
  27.     mov    cx,[bp+04]
  28.     mov    dx,[bp+06]
  29.     mov    si,[bp+08]
  30.     mov    di,[bp+10]
  31.     mov    ds,[bp+12]
  32.     mov    es,[bp+14]
  33.  
  34. intcal:
  35.     int    255            ; call the interrupt
  36.  
  37.     pop    bp            ; restore parameter pointer
  38.     pushf                ; save flags for return
  39.     mov    bp,[bp+08]        ; point to output_regs
  40.     mov    [bp+14],es
  41.     mov    [bp+12],ds
  42.     mov    [bp+10],di
  43.     mov    [bp+08],si
  44.     mov    [bp+06],dx
  45.     mov    [bp+04],cx
  46.     mov    [bp+02],bx
  47.     mov    [bp+00],ax
  48.  
  49.     pop    ax            ; flags into ax
  50.  
  51.     pop    ds            ; recover data seg
  52.     pop    bp            ; standard
  53.     ret                ;    epilog
  54.