home *** CD-ROM | disk | FTP | other *** search
/ The Pier Shareware 6 / The_Pier_Shareware_Number_6_(The_Pier_Exchange)_(1995).iso / 024 / psi110g.zip / ASYVEC.ASM < prev    next >
Assembly Source File  |  1994-08-26  |  4KB  |  199 lines

  1. ; ASY (8250/16450/16550A "comm" port) interrupt hooks
  2. ; Copyright 1991 Phil Karn, KA9Q
  3.  
  4. ;%    .MODEL  MEMMOD,C
  5. include asmglobal.h        
  6.     %MACS
  7.  
  8.     extrn   doretch:proc,asyint:far,eoi:proc
  9.  
  10.     .DATA
  11.     extrn   Sssave:word
  12.     extrn   Spsave:word
  13.     extrn   Stktop
  14.  
  15.     .CODE
  16. dbase   dw      @Data
  17.  
  18. ; asy0vec - asynch channel 0 interrupt handler
  19.     public  asy0vec
  20.     label   asy0vec far
  21.     push    ds              ; save on user stack
  22.     mov     ds,cs:dbase     ; establish interrupt data segment
  23.  
  24.     mov     Sssave,ss       ; stash user stack context
  25.     mov     Spsave,sp
  26.  
  27.     mov     ss,cs:dbase
  28.     lea     sp,Stktop
  29.  
  30.       ;  push    ax              ; save user regs on interrupt stack
  31.       ;  push    bx
  32.       ;  push    cx
  33.       ;  push    dx
  34.       ;  push    bp
  35.       ;  push    si
  36.       ;  push    di
  37.     PUSHALL
  38.     push    es
  39.     call    eoi
  40.  
  41.     mov     ax,0            ; arg for service routine
  42.     push    ax
  43.     call    asyint
  44.     inc    sp
  45.     inc    sp
  46.     jmp     doretch
  47.  
  48. ; asy1vec - asynch channel 1 interrupt handler
  49.     public  asy1vec
  50.     label   asy1vec far
  51.     push    ds              ; save on user stack
  52.     mov     ds,cs:dbase     ; establish interrupt data segment
  53.  
  54.     mov     Sssave,ss       ; stash user stack context
  55.     mov     Spsave,sp
  56.  
  57.     mov     ss,cs:dbase
  58.     lea     sp,Stktop
  59.  
  60.       ;  push    ax              ; save user regs on interrupt stack
  61.       ;  push    bx
  62.       ;  push    cx
  63.       ;  push    dx
  64.       ;  push    bp
  65.       ;  push    si
  66.       ;  push    di
  67.     PUSHALL
  68.     push    es
  69.     call    eoi
  70.  
  71.     mov     ax,1            ; arg for service routine
  72.     push    ax
  73.     call    asyint
  74.     inc    sp
  75.     inc    sp
  76.     jmp     doretch
  77.  
  78. ; asy2vec - asynch channel 2 interrupt handler
  79.     public  asy2vec
  80.     label   asy2vec far
  81.     push    ds              ; save on user stack
  82.     mov     ds,cs:dbase     ; establish interrupt data segment
  83.  
  84.     mov     Sssave,ss       ; stash user stack context
  85.     mov     Spsave,sp
  86.  
  87.     mov     ss,cs:dbase
  88.     lea     sp,Stktop
  89.  
  90.        ; push    ax              ; save user regs on interrupt stack
  91.        ; push    bx
  92.        ; push    cx
  93.        ; push    dx
  94.        ; push    bp
  95.        ; push    si
  96.        ; push    di
  97.     PUSHALL
  98.     push    es
  99.     call    eoi
  100.  
  101.     mov     ax,2            ; arg for service routine
  102.     push    ax
  103.     call    asyint
  104.     inc    sp
  105.     inc    sp
  106.     jmp     doretch
  107.  
  108. ; asy3vec - asynch channel 3 interrupt handler
  109.     public  asy3vec
  110.     label   asy3vec far
  111.     push    ds              ; save on user stack
  112.     mov     ds,cs:dbase     ; establish interrupt data segment
  113.  
  114.     mov     Sssave,ss       ; stash user stack context
  115.     mov     Spsave,sp
  116.  
  117.     mov     ss,cs:dbase
  118.     lea     sp,Stktop
  119.  
  120.        ; push    ax              ; save user regs on interrupt stack
  121.        ; push    bx
  122.        ; push    cx
  123.        ; push    dx
  124.        ; push    bp
  125.        ; push    si
  126.        ; push    di
  127.     PUSHALL
  128.     push    es
  129.     call    eoi
  130.  
  131.     mov     ax,3            ; arg for service routine
  132.     push    ax
  133.     call    asyint
  134.     inc    sp
  135.     inc    sp
  136.     jmp     doretch
  137.  
  138. ; asy4vec - asynch channel 4 interrupt handler
  139.     public  asy4vec
  140.     label   asy4vec far
  141.     push    ds              ; save on user stack
  142.     mov     ds,cs:dbase     ; establish interrupt data segment
  143.  
  144.     mov     Sssave,ss       ; stash user stack context
  145.     mov     Spsave,sp
  146.  
  147.     mov     ss,cs:dbase
  148.     lea     sp,Stktop
  149.  
  150.        ; push    ax              ; save user regs on interrupt stack
  151.        ; push    bx
  152.        ; push    cx
  153.        ; push    dx
  154.        ; push    bp
  155.        ; push    si
  156.        ; push    di
  157.     PUSHALL
  158.     push    es
  159.     call    eoi
  160.  
  161.     mov     ax,4            ; arg for service routine
  162.     push    ax
  163.     call    asyint
  164.     inc    sp
  165.     inc    sp
  166.     jmp     doretch
  167.  
  168. ; asy5vec - asynch channel 5 interrupt handler
  169.     public  asy5vec
  170.     label   asy5vec far
  171.     push    ds              ; save on user stack
  172.     mov     ds,cs:dbase     ; establish interrupt data segment
  173.  
  174.     mov     Sssave,ss       ; stash user stack context
  175.     mov     Spsave,sp
  176.  
  177.     mov     ss,cs:dbase
  178.     lea     sp,Stktop
  179.  
  180.        ; push    ax              ; save user regs on interrupt stack
  181.        ; push    bx
  182.        ; push    cx
  183.        ; push    dx
  184.        ; push    bp
  185.        ; push    si
  186.        ; push    di
  187.     PUSHALL
  188.     push    es
  189.     call    eoi
  190.  
  191.     mov     ax,5            ; arg for service routine
  192.     push    ax
  193.     call    asyint
  194.     inc    sp
  195.     inc    sp
  196.     jmp     doretch
  197.  
  198.     end
  199.