home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 3 / hamradioversion3.0examsandprograms1992.iso / packet / n17jsrc / pivec.asm < prev    next >
Assembly Source File  |  1991-01-09  |  3KB  |  195 lines

  1. ; :ts=8
  2.     .MODEL    MEMMOD,C
  3.     LOCALS
  4.     %MACS
  5.     .LALL
  6.  
  7.     extrn    Stktop,Spsave,Sssave,piint:proc,doret:proc,eoi:proc
  8.  
  9. DMAEN    equ    4
  10.  
  11.     .DATA
  12.  
  13.     public    acc_delay
  14. acc_delay dw    0
  15.  
  16.  
  17.     .CODE
  18. dbase    dw    @Data        ; save loc for ds (must be in code segment)
  19.  
  20.     public    mloop
  21. mloop    proc
  22.     mov cx,65535
  23. Loop7:
  24.     nop
  25.     loop Loop7
  26.     ret
  27. mloop    endp
  28.  
  29.     public    wrtscc
  30. wrtscc    proc
  31.     arg    cbase:word,ctl:word,reg:word,val:word
  32.  
  33.     pushf
  34.     cli
  35.  
  36.     mov dx,cbase    ; get address of dma enable port
  37.     add dx,DMAEN
  38.     mov al,0    ; Write a 0 to disable DMA while we touch the scc
  39.     out dx,al
  40.  
  41.     mov cx,acc_delay
  42. Loop1:    nop
  43.     loop Loop1
  44.  
  45.     mov dx,ctl    ; Get address of scc control reg
  46.     mov ax,reg    ; Select register
  47.     out dx,al
  48.  
  49.     mov cx,acc_delay
  50. Loop2:    nop
  51.     loop Loop2
  52.  
  53.     mov ax,val    ; Output value
  54.     out dx,al
  55.  
  56.     mov cx,acc_delay
  57. Loop3:    nop
  58.     loop Loop3
  59.  
  60.     mov dx,cbase    ; get address of dma enable port
  61.     add dx,DMAEN
  62.     mov al,1    ; Enable DMA
  63.     out dx,al
  64.  
  65.     popf
  66.     ret
  67. wrtscc    endp
  68.  
  69.     public    rdscc
  70. rdscc    proc
  71.     arg    cbase:word,ctl:word,reg:byte
  72.     pushf
  73.     cli
  74.  
  75.     mov dx,cbase    ; Get address of dma enable port
  76.     add dx,DMAEN;
  77.     mov al,0    ; Disable DMA while we touch the scc
  78.     out dx,al;
  79.  
  80.     mov cx,acc_delay
  81. Loop4:    nop
  82.     loop Loop4
  83.  
  84.     mov dx,ctl    ; Get address of SCC control reg
  85.     mov al,reg    ; Select register
  86.     out dx,al;
  87.  
  88.     mov cx,acc_delay
  89. Loop5:    nop
  90.     loop Loop5
  91.  
  92.     in al,dx    ; read register
  93.     xor ah,ah
  94.     push ax        ; save return value
  95.  
  96.     mov cx,acc_delay
  97. Loop6:    nop
  98.     loop Loop6
  99.  
  100.     mov dx,cbase    ; get address of dma enable port
  101.     add dx,DMAEN
  102.     mov al,1    ; Enable DMA
  103.     out dx,al
  104.  
  105.     pop    ax    ; recover return value
  106.     popf
  107.     ret
  108. rdscc    endp
  109.  
  110. ; pi0vec - Pi card #0 interrupt handler
  111.     public    pi0vec
  112.     label    pi0vec far
  113.     push    ds        ; save on user stack
  114.     mov    ds,cs:dbase    ; establish interrupt data segment
  115.  
  116.     mov    Sssave,ss    ; stash user stack context
  117.     mov    Spsave,sp
  118.  
  119.     mov    ss,cs:dbase
  120.     lea    sp,Stktop
  121.  
  122.     push    ax        ; save user regs on interrupt stack
  123.     push    bx
  124.     push    cx
  125.     push    dx
  126.     push    bp
  127.     push    si
  128.     push    di
  129.     push    es
  130.     call    eoi
  131.  
  132.     mov    ax,0        ; arg for service routine
  133.     push    ax
  134.     call    piint
  135.     pop    ax
  136.     jmp    doret
  137.  
  138. ; pi1vec - Pi card #1 interrupt handler
  139.     public    pi1vec
  140.     label    pi1vec 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.     push    es
  158.     call    eoi
  159.  
  160.     mov    ax,1        ; arg for service routine
  161.     push    ax
  162.     call    piint
  163.     pop    ax
  164.     jmp    doret
  165.  
  166. ; pi2vec - Pi card #2 interrupt handler
  167.     public    pi2vec
  168.     label    pi2vec far
  169.     push    ds        ; save on user stack
  170.     mov    ds,cs:dbase    ; establish interrupt data segment
  171.  
  172.     mov    Sssave,ss    ; stash user stack context
  173.     mov    Spsave,sp
  174.  
  175.     mov    ss,cs:dbase
  176.     lea    sp,Stktop
  177.  
  178.     push    ax        ; save user regs on interrupt stack
  179.     push    bx
  180.     push    cx
  181.     push    dx
  182.     push    bp
  183.     push    si
  184.     push    di
  185.     push    es
  186.     call    eoi
  187.  
  188.     mov    ax,2        ; arg for service routine
  189.     push    ax
  190.     call    piint
  191.     pop    ax
  192.     jmp    doret
  193.  
  194.     end
  195.