home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / microcrn / issue_36.arc / SIOINT.ASM < prev    next >
Assembly Source File  |  1979-12-31  |  4KB  |  186 lines

  1.  
  2. ;SERIAL INPUT/OUTPUT INTERRUPT DRIVEN DRIVERS
  3.  
  4. ; FRANK A. KURUCZ
  5. ; 2360 PASEO DE LAURA #20
  6. ; OCEANSIDE CA,  92056
  7.  
  8. ; H- (619) 721-8530
  9. ; W- (619) 433-6406
  10.  
  11.  
  12.  
  13. ; THESE ROUTINES WERE MADE TO BE USED WITH THE TURBO PASCAL
  14. ; INTERFACE ROUTINES
  15.  
  16.  
  17.  
  18. ; **************************************************************************
  19.  
  20.  
  21. UARTDT    SET    4        ;SERIAL DATA PORT
  22. CONTROL    SET    6        ;SERIAL CONTROL PORT
  23.  
  24. RET1    SET    0EDH        ;THESE TWO BYTES ARE THE Z-80 RETI
  25. RET2    SET    04DH        ;INSTRUCTION, NOT SUPPORTED BY THE CP/M ASM
  26.  
  27. BDOS    SET    5        ;BDOS VECTOR
  28. VECTOR    SET    0E000H        ;INTERRUPT VECTOR
  29.  
  30.  
  31. ;******************************************************************
  32.  
  33. ; THE "PROGRAM"
  34.  
  35.     ORG    100H
  36.  
  37. UART:    MVI    C,0        ;JUST REBOOT
  38.     CALL    BDOS        ;THE REST OF THE CODE WILL
  39.                 ;REMAIN IN HIGH MEMORY JUST
  40.                 ;UNDER THE CCP
  41.  
  42.  
  43. ;******************************************************************
  44.  
  45.  
  46. ;Z-80 SIO UART INTERRUPT VECTORS
  47.  
  48.     ORG    VECTOR
  49.  
  50.  
  51. DW    0            ;UNUSED INTERRUPT VECTOR
  52. DW    0            ;UNUSED
  53. DW    0            ;UNUSED
  54. DW    0            ;UNUSED
  55. DW    OUTINT            ;SIO OUTPUT VECTOR
  56. DW    EXTINT            ;EXTERNAL/STATUS VECTOR
  57. DW    INPINT            ;SIO INPUT VECTOR
  58. DW    ERRINT            ;INPUT ERROR VECTOR
  59.  
  60.  
  61. ;************************************************************************
  62.  
  63.  
  64. ;SERIAL INPUT INTERRUPT HANDLER
  65.  
  66. INPINT:    PUSH    H        ;SAVE THE REGISTERS USED
  67.     PUSH    B
  68.     PUSH    PSW
  69.  
  70.     IN    UARTDT        ;READ DATA FROM THE UART
  71.     MOV    B,A        ;SAVE IT
  72.  
  73.     LDA    SRICNT        ;IS THERE ANY ROOM IN THE INPUT FIFO?
  74.     CPI    0FFH
  75.     JZ    INPEXT        ;OOPS, IT IS FULL
  76.     INR    A        ;NOT FULL YET, SO INCREMENT ITS COUNT
  77.     STA    SRICNT        ;AND SAVE IT
  78.  
  79.     LHLD    SRIINP        ;GET INPUT POINTER TO FIFO
  80.     MOV    M,B        ;STORE THE DATA IN THE FIFO
  81.     INR    L        ;INCREMENT POINTER (AUTO WRAP AROUND)
  82.     SHLD    SRIINP        ;AND SAVE THE UPDATED FIFO
  83.  
  84. INPEXT:    POP    PSW        ;RESTORE THE REGISTERS
  85.     POP    B
  86.     POP    H
  87.     EI            ;RE-ENABLE INTERRUPTS
  88.  
  89.     DB    RET1,RET2    ;Z-80 RETI INSTRUCTION
  90.  
  91.  
  92. ;*************************************************************************
  93.  
  94. ;SERIAL OUTPUT INTERRUPT DRIVER
  95.  
  96.  
  97. OUTINT:    PUSH    H        ;SAVE REGISTERS
  98.     PUSH    PSW
  99.  
  100.     LDA    SROCNT        ;ANYTHING IN THE FIFO TO OUTPUT?
  101.     ORA    A
  102.     JZ    OEMPTY        ;NO, GO TO EMPTY FIFO PROCESSOR
  103.  
  104.     DCR    A        ;FIFO NOT EMPTY, SO DECREMENT ITS COUNT
  105.     STA    SROCNT
  106.  
  107.     LHLD    SROOUT        ;GET OUTPUT POINTER TO FIFO
  108.     MOV    A,M        ;GET THE DATA TO OUTPUT FROM THE FIFO
  109.     OUT    UARTDT        ;AND OUTPUT IT TO THE UART
  110.     INR    L        ;INCREMENT FIFO POINTER
  111.     SHLD    SROOUT        ;AND INCREMENT THE FIFO
  112.  
  113.     MVI    A,0FFH
  114.     STA    OUTFLG        ;SET THE INTERRUPT EXPECTED FLAG
  115.     JMP    OUTEXT
  116.  
  117. OEMPTY:    XRA    A        ;LOWER THE INTERRUPT EXPECTED FLAG
  118.     STA    OUTFLG
  119.     OUT    CONTROL        ;AND RESET THE INTERRUPT
  120.     MVI    A,28H
  121.     OUT    CONTROL
  122.  
  123. OUTEXT:    POP    PSW        ;RESTORE REGISTERS
  124.     POP    H
  125.  
  126.     EI
  127.  
  128.     DB    RET1,RET2    ;Z-80 RETI INSTRUCTION
  129.  
  130.  
  131. ;***********************************************************************
  132.  
  133.  
  134. ;EXTERNAL/STATUS INTERRUPT
  135.  
  136.  
  137. EXTINT:    PUSH    PSW        ;RESET THE INTERRUPT
  138.     MVI    A,10H
  139.     OUT    CONTROL
  140.     POP    PSW
  141.  
  142.     EI
  143.     DB    RET1,RET2
  144.  
  145.  
  146.  
  147. ;**********************************************************************
  148.  
  149.  
  150. ;INPUT ERROR INTERRUPT
  151.  
  152.  
  153. ERRINT:    PUSH    PSW        ;RESET THE INTERRUPT
  154.     MVI    A,30H
  155.     OUT    CONTROL
  156.     POP    PSW
  157.  
  158.     EI
  159.     DB    RET1,RET2
  160.  
  161.  
  162.  
  163. ;***********************************************************************
  164.  
  165.  
  166. ;DATA AREA
  167.  
  168.     ORG    VECTOR + 100H
  169.  
  170.  
  171.  
  172. SRIFIF:    DS    100H        ;SERIAL INPUT FIFO
  173. SROFIF:    DS    100H        ;SERIAL OUTPUT FIFO
  174.  
  175. SRICNT:    DS    1        ;SERIAL INPUT FIFO COUNTER
  176. SRIINP:    DS    2        ;INPUT POINTER
  177. SRIOUT:    DS    2        ;OUTPUT POINTER
  178.  
  179. SROCNT:    DS    1        ;SERIAL OUTPUT FIFO COUNTER
  180. SROINP:    DS    2        ;INPUT POINTER
  181. SROOUT:    DS    2        ;OUTPUT POINTER
  182.  
  183. OUTFLG:    DS    1        ;OUTPUT INTERRUPT EXPECTED FLAG
  184.  
  185.     END    UART
  186.