home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ZSYS / SIMTEL20 / ZCPR3 / T3M-HI2.Z80 < prev    next >
Text File  |  2000-06-30  |  10KB  |  319 lines

  1. ; Program: T3M-HI2.Z80
  2. ; Use: Term3 Modem Overlay
  3. ; Written by: David McCord
  4. ; Last revised: 04/02/87
  5. ;
  6. ; Latest Revisions:
  7. ; dmm   4/02/87 v2.0
  8. ;    Reworked baud rate setting, adding support for 9.216MHz and 12.288MHz
  9. ; clock rates.  Also added equate for selection of which serial port will
  10. ; be used, ASCI0 or ASCI1.  You must set the clock rate equates and ASCI
  11. ; equates appropriately (below) before assembly!
  12. ;
  13. ; dmm    4/21/86    v1.0
  14. ;    Originally MODEMH80.Z80; renamed to conform to new naming standards
  15. ; for TERM III interface files (T3M-xx#.Z80 for "modem interfaces";
  16. ; T3T-xx#.Z80 for "telephone interfaces"; and T3C-xx#.Z80 for combined
  17. ; modem AND telephone interfaces (as with the MOSART)).
  18. ;    Fixed a minor bug in the mi$init routine.
  19. ;
  20. ; Term3 Modem Interface for SB180/HD64180
  21. ; Uses HD64180 ASCI 0 (modem port on SB180)
  22. ;
  23. ; Modified from original MSB180.LIB file 03-21-86 by D. McCord
  24. ; Supports baud rates up to 38.4Kbps (max 19.2Kbps for 9.216MHz clock)
  25. ;
  26. ; This program, both source code and object code, is
  27. ; copyright 1986 Echelon, Inc.  Duplication for non-commercial personal
  28. ; use is permitted; all other duplication is prohibited unless authorized
  29. ; in writing by copyright holder.
  30. ;
  31. ; To use:
  32. ;    ZAS T3M-HI2 H            <- make .HEX file output
  33. ;    MLOAD MODEM.BIN=T3M-HI2        <- create binary file
  34. ;    T3INS INSTALL            <- install into TERM3 modules
  35. ;
  36. ; Cabling:
  37. ;    Because of the HD64180's internal logic (which will not
  38. ;    allow sending characters when the carrier detect input is
  39. ;    false), a special cable must be used.  Also, a different cable
  40. ;    is used for a T3SERVER/T3MASTER application.
  41. ;
  42. ;        TERM3 Modem Application Cable
  43. ;
  44. ;        SB180            Modem
  45. ;          1 --------------------- 1
  46. ;          2 --------------------- 2
  47. ;                 3 --------------------- 3
  48. ;                 4 --------------------- 4
  49. ;                 5 --------------------- 8    <- note
  50. ;          6 --------------------- 6
  51. ;          7 --------------------- 7
  52. ;          8 --------------------- 5    <- note
  53. ;         20 --------------------- 20
  54. ;
  55. ;      TERM3 T3MASTER/T3SERVER Application Cable (Tested with
  56. ;   AMPRO Little Board and Magnum Digital PRO-180 as "Other Computer")
  57. ;
  58. ;        SB180(Master)    Other Computer(Server)
  59. ;          1 --------------------- 1
  60. ;          2 --------------------- 2
  61. ;          3 --------------------- 3
  62. ;          4 --+
  63. ;                 5 --| <- Note: 4, 5, & 8 tied together
  64. ;                 8 --+
  65. ;          7 --------------------- 7
  66. ;
  67. ; define "yes" and "no"
  68. ;
  69. no    equ    0
  70. yes    equ    not no
  71. ;
  72. ; User-select equates - select "yes" to only one clock rate
  73. ;
  74. c6144kHz        equ    no    ;  6.144MHz
  75. c9216kHz        equ    yes    ;  9.216MHz
  76. c12288kHz    equ    no    ; 12.288MHz
  77. ;
  78. ; select ASCI 0 (modem port on SB180) or ASCI 1
  79. ;
  80. asci0        equ    yes
  81. asci1        equ    no
  82. ;
  83. ; Non-changeable equates
  84. ;
  85. base    equ    600h        ; base of Modem Interface in T3 tools
  86.      if    asci0
  87. cntla    EQU    0        ; ASCI Control Register A Channel 0
  88. cntlb    EQU    2        ; ASCI Control Register B Channel 0
  89. stat    EQU    4        ; ASCI Status Register Channel 0
  90. tdr    EQU    6        ; ASCI Transmit Data Register Channel 0
  91. rdr    EQU    8        ; ASCI Receive Data Register Channel 0
  92.      endif
  93.      if    asci1
  94. cntla    EQU    1        ; ASCI Control Register A Channel 1
  95. cntlb    EQU    3        ; ASCI Control Register B Channel 1
  96. stat    EQU    5        ; ASCI Status Register Channel 1
  97. tdr    EQU    7        ; ASCI Transmit Data Register Channel 1
  98. rdr    EQU    9        ; ASCI Receive Data Register Channel 1
  99.      endif
  100. CTS    EQU    00100000B    ; Clear-to-send input (pin 5)
  101. DCD    EQU    00000100B    ; Data Carrier detect bit (pin 8)
  102. RDRF    EQU    10000000B    ; RECEIVE DATA REGISTER FULL
  103. TDRE    EQU    00000010B    ; TRANSMIT DATA REGISTER EMPTY
  104. ;
  105. ; Term3 Baud Rate definitions
  106. ;
  107. ; chart of baud rates vs. clock speed for 64180
  108. ;
  109. ;       6.144MHz clock      9.216MHZ clock      12.288MHz clock
  110. ;           PS  DR  SS          PS  DR  SS           PS  DR  SS
  111. ; 38400      0   0   0           -- na --             0   0   1
  112. ; 19200      0   0   1           1   0   0            0   0   2
  113. ;  9600      0   0   2           1   0   1            0   0   3
  114. ;  4800      0   0   3           1   0   2            0   0   4
  115. ;  2400      0   0   4           1   0   3            0   0   5
  116. ;  1200      0   0   5           1   0   4            0   0   6
  117. ;   300      0   1   5           1   0   6            0   1   6
  118. ;
  119.      if    c6144kHz
  120. bauds    equ    01111111b    ; this modem interface supports 300, 1200,
  121.                 ; 2400, 4800, 9600, 19200, 38400
  122.      endif
  123. ;
  124.      if    c9216kHz
  125. bauds    equ    00111111b    ; this modem interface supports 300, 1200,
  126.                 ; 2400, 4800, 9600, 19200
  127.      endif
  128. ;
  129.      if    c12288kHz
  130. bauds    equ    01111111b    ; this modem interface supports 300, 1200,
  131.                 ; 2400, 4800, 9600, 19200, 38400
  132.      endif
  133. ;
  134.     .HD64    ; enable Hitachi Mnemonics
  135.     org    base
  136. ;
  137. ; Jump Table
  138. ;
  139.     JP    INIT        ; m1$init
  140.     JP    ISTAT        ; M1$istat
  141.     JP    OSTAT        ; m1$ostat
  142.     JP    INP        ; m1$in
  143.     JP    OUTP        ; m1$out
  144.     JP    BREAK        ; m1$break
  145.     JP    CST        ; m1$cst
  146. AVAILBD:
  147.     DB    bauds        ; set via EQUate above
  148. ;
  149. ; initialization.  Set baud rate, but leave DTR (really RTS) high
  150. ;
  151. INIT:
  152.      if    c9216kHz
  153.     cp    7        ; we can't do 38.4K @ 9.216MHz
  154.     jr    z,noset
  155.      endif
  156.     OR    A        ; is entry parameter 0?
  157.     JR    NZ,SETB        ; if yes, fall thru to no set
  158. NOSET:    POP    AF
  159.     XOR    A        ; return "not supported"
  160.     RET
  161. SETB:    PUSH    HL        ; save regs
  162.     PUSH    DE
  163.     LD    HL,[b300-1]    ; get base of baud table
  164.     LD    D,0        ; prep for subsequent add
  165.     LD    E,A        ; index into baud rate table
  166.     ADD    HL,DE        ; add index to base
  167.     LD    D,(HL)        ; get desired byte
  168.     OUT0    (cntlb),D    ; send it
  169.     POP    DE
  170.     POP    HL
  171.     OR    A        ; return proper indication to calling routine
  172.     RET
  173. ;
  174. ; Input status.  Returns Z and A=0 if nothing waiting.
  175. ;
  176. ISTAT:    CALL    IISTAT
  177.     AND    RDRF
  178.     RET    Z
  179.     LD    A,0FFH
  180.     RET
  181. ;
  182. ; Read stat twice, as per Hitachi manual
  183. ;
  184. IISTAT:    IN0    A,(stat)
  185.     IN0    A,(stat)
  186.     OR    A
  187.     RET
  188. ;
  189. ; Check state of CTS* and return A=0 and Z if CTS is true.
  190. ;
  191. CKCTS:    IN0    A,(cntlb)
  192.     AND    CTS
  193.     RET    Z
  194.     LD    A,0FFh
  195.     RET
  196. ;
  197. ; Output status.  Returns Z and A=0 if not ready to send.
  198. ;
  199. OSTAT:    CALL    IISTAT        ; GET STATUS REG
  200.     AND    TDRE
  201.     JR    Z,DOCTS
  202. OST1:    LD    A,0FFH
  203.     OR    A
  204.     RET
  205. ;
  206. ; TDRE is false.  Is it because CTS is false?
  207. ;
  208. DOCTS:    CALL    CKCTS        ; look at CTS (really modem carrier)
  209.     JR    NZ,OST1        ; CTS is false; goto faking "OK to send"
  210.     XOR    A        ; return "not ready" indication
  211.     RET
  212. ;
  213. ; Recieve a character
  214. ;
  215. INP:    CALL    ISTAT
  216.     JR    Z,INP
  217.     IN0    A,(rdr)
  218.     RET
  219. ;
  220. ; Send a character
  221. ;
  222. OUTP:    PUSH    AF
  223.     CALL    CKCTS        ; check CTS
  224.     JR    NZ,DELAY    ; if CTS is false, delay before sending
  225. OUTP1:    CALL    OSTAT
  226.     JR    Z,OUTP1
  227. OUTP2:    POP    AF        ; return point from "CTS false" delay
  228.     OUT0    (tdr),A
  229.     RET
  230. ;
  231. ; This delay routine is used when CTS (pin 5 on SB180) is false.  Hitachi
  232. ; designed the ASCI 0 to lock the TDRE status bit false when CTS is false,
  233. ; yet the ASCI 0 can still send characters under this circumstance.  However,
  234. ; because TDRE is always false, we must manually delay after each character
  235. ; to prevent over-running the serial port.  Worst case for this delay is
  236. ; 300 bps, where each character (10 bits) is 33.3 milliseconds.  This
  237. ; delay subroutine delays about 36 milliseconds in an HD64180 system at
  238. ; the selected clock rate.
  239. ;
  240.      if    c6144kHz
  241. wait    equ    12
  242.      endif
  243.      if    c9216kHz
  244. wait    equ    18
  245.      endif
  246.      if    c12288kHz
  247. wait    equ    24
  248.      endif
  249. DELAY:    LD    A,wait        ; 6 T-states
  250. D1:    PUSH    AF        ; 11 T-states            |
  251.     LD    A,0FFh        ; 6 T-states            |
  252. D2:    EX    (SP),HL        ; 16 T-states        | 72 if    |
  253.     EX    (SP),HL        ; 16            | true,    | 18398 if
  254.     EX    (SP),HL        ; 16            | 70 if    |  true,
  255.     EX    (SP),HL        ; 16            | false    | 18396 if
  256.     DEC    A        ; 4            |    |  false
  257.     JR    NZ,D2        ; 8 if true, 6 if false    |    |
  258.     POP    AF        ; 9                |
  259.     DEC    A        ; 4                |
  260.     JR    NZ,D1        ; 8 if true, 6 if false        |
  261.     JR    OUTP2        ; return and force send of character
  262. ;
  263. ; process BREAK request
  264. ;
  265. BREAK:    XOR    A
  266.     RET        ;NO BREAK AVAILABLE
  267. ;
  268. ; check carrier status
  269. ;
  270. CST:    CALL    CKCTS        ; check CTS (really modem carrier, via
  271.     JR    Z,CST1        ; the special cable discussed above
  272.     XOR    A        ; NO CARRIER
  273.     RET
  274. CST1:    LD    A,0FFH
  275.     OR    A
  276.     RET
  277. ;
  278. ; Baud Rate Tables
  279. ;
  280.      if    c6144kHz
  281. ;
  282. ; HD64180 commands to set baud rates @ 6.144 MHz clock
  283. ;
  284. b300:    db    00001101b    ; no PS, sampling rate 64, divide ratio 32
  285. b1200:    db    00000101b    ; no PS, sampling rate 16, divide ratio 32
  286. b2400:    db    00000100b    ; no PS, sampling rate 16, divide ratio 16
  287. b4800:    db    00000011b    ; no PS, sampling rate 16, divide ratio 8
  288. b9600:    db    00000010b    ; no PS, sampling rate 16, divide ratio 4
  289. b19200:    db    00000001b    ; no PS, sampling rate 16, divide ratio 2
  290. b38400:    db    00000000b    ; no PS, sampling rate 16, divide ratio 1
  291.      endif
  292.      if    c9216kHz
  293. ;
  294. ; HD64180 commands to set baud rates @ 9.216 MHz clock
  295. ;
  296. b300:    db    00100110b    ; PS, sampling rate 16, divide ratio 64
  297. b1200:    db    00100100b    ; PS, sampling rate 16, divide ratio 16
  298. b2400:    db    00100011b    ; PS, sampling rate 16, divide ratio 8
  299. b4800:    db    00100010b    ; PS, sampling rate 16, divide ratio 4
  300. b9600:    db    00100001b    ; PS, sampling rate 16, divide ratio 2
  301. b19200:    db    00100000b    ; PS, sampling rate 16, divide ratio 1
  302.      endif
  303.      if    c12288kHz
  304. ;
  305. ; HD64180 commands to set baud rates @ 12.288 MHz clock
  306. ;
  307. b300:    db    00001110b    ; no PS, sampling rate 64, divide ratio 64
  308. b1200:    db    00000110b    ; no PS, sampling rate 16, divide ratio 64
  309. b2400:    db    00000101b    ; no PS, sampling rate 16, divide ratio 32
  310. b4800:    db    00000100b    ; no PS, sampling rate 16, divide ratio 16
  311. b9600:    db    00000011b    ; no PS, sampling rate 16, divide ratio 8
  312. b19200:    db    00000010b    ; no PS, sampling rate 16, divide ratio 4
  313. b38400:    db    00000001b    ; no PS, sampling rate 16, divide ratio 2
  314.      endif
  315. ;
  316. ; End of this modem interface
  317. ;
  318.     db    'copyright 1987 Echelon, Inc.'
  319.