home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol074 / u2651.asm < prev    next >
Assembly Source File  |  1984-04-29  |  6KB  |  247 lines

  1. ;****************************************************************
  2. ;*                                *
  3. ;*       BSTAM/BSTMS Interface routines for 2651 UART.    *
  4. ;*        on Godbout System Support 1 Board        *
  5. ;*         or Godbout Interfacer 3/4 Board        *
  6. ;*                                *
  7. ;****************************************************************
  8. ;
  9. ;    By    Bill Bolton
  10. ;        Software Tools,
  11. ;        P.O. Box 80,
  12. ;        Newport Beach,
  13. ;        NSW, 2106
  14. ;        AUSTRALIA
  15. ;
  16.     TITLE    '2651 UART Interface for BSTAM, Software Tools'
  17. ;************************************************
  18. ;*                        *
  19. ;*         Miscellaneous Equates        *
  20. ;*                        *
  21. ;************************************************
  22. ;
  23. TRUE    EQU    0FFFFH
  24. FALSE    EQU    NOT TRUE
  25.  
  26. BDOS    EQU    0005            ;CP/M BDOS entry point
  27. ALF    EQU    0AH            ;ASCII line feed
  28. ACR    EQU    0DH            ;ASCII carriage return
  29. ;
  30. ;************************************************
  31. ;*                        *
  32. ;*         2651 Baud Rate Table        *
  33. ;*                        *
  34. ;************************************************
  35. ;
  36. B50    EQU    0000B            ;50 bps
  37. B75    EQU    0001B            ;75 bps
  38. B110    EQU    0010B            ;110 bps
  39. B134    EQU    0011B            ;134.5 bps
  40. B150    EQU    0100B            ;150 bps
  41. B300    EQU    0101B            ;300 bps
  42. B600    EQU    0110B            ;600 bps
  43. B1200    EQU    0111B            ;1200 bps
  44. B1800    EQU    1000B            ;1800 bps
  45. B2000    EQU    1001B            ;2000 bps
  46. B2400    EQU    1010B            ;2400 bps
  47. B3600    EQU    1011B            ;3600 bps
  48. B4800    EQU    1100B            ;4800 bps
  49. B7200    EQU    1101B            ;7200 bps
  50. B9600    EQU    1110B            ;9600 bps
  51. B19200    EQU    1111B            ;19200 bps
  52. ;
  53. ;************************************************
  54. ;*                        *
  55. ;*        2651 Equates            *
  56. ;*                        *
  57. ;************************************************
  58. ;
  59. BASE    EQU    5CH            ;UART base register
  60. DATA    EQU    BASE+0            ;Data port
  61. STATUS    EQU    BASE+1            ;Status port
  62. MODE    EQU    BASE+2            ;Mode register
  63. CMMD    EQU    BASE+3            ;Command register
  64. USER    EQU    BASE+7            ;User select port
  65. UNUM    EQU    6            ;Modem user number
  66. MODE1    EQU    01101110B        ;Asynch,16x,8 data bits,
  67.                     ; no parity, even, 1 stop bit
  68. MODE2    EQU    01110000B + B300    ;Baud rate
  69. CMMDB    EQU    00100111B        ;Tx enabled, RX enabled, no break
  70.                     ; DTR high, RTS high
  71. ERESET    EQU    CMMDB+8            ;Error reset
  72. ;
  73. SYSSPT    EQU    TRUE            ;True for Godbout system support
  74. INTER3    EQU    NOT SYSSPT        ;True for Godbout Interfacer 3
  75. ;
  76.     ORG    103H
  77. ;
  78. BEGIN:
  79. INITIL:
  80.     JMP    INITIU        ;UART/USART INITIALATION ENTRY POINT
  81. INSPORT:
  82.     JMP    INSPRU        ;STATUS PORT READ ENTRY POINT
  83. ERRSET:
  84.     JMP    ERRSTU        ;UART/USART ERROR RESET ENTRY POINT
  85. INPORT:
  86.     JMP    INPRTU        ;READ DATA PORT ENTRY POINT
  87. OUTPORT:
  88.     JMP    OUTPRU        ;WRITE DATA PORT ENTRY POINT
  89. ;
  90. ;
  91. ;            THIS IS THE UART/USART INITIALATION ROUTINE.
  92. ;            TO BE COMPATIBLE WITH MOST BSTAM USERS USE FOLLOWING
  93. ;            INITIALISATION GUIDE LINES:
  94. ;            1. USE 1 STOP BIT    (OPTIONAL - 2)
  95. ;            2. USE 8 DATA BITS    (MUST)
  96. ;            3. USE 1 START BIT    (MUST)
  97. ;            4. USE 16X FOR CLOCK RATE     (MUST)
  98. ;            5. USE ASYNCHRONOUS MODE ONLY    (MUST)
  99. ;
  100. INITIU:
  101.     CALL    SIGNON        ;Announce version
  102.  
  103.     if    inter3
  104.     MVI    A,UNUM
  105.     OUT    USER        ;Select UART
  106.     endif    ;inter3
  107.  
  108.     MVI    A,MODE1        ;Get first mode word
  109.     OUT    MODE
  110.     MVI    A,MODE2        ;Get second mode word
  111.     OUT    MODE
  112.     MVI    A,CMMDB        ;Get command byte
  113.     OUT    CMMD
  114.     RET        ;RETURN TO BSTAM
  115. ;
  116. ;
  117. ;            THIS IS THE STATUS READ PORT ROUTINE.
  118. ;            WHEN EXITING THIS ROUTINE BSTAM EXPECTS IN REGISTER A
  119. ;            THE FOLLOWING BITS TO BE SET IF NEEDED:
  120. ;            1. 20 BIT SET IF FRAMING ERROR
  121. ;            2. 10 BIT SET IF OVERRUN ERROR
  122. ;            3. 08 BIT SET IF PARITY  ERROR
  123. ;            4. 04 BIT SET IF TRANSMITTER EMPTY
  124. ;                IF YOUR UART/USART DOES NOT HAVE TRANSMITTER
  125. ;                EMPTY FEATURE, THEN ALWAYS SET THIS BIT ON.
  126. ;            5. 02 BIT SET IF RECEIVER READY
  127. ;            6. 01 BIT SET IF TRANSMITTER READY
  128. ;            7. DO NOT SET THE 80 BIT OR 40 BIT
  129. ;
  130. ;
  131. ;
  132. INSPRU:
  133.     if    inter3
  134.     MVI    A,UNUM
  135.     OUT    USER        ;Select UART
  136.     endif    ;inter3
  137.  
  138.     IN    STATUS        ;Get status
  139.     ORI    4        ;Force Tx empty high
  140.     RET
  141. ;
  142. ;
  143. ;            YOUR UART/USART MAY NOT NEED TO BE RESET IF FRAMING,
  144. ;            OVERRUN, OR PARITY ERROR IS FOUND. IF THIS IS YOUR
  145. ;            CASE, JUST DO A RETURN.
  146. ;
  147. ;
  148. ;
  149. ;
  150. ERRSTU:
  151.     if    inter3
  152.     MVI    A,UNUM
  153.     OUT    USER        ;Select UART
  154.     endif    ;inter3
  155.  
  156.     MVI    A,ERESET    ;Reset error flags in 2651
  157.     OUT    CMMD
  158.     MVI    A,CMMDB        ;Restore normal operation
  159.     OUT    CMMD
  160.     RET
  161. ;
  162. ;            THIS IS THE READ DATA PORT ROUTINE.
  163. ;            BEFORE THIS ROUTINE IS ENTERED THE 02 BIT OF
  164. ;            STATUS READ ROUTINE MUST HAVE BEEN SET.
  165. ;            DO NOT CLEAR THE 80 BIT FROM THE DATA INPUT PORT.
  166. ;            RETURN WITH REGISTER A LOADED WITH INPUT DATA.
  167. ;
  168. ;
  169. INPRTU:
  170.     if    inter3
  171.     MVI    A,UNUM
  172.     OUT    USER        ;Select UART
  173.     endif    ;inter3
  174.  
  175.     IN    DATA        ;Get data
  176.     RET
  177. ;
  178. ;            THIS IS THE WRITE DATA PORT ROUTINE.
  179. ;            BEFORE THIS ROUTINE IS ENTERED THE 04 BIT AND 01 BIT
  180. ;            OF STATUS READ MUST BE SET.
  181. ;            DO NOT CLEAR THE 80 BIT FROM THE DATA OUTPUT PORT.
  182. ;            REGISTER A CONTAINS THE OUTPUT DATA.
  183. ;
  184. OUTPRU:
  185.     if    inter3
  186.     PUSH    PSW
  187.     MVI    A,UNUM
  188.     OUT    USER        ;Select UART
  189.     POP    PSW
  190.     endif    ;inter3
  191.  
  192.     OUT    DATA        ;Send data
  193.     RET
  194. ;
  195. ;
  196. SIGNON:    PUSH    B        ;Save  the environment
  197.     PUSH    D
  198.     PUSH    H
  199.     LXI    D,MESSGE
  200.     MVI    C,9        ;BDOS display string command
  201.     CALL    BDOS        ;Announce version to user
  202.     POP    H        ;Restore the enviroment
  203.     POP    D
  204.     POP    B
  205.     RET
  206. ;
  207. hexnum    macro    num
  208.     if    (num/16) > 9     
  209.     db    (num/16 and 0fh) + 'A' - 10
  210.     else
  211.     db    (num/16 and 0fh) + '0'
  212.     endif
  213.     if    (num and 0fh) > 9
  214.     db    (num and 0fh) + 'A' - 10
  215.     else
  216.     db    (num and 0fh) + '0'
  217.     endif
  218.     endm
  219.  
  220. MESSGE:    DB    ACR,ALF,ALF
  221.     DB    'Version 4.5, March 29, 1982 by Software Tools',ACR,ALF
  222.     DB    '2651 UART on '
  223.  
  224.     if    sysspt
  225.     DB    'Godbout System Support 1 Board'
  226.     endif    ;sysspt
  227.  
  228.     if    inter3
  229.     DB    'Godbout Interfacer 3 Board'
  230.     endif    ;sysspt
  231.  
  232.     DB    ACR,ALF
  233.     DB    'UART Addressed at ' 
  234.     hexnum    %BASE
  235.     DB    'H, 300 bps, no parity.',ACR,ALF
  236.  
  237.     if    inter3
  238.     DB    'UART Relative User '
  239.     hexnum    %UNUM
  240.     DB    ',',ACR,ALF
  241.     endif    ;inter3
  242.  
  243.     DB    '$'
  244. ;
  245.     END    BEGIN
  246.