home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / nubye / nuby-ins.lbr / NUTV-3.IQS / nutv-3.ins
Text File  |  1986-04-26  |  6KB  |  234 lines

  1. ; NUTV-1.INS - NUBYE insert for TeleVideo TS-802, 803 & 804 - 04/21/86
  2. ;
  3. ; TV802 uses the Z80 SIO & CTC timer (3.6864 MHz)
  4. ; TV803 uses Mostek 8301 & CTC timer (3.6864 MHz)
  5. ; TV804 uses the Z80 SIO & CTC timer (3.9936 MHz)
  6. ;
  7. ; Note:  This is an insert, not an overlay.
  8. ;
  9. ; ========
  10. ;
  11. ; 04/21/86  Modified for NUBYE
  12. ; 01/05/86  Added TV804 capability    - Irv Hoff
  13. ; 01/02/86  Added TV803 capability    - Tanny O'Haley
  14. ; 07/17/85  Written for TV802 and BYE5    - Irv Hoff
  15. ;
  16. ; ========
  17. ;
  18. ; Select one of the following choices for your computer.  (Gets the
  19. ; YES/NO values from the main NUBYE program.)
  20. ;
  21. TV802    EQU    NO
  22. TV803    EQU    NO
  23. TV804    EQU    YES
  24. ;
  25. ; Modem port equates
  26. ;
  27.      IF    TV802
  28. PORT    EQU    20H        ; Modem data port
  29. MDCTL1    EQU    PORT+2        ; Modem status port
  30. BDPORT    EQU    8        ; CTC port for baud rate
  31.      ENDIF            ; TV802
  32. ;
  33.      IF    TV803
  34. PORT    EQU    2FH        ; Modem data port
  35. MDCTL1    EQU    PORT-1        ; Modem send status port
  36. MDCTL2    EQU    PORT-2        ; Modem receive status port
  37. REGINT    EQU    27H        ; Interrupt register port
  38. SPSTAT    EQU    21H        ; Parameter status register
  39. BDPORT    EQU    2BH        ; CTC port for baud rate
  40.      ENDIF            ; TV803
  41. ;
  42.      IF    TV804
  43. PORT    EQU    1EH        ; Modem data ort
  44. MDCTL1    EQU    PORT+1        ; Modem status port
  45. BDPORT    EQU    0EH        ; CTC port for baud rate
  46.      ENDIF            ; TV804
  47. ;
  48. ; Baudrate table
  49. ;
  50.      IF    TV802
  51. BD300    EQU    4780H        ; 38400/300  converted to hex value
  52. BD1200    EQU    4720H        ; 38400/1200 converted to hex value
  53. BD2400    EQU    4710H        ; 38400/2400 converted to hex value
  54. BD9600    EQU    4704H        ; 38400/9600 converted to hex value
  55.      ENDIF            ; TV802
  56. ;
  57.      IF    TV803
  58. BD300    EQU    4720H        ; 9600/300  converted to hex value
  59. BD1200    EQU    4708H        ; 9600/1200 converted to hex value
  60. BD2400    EQU    4704H        ; 9600/2400 converted to hex value
  61. BD9600    EQU    4701H        ; 9600/9600 converted to hex value
  62.      ENDIF            ; TV803
  63. ;
  64.      IF    TV804
  65. BD300    EQU    734H        ; 7800/300 converted to hex value
  66. BD1200    EQU    4768H        ; 124800/1200 converted to hex value
  67. BD2400    EQU    4734H        ; 124800/2400 converted to hex value
  68. BD9600    EQU    470DH        ; 124800/9600 converted to hex value
  69.      ENDIF            ; TV804
  70. ;
  71. ; See if we still have a carrier - if not, return with the zero flag set
  72. ; Reg A is zero if no carrier, non-zero if carrier
  73. ;
  74. MDCARCK: IF    TV802 OR TV804
  75.     MVI    A,10H        ; Reset status
  76.     OUT    MDCTL1
  77.     IN    MDCTL1        ; Get status
  78.     ANI    8        ; Check for carrier detect
  79.      ENDIF            ; TV802 OR TV804
  80. ;
  81.      IF    TV803
  82.     IN    SPSTAT        ; Read status register
  83.     ANI    1        ; Check for carrier detect
  84.     XRI    1        ; Ready if bit 0 = 0
  85.      ENDIF            ; TV803
  86. ;
  87.     RET
  88. ;
  89. ; Disconnect and wait for an incoming call
  90. ;
  91. MDINIT:     IF    TV802 OR TV804
  92.     MVI    A,18H        ; Reset channel
  93.     OUT    MDCTL1
  94.     MVI    A,4        ; Setup to write register 4
  95.     OUT    MDCTL1
  96.     MVI    A,44H        ; 1 stop, 8 bits, no parity
  97.     OUT    MDCTL1
  98.     MVI    A,1        ; Setup to write register 1
  99.     OUT    MDCTL1
  100.     MVI    A,0
  101.     OUT    MDCTL1
  102.     MVI    A,5        ; Setup to write register 5
  103.     OUT    MDCTL1
  104.     MVI    A,68H        ; Clear DTR causing hangup
  105.     OUT    MDCTL1
  106.     PUSH    B        ; In case it is being used elsewhere
  107. ;
  108. OFFTI:    CALL    DELAY        ; 0.1 second delay
  109.     DCR    B
  110.     JNZ    OFFTI        ; Keep looping until finished
  111.     POP    B        ; Restore BC
  112.     MVI    A,3        ; Setup to write register 3
  113.     OUT    MDCTL1
  114.     MVI    A,0C1H        ; Initialize receive register
  115.     OUT    MDCTL1
  116.     MVI    A,5        ; Setup to write register 5
  117.     OUT    MDCTL1
  118.     MVI    A,0EAH        ; Turn on DTR so modem can answer phone
  119.     OUT    MDCTL1
  120.      ENDIF            ; TV802 OR TV804
  121. ;
  122.      IF    TV803
  123.     XRA    A
  124.     OUT    REGINT        ; Stop interrupts
  125.     MVI    A,20H        ; Drop DTR
  126.     OUT    SPSTAT
  127.     MVI    B,20        ; 2 seconds delay to drop any carrier
  128.     PUSH    B        ; In case it is being used elsewhere
  129. ;
  130. OFFTI:    CALL    DELAY        ; 0.1 second delay
  131.     DCR    B
  132.     JNZ    OFFTI        ; Keep looping till finished
  133.     POP    B        ; Restore BC
  134.     XRA    A        ; Turn on DTR so modem can answer phone
  135.     OUT    SPSTAT
  136.      ENDIF            ; TV803
  137. ;
  138.      IF    IMODEM
  139.     CALL    IMINIT        ; Initialize smartmodem
  140.      ENDIF            ; IMODEM
  141. ;
  142.     RET
  143. ;
  144. ; Input a character from the modem port
  145. ;
  146. MDINP:    IN    PORT        ; Get character
  147.     RET
  148. ;
  149. ; Check the status to see if a character is available.    If not, return
  150. ; with the zero flag set.  If yes, use 0FFH to clear the flag.
  151. ;
  152. MDINST:     IF    TV802 OR TV804
  153.     IN    MDCTL1        ; Get status
  154.     ANI    1        ; Check receive ready bit
  155.     RZ            ; Return if none
  156.     ORI    0FFH        ; Otherwise, set the flags
  157.      ENDIF            ; TV802 OR TV804
  158. ;
  159.      IF    TV803
  160.     IN    MDCTL2        ; Get input status
  161.     ANI    80H        ; Check receive ready bit
  162.      ENDIF            ; TV803
  163. ;
  164.     RET
  165. ;
  166. ; Send a character to the modem
  167. ;
  168. MDOUTP:    OUT    PORT        ; Send it
  169.     RET
  170. ;
  171. ; See if the output is ready for another character
  172. ;
  173. MDOUTST:IN    MDCTL1        ; Read port
  174. ;
  175.      IF    TV802 OR TV804
  176.     ANI    4        ; Check transmit ready bit
  177.      ENDIF            ; TV802 OR TV804
  178. ;
  179.      IF    TV803
  180.     ANI    80H        ; Check transmit ready bit
  181.      ENDIF            ; TV803
  182. ;
  183.     RET
  184. ;
  185. ; Reinitialize the modem and hang up the phone by dropping DTR and
  186. ; leaving it inactive
  187. ;
  188. MDQUIT:     IF    IMODEM
  189.     CALL    IMQUIT        ; If a smartmodem, tell it to shut down
  190.      ENDIF            ; IMODEM
  191. ;
  192. ; Called by the main program after caller types BYE
  193. ;
  194. MDSTOP:     IF    TV802 OR TV804
  195.     MVI    A,5        ; Setup to write register 5
  196.     OUT    MDCTL1
  197.     MVI    A,68H        ; Clear DTR causing shutdown
  198.     OUT    MDCTL1
  199.      ENDIF            ; TV802 OR TV804
  200. ;
  201.      IF    TV803
  202.     MVI    A,20H
  203.     OUT    SPSTAT        ; Turn DTR off to disconnect
  204.      ENDIF            ; TV803
  205. ;
  206.     RET
  207. ;
  208. ; The following routine sets the baudrate.  NUBYE asks for the maximum
  209. ; speed you have available.
  210. ;
  211. SETINV:    ORI    0FFH        ; Make sure the Zero flag is not set
  212.     RET
  213. ;
  214. SET300:    LXI    H,BD300
  215.     JMP    STBAUD
  216. ;
  217. SET1200:LXI    H,BD1200
  218.     JMP    STBAUD
  219. ;
  220. SET2400:LXI    H,BD2400
  221.     JMP    STBAUD
  222. ;
  223. SET9600:LXI    H,BD2400
  224.     JMP    STBAUD
  225. ;
  226. STBAUD:    MOV    A,H        ; CTC timer control word
  227.     OUT    BDPORT        ; Controls CTC timer/counter
  228.     MOV    A,L        ; Baudrate
  229.     OUT    BDPORT
  230.     RET
  231. ;
  232. ; end of insert
  233. ; -------------
  234.