home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / zsys / znode-12 / s / t3m-on1.z80 < prev    next >
Encoding:
Text File  |  1994-07-13  |  5.5 KB  |  240 lines

  1.  
  2. ; Program: T3M-ON1.Z80
  3. ; Author:  Joe Wright
  4. ; Date:    10 June 1986
  5. ;
  6. ;    Serial port overlay to TERM III for the Oneac computer.
  7. ;         Z80 DART and 615,385 Hz Baud Rate Generator.
  8. ;
  9. MDPORT    EQU    92H        ; Z80 sio-0 or dart
  10. M1$DATA    EQU    MDPORT        ; Data port
  11. M1$STAT    EQU    MDPORT+1    ; Status port
  12. RDA    EQU    1        ; Receive data available
  13. TBE    EQU    4        ; Transmit buffer empty
  14. DCD    EQU    8        ; Data carrier detect
  15. RES    EQU    10H        ; Reset external/status
  16. ;
  17. ; Baud rate table.  Low order byte is baud rate generator divisor,
  18. ;  High order byte is the Dart divisor (WR4, 1 stop bit).
  19. ;
  20. BD300    EQU    0C400H        ; /64, /32
  21. BD1200    EQU    04400H        ; /16, /32
  22. BD2400    EQU    08410H        ; /32, /8
  23. BD4800    EQU    04410H        ; /16, /8
  24. BD9600    EQU    0C420H        ; /64, /1
  25. BD19200    EQU    08420H        ; /32, /1
  26. BD38400    EQU    04420H        ; /16, /1
  27. ;
  28.     ORG    600H        ; Base address (600h - 6ffh)
  29. ;
  30. ; Modem Support Package
  31. ;
  32. M1$INIT:
  33.     JP    SM1$INIT    ; Initialize dart
  34. M1$ISTAT:
  35.     JP    SM1$ISTAT    ; Test input status (rda)
  36. M1$OSTAT:
  37.     JP    SM1$OSTAT    ; Test output status (tbe)
  38. M1$IN:
  39.     JP    SM1$IN        ; Input a byte from the usart
  40. M1$OUT:
  41.     JP    SM1$OUT        ; Output a byte to the usart
  42. M1$BREAK:
  43.     JP    SM1$BREAK    ; Cause the usart to issue a break
  44. MM1$CST:
  45.     JP    SM1$CST        ; Determine carrier status (detect) on usart
  46. M1$SPTAB:
  47.     DB    01111111B    ; All rates available
  48. ;
  49. ;    Modem Routines
  50. ;
  51. ;  Modem 1 Initialization
  52. ;    Function:  To initialize the Modem 1 Port
  53. ;    Input Parameters:  A=Speed
  54. ;        0=no set
  55. ;        1=  300
  56. ;        2= 1200
  57. ;        3= 2400
  58. ;        4= 4800
  59. ;        5= 9600
  60. ;        6=19200
  61. ;        7=38400
  62. ;    Output Parameters:  A=Set Speed (same table as above)
  63. ;        ZERO FLAG SET
  64. ;
  65. SM1$INIT:
  66.     PUSH    HL
  67.     PUSH    DE
  68.     PUSH    BC
  69.     PUSH    AF        ; Save all registers
  70.     OR    A
  71.     JR    Z,NO$BAUD    ; No speed selected
  72.     CP    8
  73.     JR    NC,NO$BAUD    ; Out of range
  74. ;
  75. ; Set up to determine if desired speed is available
  76. ;
  77.     LD    B,A        ; Save it a moment
  78.     LD    C,A        ; Two copies
  79.     XOR    A        ; Clear A
  80.     SCF            ; Set carry flag
  81. ;
  82. ; Shift carry into A (speed) times corresponding to speed table
  83. ;
  84. LOOP:    RLA
  85.     DEC    C
  86.     JR    NZ,LOOP        ; Shift into position
  87. ;
  88. ; See if we have a match
  89. ;
  90.     LD    HL,M1$SPTAB    ; Point to speed table
  91.     AND    (HL)        ; Check for corresponding bit
  92.     LD    A,B        ; Get speed
  93.     JR    Z,NO$BAUD    ; Not available
  94. ;
  95. ; Speed value in range, set it up
  96. ;
  97.     LD    DE,BD300
  98.     DEC    A
  99.     JR    Z,SETBAUD    ; Set 300 bps
  100.     LD    DE,BD1200
  101.     DEC    A
  102.     JR    Z,SETBAUD    ; Set 1200 bps
  103.     LD    DE,BD2400
  104.     DEC    A
  105.     JR    Z,SETBAUD    ; Set 2400 bps
  106.     LD    DE,BD4800
  107.     DEC    A
  108.     JR    Z,SETBAUD    ; Set 4800 bps
  109.     LD    DE,BD9600
  110.     DEC    A
  111.     JR    Z,SETBAUD    ; Set 9600 bps
  112.     LD    DE,BD19200
  113.     DEC    A
  114.     JR    Z,SETBAUD    ; Set 19200 bps
  115.     LD    DE,BD38400
  116.     DEC    A        ; Insure A=0, Set 38400 bps
  117. ;
  118. ; Set up the baud rate requested
  119. ;
  120. SETBAUD:
  121.     CALL    SELBNK        ; A=0 returns system port data
  122.     AND    0CFH        ; Mask rate generator  xx00xxxxB
  123.     OR    E        ; Selected rate
  124.     LD    C,A        ; Return it in C
  125.     CALL    SELBNK        ; A<=>0 sets new rate
  126.     LD    A,4
  127.     OUT    (M1$STAT),A    ; Select WR4
  128.     LD    A,D        ; Get dart divisor, 1 stop bit
  129.     OUT    (M1$STAT),A
  130.     LD    A,3
  131.     OUT    (M1$STAT),A    ; WR3
  132.     LD    A,0C1H        ; 8 bits, Rx enable
  133.     OUT    (M1$STAT),A
  134.     LD    A,5
  135.     OUT    (M1$STAT),A    ; WR5
  136.     LD    A,0EAH        ; DTR, 8 bits, Tx enable, RTS
  137.     OUT    (M1$STAT),A
  138. ;
  139. SMINIT$RET:
  140.     POP    AF
  141. ERR$RET:
  142.     POP    BC
  143.     POP    DE
  144.     POP    HL
  145.     OR    A        ; Set zero flag
  146.     RET
  147.  
  148. ; Speed value out of range, do nothing, return zero
  149. ;
  150. NO$BAUD:
  151.     POP    AF        ; Adjust stack
  152.     XOR    A        ; A zero
  153.     JR    ERR$RET        ; Quit, having failed..
  154. ;
  155. ; SELBNK  routine in the ON bios gets/sets the baud rate clock
  156. ;  This routine also affects the bank port and the terminal speed.
  157. ;   Please don't play around with it.
  158. ;
  159. SELBNK:
  160.     LD    HL,(1)        ; Bios jump table
  161.     LD    L,33H        ; Offset to selbnk jump
  162.     JP    (HL)        ; Do it, return to caller
  163. ;
  164. ;  Modem 1 Input Status
  165. ;    Function:  To return byte ready (RDA) status
  166. ;    Input Parameters:  None
  167. ;    Output Parameters:  A=0 if no byte, A=0FFH if byte ready
  168. ;
  169. SM1$ISTAT:
  170.     IN    A,(M1$STAT)    ; Get status byte
  171.     AND    RDA        ; Data available?
  172.     RET    Z        ; Zero if no data
  173.     LD    A,0FFH        ; Load with ff
  174.     RET
  175. ;
  176. ;  Modem 1 Output Status
  177. ;    Function:  To return buffer empty (TBE) status
  178. ;    Input Parameters:  None
  179. ;    Output Parameters:  A=0 if buffer full, A=0FFH if buffer empty (TBE)
  180. ;
  181. SM1$OSTAT:
  182.     IN    A,(M1$STAT)    ; Get status byte
  183.     AND    TBE        ; Buffer empty?
  184.     RET    Z        ; Zero if not empty
  185.     LD    A,0FFH        ; Load with ff
  186.     RET
  187. ;
  188. ;  Modem 1 Input
  189. ;    Function:  To return a byte in the A Reg from Modem 1
  190. ;    Input Parameters:  None
  191. ;    Output Parameters:  A=byte (MSB NOT cleared)
  192. ;
  193. SM1$IN:
  194.     CALL    M1$ISTAT    ; Get status
  195.     JP    Z,M1$IN        ; Continue until data available
  196.     IN    A,(M1$DATA)    ; Get char
  197.     RET
  198. ;
  199. ;  Modem 1 Output
  200. ;    Function:  To output the byte in the A Reg to Modem 1
  201. ;    Input Parameters:  A=byte
  202. ;    Output Parameters:  None
  203. ;
  204. SM1$OUT:
  205.     PUSH    AF        ; Save byte
  206. M1OLOOP:
  207.     CALL    M1$OSTAT    ; Check output status
  208.     JP    Z,M1OLOOP    ; Wait until empty
  209.     POP    AF        ; Get byte
  210.     OUT    (M1$DATA),A    ; Output it
  211.     RET
  212. ;
  213. ;  Modem 1 Break
  214. ;    Function:  To return the status of the break function for Modem 1
  215. ;        and to execute the break if function is available
  216. ;    Input Parameters:  A=0 to return status, A=0FFH to break
  217. ;    Output Parameters:  A=0 and Zero Flag Set if Break not supported
  218. ;
  219. SM1$BREAK:
  220.     XOR    A        ; Not implemented
  221.     RET
  222. ;
  223. ;  Modem 1 Carrier Status Detect
  224. ;    Function:  Determine if carrier is present
  225. ;    Input Parameters:  None
  226. ;    Output Parameters:  A=0 if no carrier, A=0FFH if carrier
  227. ;
  228. SM1$CST:
  229.     LD    A,RES        ; Reset external/status
  230.     OUT    (M1$STAT),A
  231.     IN    A,(M1$STAT)    ; Get new status
  232.     AND    DCD        ; Check data carrier
  233.     RET    Z        ; No carrier, else..
  234.     OR    0FFH        ; Set af
  235.     RET
  236.  
  237.     DB    'End of Oneac serial port drivers'
  238.  
  239.     END
  240.