home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / jsage / znode3 / modem / ti-24-22.z80 < prev    next >
Encoding:
Text File  |  1993-06-08  |  14.0 KB  |  602 lines

  1.  
  2. ;
  3. ; MODULE: T3TI24-2 (Telephone Interface) for Hayes-compatible 2400 bps
  4. ;         modems
  5. ; Author: David McCord/Richard Conn
  6. ; Version: 2.2
  7. ; Date: 25 Feb 88
  8.  
  9. ; Version 2.2:   Tested with EMEX 2400 modem from NAOG, P.O.  Box 
  10. ;                2781, Warminister, PA 1897, 215/443-9031.   Code 
  11. ;                cleaned-up a little.  fg.
  12.  
  13. ; Version 2.1:  This Version has been modified by Ron Bush, Hanahan, SC for 
  14. ;        U.S. Roboutics Courier 2400 Modem.  The Courier Modem will not 
  15. ;        Auto-Baud below 1200 bps. There fore you have to check baud 
  16. ;        rate selected on ZCPR3 Message buffer before going to auto-
  17. ;        baud mode, Page 4-1 Term III Manual.  Also added M3 to 
  18. ;        Telephone Interface Initialization.  Speaker On after last
  19. ;        digit dialed, Off at Connect. 
  20.                 
  21.           
  22. ; Previous Versions: Richard Conn wrote T3TI-SM v1.2, which this is based on.
  23. ;                    v1.2 (2 Jan 86)
  24. ;
  25. ; Comments: This TI supports 300/1200/2400 bps Hayes-compatible modems.  A key
  26. ;           compatibility point is that the modem return the terse result code
  27. ;           "10" on CONNECT 2400.  Modems that should work with this TI include
  28. ;           the Hayes 2400, USR Courier 2400, and Racal-Vadic 2400V.  Developed
  29. ;           and tested on a Courier 2400.  Baud rate is automatically set upon
  30. ;           connection in answer or originate modes.  The answer routines have
  31. ;           been rewritten from the original to NOT use modem auto-answer
  32. ;           functions, as this can lead to the modem answering the phone when
  33. ;           it shouldn't.
  34.  
  35. ; History:  v2 fixes a few minor bugs.  Now console- abort during
  36. ;           dialing will always work, in v1 it didn't.  T3ANSWER
  37. ;           sometimes ended up with the serial port at 2400 bps and
  38. ;           the modem at 300 or 1200 in v1, and this has been fixed also.
  39. ;           Also set the speaker off during answer routines as a nice touch.
  40.  
  41.  
  42. ;        Set COURIER equate below; if using COURIER place your Z3BASE file
  43. ;         on default drive.  Rename file to TI.Z80; assemble to
  44. ;           Hex and load to BIN file type, ready to be used with install
  45. ;           "T3INS INSTALL.T3I<cr>" command, using ZAS and MLOAD:
  46. ;
  47. ;                             ZAS TI H;MLOAD TI.BIN=TI
  48. ;
  49.  
  50.     ORG    700H        ; BASE ADDRESS (700H - 9FFH)
  51.  
  52. ;
  53. ;  ACCESS TO FILER$SERVER WITHIN T3ANSWER, T3DIAL, T3HANGUP, T3INIT
  54. ;
  55. FILER$SERVER    EQU    11AH    ; ADDRESS OF ADDRESS
  56. FS$GETSPEED    EQU    0    ; GET PROCESSOR SPEED
  57. FS$WAIT1S    EQU    1    ; WAIT 1 SEC
  58. FS$WAITP1S    EQU    2    ; WAIT 0.1 SEC
  59. FS$WAIT1MS    EQU    3    ; WAIT 0.001 SEC
  60. FS$CST        EQU    4    ; CONSOLE STATUS (Z=RDA)
  61. FS$CIN        EQU    5    ; CONSOLE INPUT
  62. FS$COUT        EQU    6    ; CONSOLE OUTPUT (CHAR IN C)
  63. ;
  64. ;  ACCESS TO MODEM OVERLAY ROUTINES
  65. ;
  66. M1$INIT        EQU    600H        ; INITIALIZE MODEM
  67. M1$ISTAT    EQU    M1$INIT+3    ; INPUT STATUS
  68. M1$OSTAT    EQU    M1$ISTAT+3    ; OUTPUT STATUS
  69. M1$IN        EQU    M1$OSTAT+3    ; INPUT BYTE
  70. M1$OUT        EQU    M1$IN+3        ; OUTPUT BYTE
  71. M1$BREAK    EQU    M1$OUT+3    ; SEND BREAK
  72. M1$CST        EQU    M1$BREAK+3    ; CARRIER STATUS DETECT
  73. M1$SPTAB    EQU    M1$CST+3    ; SPEED BYTE
  74. ;
  75. ;  ASCII CONSTANTS
  76. ;
  77. CR    EQU    0DH
  78. CTRLC    EQU    'C'-'@'
  79. ;
  80. COURIER    EQU    000H         ; IF YES, USE 0FFH FOR COURIER 2400
  81.  
  82.        IF COURIER
  83.     .XLIST
  84.     .IN    Z3BASE
  85.     .LIST
  86.        ENDIF
  87. ;
  88. ;  Telephone System Interface Routines
  89. ;
  90. TI$INIT:
  91.     JP    STI$INIT    ; INITIALIZATION
  92. TI$ANS:
  93.     JP    STI$ANS        ; SET ANSWER MODE
  94. TI$HANG:
  95.     JP    STI$HANG    ; HANG UP PHONE
  96. TI$RST:
  97.     JP    STI$RST        ; RING STATUS DETECT
  98. TI$DSTRT:
  99.     JP    STI$DSTRT    ; START DIALING
  100. TI$DSTOP:
  101.     JP    STI$DSTOP    ; STOP DIALING
  102. TI$DIGIT:
  103.     JP    STI$DIGIT    ; DIAL DIGIT
  104. TI$PREPANS:
  105.     JP    STI$PREPANS    ; PREPARE FOR ANSWERING PHONE
  106. TI$GETBAUD:
  107.     JP    STI$GETBAUD    ; RETURN CURRENT BAUD RATE VALUE
  108. ;
  109. ;  FILER$SERVER INTERFACE FOR TELEPHONE INTERFACE OVERLAY
  110. ;  FILER$SERVER CODE IS IN A
  111. ;
  112. TI$FS:
  113.     PUSH    HL        ; SAVE HL
  114.     LD    HL,TI$FSRET    ; SET RETURN ADDRESS
  115.     PUSH    HL        ; ... ON STACK
  116.     LD    HL,(FILER$SERVER) ; GET ADDRESS OF FILER$SERVER
  117.     JP    (HL)        ; "CALL" ROUTINE
  118. TI$FSRET:
  119.     POP    HL        ; RESTORE HL
  120.     RET
  121. ;
  122. ;  SEND 'ATx' COMMAND TO MODEM
  123. ;
  124. CMD$SEND:
  125.     PUSH    AF        ; SAVE CMD
  126.     LD    A,FS$WAIT1S    ; CODE TO WAIT 1 SECOND
  127.     CALL    TI$FS        ; FILER$SERVER
  128.     LD    A,'A'        ; SEND 'AT'
  129.     CALL    CMD$SEND1
  130.     LD    A,'T'
  131.     CALL    CMD$SEND1
  132.     POP    AF        ; GET CMD
  133. ;
  134. ;  SEND FURTHER COMMAND CHARS TO MODEM
  135. ;
  136. CMD$SEND1:
  137.     PUSH    AF        ; SAVE CHAR
  138.     CALL    M1$OUT        ; SEND CHAR IN A
  139.     PUSH    BC
  140.     IF    COURIER
  141.     LD    B,30        ; do this 30 times...
  142.     ELSE
  143.     LD    B,10        ; do this 10 times...
  144.     ENDIF
  145. CMD$SEND2:
  146.     LD    A,FS$WAIT1MS
  147.     CALL    TI$FS        ; wait a millisecond
  148.     DJNZ    CMD$SEND2    ; if courier 2400 wait 30ms
  149.     POP    BC        ; when we get here, we waited 10ms for echo
  150.     CALL    FLUSH        ; flush the echo
  151.     POP    AF
  152.     RET
  153. ;
  154. ;  END MODEM COMMAND SEQUENCE
  155. ;
  156. CMD$END:
  157.     PUSH    AF        ; SAVE A
  158.     LD    A,0DH        ; SEND <CR> AND WAIT FOR <CR>
  159.     CALL    CMD$SEND1    ; SEND CHAR WITH ECHO
  160.     POP    AF        ; RESTORE A
  161.     RET
  162. ;
  163. ;  WAIT FOR RESPONSE FROM MODEM COMMAND
  164. ;    RETURN DIGIT UNLESS ERROR:
  165. ;    A=0FFH if TIMEOUT
  166. ;    A=0FEH if USER ABORT
  167. ;
  168. SSRESPONSE:
  169.     PUSH    HL
  170.     LD    HL,500        ; super short delay for response (.5 sec)
  171.     JR    RESPE
  172. SRESPONSE:
  173.     PUSH    HL
  174.     LD    HL,2000        ; SHORT DELAY FOR RESPONSE (2 secs)
  175.     JR    RESPE
  176. RESPONSE:
  177.     PUSH    HL        ; SAVE HL
  178.     LD    HL,30000    ; LARGE DELAY FOR RESPONSE (30 secs)
  179. RESPE:
  180.     LD    (RESP$DELAY),HL
  181. RESP1:
  182.     LD    HL,(RESP$DELAY)    ; DELAY FOR RESPONSE
  183. RESP2:
  184.     CALL    M1$ISTAT    ; INPUT CHAR FROM MODEM?
  185.     JR    NZ,RESPM
  186.     LD    A,FS$CST    ; CONSOLE STATUS
  187.     CALL    TI$FS        ; USER ABORT?
  188.     JR    Z,RESP3
  189.     LD    A,FS$WAIT1MS
  190.     CALL    TI$FS        ; wait 0.001 sec
  191.     DEC    HL        ; COUNT DOWN
  192.     LD    A,H        ; DONE?
  193.     OR    L
  194.     JR    NZ,RESP2
  195.     POP    HL
  196.     OR    0FFH        ; TIMEOUT CODE
  197.     RET
  198. RESP$DELAY:
  199.     DS    2        ; RESPONSE DELAY
  200. ;
  201. ; PROCESS USER CHAR
  202. ;
  203. RESP3:
  204.     LD    A,FS$CIN    ; GET USER INPUT
  205.     CALL    TI$FS        ; USE FILER$SERVER
  206.     AND    7FH        ; MASK
  207.     CP    CTRLC        ; ABORT?
  208.     JR    NZ,RESP2
  209.     POP    HL        ; RESTORE HL
  210.     LD    A,0FEH        ; USER ABORT
  211.     OR    A
  212.     RET
  213. ;
  214. ; PROCESS MODEM CHAR
  215. ;
  216. RESPM:
  217.     CALL    M1$IN        ; GET CHAR
  218.     AND    7FH        ; MASK
  219.     JR    Z,RESP1        ; FLUSH NULL
  220.     POP    HL        ; RESTORE HL
  221.     RET
  222. ;
  223. ;  ATTRACT ATTENTION OF MODEM
  224. ;
  225. ATTENTION:
  226.     CALL    M1$CST        ; DO NOTHING IF NO CARRIER
  227.     RET    Z
  228.     CALL    FLUSH        ; FLUSH ANY CHAR
  229.     LD    A,0        ; SEND AT LEAST ONE CHAR FIRST
  230.     CALL    M1$OUT
  231.     LD    A,FS$WAIT1S    ; WAIT 1 SEC
  232.     CALL    TI$FS        ; USE FILER$SERVER
  233.     LD    A,'+'        ; ATTRACT MODEM'S ATTENTION
  234.     CALL    M1$OUT
  235.     CALL    M1$OUT
  236.     CALL    M1$OUT
  237.     CALL    SRESPONSE    ; WAIT FOR RESPONSE OR TIMEOUT
  238.     RET
  239. ;
  240. ;  FLUSH ANY GARBAGE CHARS FROM COMMAND LINE
  241. ;
  242. FLUSH:
  243.     CALL    M1$ISTAT    ; ANY CHARS?
  244.     RET    Z        ; RETURN IF NONE
  245.     CALL    M1$IN        ; GET CHAR
  246.     RET
  247. ;
  248. ;  Telephone Interface Initialization
  249. ;    Function:  Initialize the Modem/UART Interface
  250. ;    Input Parameters:  None
  251. ;    Output Parameters:  None
  252. ;
  253. STI$INIT:
  254.     PUSH    AF        ; SAVE A
  255.     CALL    ATTENTION    ; GET MODEM'S ATTENTION
  256.     LD    A,'Z'        ; RESET MODEM
  257.     CALL    CMD$SEND    ; SEND COMMAND
  258.     CALL    CMD$END        ; SEND <CR>
  259.     CALL    OK        ; GET OK/USER ABORT
  260.     CP    0FEH        ; USER ABORT?
  261.     JR    Z,STI$INI1
  262.     LD    A,'V'        ; SET NON-VERBOSE MODE
  263.     CALL    CMD$SEND    ; SEND COMMAND
  264.     LD    A,'0'        ; V0 COMMAND
  265.     CALL    CMD$SEND1
  266.     LD    A,'X'        ; SET EXTENDED COMMAND SET
  267.     CALL    CMD$SEND1    ; SEND COMMAND
  268.     LD    A,'4'        ; Enable result codes 0 thru 10
  269.     CALL    CMD$SEND1
  270.  
  271.     IF    COURIER
  272.  
  273.     LD    A,'M'        ; Speaker On after last digit, Off at Connect
  274.     CALL    CMD$SEND1
  275.     LD    A,'3'
  276.     CALL    CMD$SEND1
  277.         ENDIF
  278.  
  279.     LD    A,'S'        ; disable auto-answer if turned on somehow
  280.     CALL    CMD$SEND1
  281.     LD    A,'0'
  282.     CALL    CMD$SEND1
  283.     LD    A,'='
  284.     CALL    CMD$SEND1
  285.     LD    A,'0'
  286.     CALL    CMD$SEND1
  287.     CALL    CMD$END        ; SEND <CR>
  288.     CALL    OK1        ; GET OK/USER ABORT
  289. STI$INI1:
  290.     CALL    FLUSH        ; FLUSH RESPONSES
  291.     POP    AF        ; RESTORE A
  292.     RET
  293. ;
  294. ; GET RESPONSE CODE OF 'OK' OR '0'
  295. ;
  296. OK:
  297.     CALL    SRESPONSE    ; GET FIRST CHAR
  298.     CP    0FEH        ; USER ABORT?
  299.     RET    Z
  300.     CP    '0'        ; DIGIT '0'?
  301.     JR    Z,OK1A
  302.     CP    'O'        ; LETTER 'O'?
  303.     JR    NZ,OK
  304.     CALL    SRESPONSE    ; GET 'K'
  305.     CP    0FEH        ; USER ABORT?
  306.     RET    Z
  307.     CALL    SRESPONSE    ; GET <CR>
  308.     CP    0FEH        ; USER ABORT?
  309.     RET    Z
  310.     CALL    SRESPONSE    ; GET <LF>
  311.     RET
  312. ;
  313. ; GET RESPONSE CODE OF '0'
  314. ;
  315. OK1:
  316.     CALL    SRESPONSE    ; GET FIRST CHAR
  317.     CP    0FEH        ; USER ABORT?
  318.     RET    Z
  319.     CP    '0'        ; OK?
  320.     JR    NZ,OK1
  321. OK1A:
  322.     CALL    SRESPONSE    ; GET <CR>
  323.     RET
  324. ;
  325. ;  Prepare Modem to Answer Phone
  326. ;    Function:  To condition modem for answering phone
  327. ;    Input Parameters:  None
  328. ;    Output Parameters:  None
  329. ;
  330. STI$PREPANS:
  331.     PUSH    AF
  332.     LD    A,3        ; set serial port to 2400 SPEED
  333.       IF COURIER
  334.     LD    (Z3MSG+3AH),A    ; SET BAUD RATE ZMSG BYTE
  335.       ENDIF
  336.     LD    (STI$BRATE),A    ; SET FLAG
  337.     CALL    M1$INIT
  338.     LD    A,'M'        ; shut off speaker when recieving calls and
  339.     CALL    CMD$SEND    ; also set modem to 2400 as a side effect
  340.     LD    A,'0'
  341.     CALL    CMD$SEND1
  342.     CALL    CMD$END
  343.     POP    AF
  344.     RET
  345. ;
  346. ;  Set Modem to Answer
  347. ;    Function:  Set Modem to Answer Mode
  348. ;    Input Parameters:  None
  349. ;    Output Parameters:  A=0 IF NOT SUCCESSFUL, A=0FFH IF SUCCESSFUL
  350. ;
  351. STI$ANS:
  352.     XOR    A        ; SET NO BAUD RATE
  353.       IF COURIER
  354.     LD    (Z3MSG+3AH),A    ; SET BAUD RATE ZMSG BYTE
  355.       ENDIF
  356.     LD    (STI$BRATE),A    ; SET FLAG
  357.     LD    A,'A'        ; prepare to send ATA command
  358.     CALL    CMD$SEND    ; send it
  359.     CALL    CMD$END
  360. STI$ANS1:
  361.     CALL    RESPONSE
  362.     CP    CR        ; <CR>?
  363.     JR    Z,STI$ANS1
  364.     CP    '1'        ; is it "1" or "10" (300 or 2400)?
  365.     JR    Z,STI$ANS324    ; If Z, process further
  366.     CP    '5'        ; CONNECT 1200?
  367.     JR    Z,STI$ANS12
  368.     XOR    A        ; make A 0 (we didn't get a connect)
  369.     RET
  370. STI$ANS324:
  371.     CALL    SSRESPONSE    ; we should have at least a CR or a 0 pending
  372.     CP    CR        ; is it CR?
  373.     JR    Z,STI$ANS3    ; must be 300 if Z
  374. STI$ANS24:
  375.     LD    A,3        ; select 2400 bps
  376.     JR    STI$ANSSET
  377. STI$ANS3:
  378.     LD    A,1        ; SELECT 300 BAUD
  379.     JR    STI$ANSSET
  380. STI$ANS12:
  381.     LD    A,2        ; SELECT 1200 BAUD
  382. STI$ANSSET:
  383.       IF COURIER
  384.     LD    (Z3MSG+3AH),A    ; SET BAUD RATE ZMSG BYTE
  385.       ENDIF
  386.     LD    (STI$BRATE),A    ; SET BAUD RATE
  387.     CALL    M1$INIT        ; INIT USART BAUD RATE
  388.     LD    A,FS$WAITP1S    ; wait 0.1 sec
  389.     CALL    TI$FS
  390.     CALL    FLUSH        ; gobble possible pending CR
  391.     OR    A,0FFH        ; RETURN CONNECT CODE
  392.     RET
  393. ;
  394. ;  Hang up telephone
  395. ;    Function:  Place the telephone on hook
  396. ;    Input Parameters:  None
  397. ;    Output Parameters:  None
  398. ;
  399. STI$HANG:
  400.     PUSH    AF
  401.     CALL    M1$CST        ; DO NOT HANG UP IF NO CARRIER
  402.     JR    Z,STI$HANG1
  403.     CALL    STI$HANG3    ; HANG UP PHONE
  404.     CP    0FEH        ; USER ABORT?
  405.     JR    Z,STI$HANG1
  406.     CALL    M1$CST        ; STILL CARRIER?
  407.     JR    Z,STI$HANG1
  408.     CALL    STI$HANG3    ; TRY A SECOND TIME TO HANG UP
  409. STI$HANG1:
  410.     CALL    CMD$END        ; send a CR to be safe
  411.     POP    AF
  412.     RET
  413. STI$HANG3:
  414.     CALL    ATTENTION    ; GET MODEM'S ATTENTION
  415.     LD    A,'H'        ; HANG UP PHONE
  416.     CALL    CMD$SEND
  417.     CALL    CMD$END        ; END OF COMMAND
  418.     CALL    SRESPONSE    ; FLUSH RESPONSE DIGIT
  419.     CP    0FEH        ; USER ABORT
  420.     RET    Z
  421.     CALL    SRESPONSE    ; FLUSH RESPONSE <CR>
  422.     RET
  423. ;
  424. ;  YES and NO Return Codes
  425. ;
  426. STI$YES:
  427.     OR    0FFH        ; SET FLAGS
  428.     RET
  429. STI$NO:
  430.     XOR    A        ; NO ANSWER
  431.     RET
  432. ;
  433. ;  Ring Status Detect
  434. ;    Function:  Determines if phone is ringing or not.
  435. ;    Input Parameters:  None
  436. ;    Output Parameters:  A=0FFH no ring, A=0 ring, A=0FEH user abort
  437. ;
  438. STI$RST:
  439.     CALL    SSRESPONSE    ; GET RETURN CODE
  440.     CP    0DH        ; cr?
  441.     JR    Z,STI$RST
  442.     CP    '2'        ; RING?
  443.     JR    Z,STI$RST3
  444.     CP    0FEH        ; USER ABORT?
  445.     JR    Z,STI$RST2
  446. STI$RST1:
  447.     LD    A,0FFH        ; RETURN NO RING
  448. STI$RST2:
  449.     OR    A        ; SET FLAGS
  450.     RET
  451. STI$RST3:
  452.     CALL    SSRESPONSE    ; get trailing CR
  453.     CP    0FEH        ; user abort?
  454.     JR    Z,STI$RST2
  455.     XOR    A
  456.     RET
  457. ;
  458. ;  Start Dialing
  459. ;    Function:  Initiate the dialing process
  460. ;    Input Parameters:  None
  461. ;    Output Parameters:  A=0 if no dial tone, A=0FFH if dial tone
  462. ;
  463. STI$DSTRT:
  464.     CALL    FLUSH        ; FLUSH CHAR IF PRESENT
  465.  
  466.     IF     COURIER
  467.     LD    A,(Z3MSG+3AH)    ; CHECK BAUD RATE
  468.     CP    2        ; IF LESS THAN 1200 
  469.     JR    C,STI$DSTR1    ; NO AUTO BAUD
  470.         ENDIF
  471.  
  472.     LD    A,3        ; SELECT 2400 BPS
  473. STI$DSTR1:
  474.       IF COURIER
  475.     LD    (Z3MSG+3AH),A    ; SET BAUD RATE ZMSG BYTE
  476.       ENDIF
  477.     LD    (STI$BRATE),A    ; SET FLAG
  478.     CALL    M1$INIT
  479.     LD    A,'D'        ; START DIALING
  480.     CALL    CMD$SEND    ; SEND COMMAND
  481.     LD    A,'T'        ; TOUCH TONE DIALING
  482.     CALL    CMD$SEND1
  483.     JP    STI$YES        ; fake dial tone OK, even though we aren't
  484.                 ; off-hook yet
  485. ;
  486. ;  Stop Dialing
  487. ;    Function:  Terminate the dialing process with answer or user abort,
  488. ;                  and set baud rate based on result code if answer.
  489. ;    Input Parameters:  None
  490. ;    Output Parameters:  A=0 and Z if answer, NZ and error code if no ans
  491. ;                Error Code: 0FFH=Timeout, 0FEH=User Abort
  492. ;                    Other=TI Return Code
  493. ;
  494. STI$DSTOP:
  495.     LD    A,CR
  496.     CALL    CMD$SEND1    ; send CR
  497. STI$DS1:
  498.     LD    A,FS$CST    ; CHECK CONSOLE STATUS
  499.     CALL    TI$FS        ; USE FILER$SERVER
  500.     JR    Z,STI$DS2    ; NO CONNECTION IF USER ABORT
  501. STI$DSLOOP:
  502.     CALL    RESPONSE    ; ANSWER?
  503.     CP    0FFH        ; TIMEOUT?
  504.     JR    Z,STI$DS1
  505.     CP    0FEH        ; USER ABORT
  506.     JR    Z,STI$DS2E
  507.     CP    '2'        ; RING?
  508.     JR    Z,STI$DSLOOP
  509.     CP    CR        ; <CR>
  510.     JR    Z,STI$DSLOOP
  511.     CP    '9'+1        ; CHECK RANGE
  512.     JR    NC,STI$DS1
  513.     CP    '0'        ; CHECK RANGE
  514.     JR    C,STI$DS1
  515.     CP    '1'        ; is it a "1" or "10"?
  516.     JR    Z,STI$DS324    ; process more if so
  517.     CP    '5'        ; CONNECTED AT 1200 BAUD?
  518.     RET    NZ
  519.     LD    A,2        ; SELECT 1200 BAUD
  520. STI$DSB:
  521.       IF COURIER
  522.     LD    (Z3MSG+3AH),A    ; SET BAUD RATE ZMSG BYTE
  523.       ENDIF
  524.     LD    (STI$BRATE),A    ; SET FLAG
  525.     CALL    M1$INIT        ; SET BAUD RATE
  526.     XOR    A        ; RETURN CONNECT CODE
  527.     RET
  528. STI$DS2:
  529.     LD    A,FS$CIN    ; GET CHAR
  530.     CALL    TI$FS        ; USE FILER$SERVER
  531.     AND    7FH
  532.     CP    CTRLC        ; ABORT?
  533.     JR    NZ,STI$DS1
  534. STI$DS2E:
  535.     LD    A,0FEH        ; SET USER ABORT
  536.     OR    A
  537.     RET
  538. STI$DS324:
  539.     CALL    SSRESPONSE    ; there is at least a CR or 0 pending
  540.     CP    CR        ; was it cr, not 0?
  541.     JR    Z,STI$DS3    ; if yes, go set 300 baud
  542. STI$DS24:
  543.     LD    A,3        ; select 2400 bps
  544.     JR    STI$DSB
  545. STI$DS3:
  546.     LD    A,1        ; SELECT 300 BAUD
  547.     JR    STI$DSB
  548. ;
  549. ;  Dial Digit
  550. ;    Function:  Dial an individual digit
  551. ;    Input Parameters:  A=ASCII for digit to dial
  552. ;    Output Parameters:  None
  553. ;
  554. STI$DIGIT:
  555.     PUSH    AF
  556.     CP    ' '        ; DON'T SEND SPACES
  557.     JR    Z,STI$DIGIT1
  558.     CP    '-'        ; don't send dashes
  559.     JR    Z,STI$DIGIT1
  560.     CP    '('        ; don't send parenthesis
  561.     JR    Z,STI$DIGIT1
  562.     CP    ')'        ; other kind
  563.     JR    Z,STI$DIGIT1
  564.     CALL    CMD$SEND1    ; SEND DIGIT WITH ECHO
  565. STI$DIGIT1:
  566.     POP    AF
  567.     RET
  568. ;
  569. ;  Get Baud
  570. ;    Function:  Return current baud rate value (from answer or dial)
  571. ;    Input Parameters: None
  572. ;    Output Parameters: A = Baud Rate and Z flag set
  573. ;        A = 0 means undefined
  574. ;        A = 1 means  300 baud
  575. ;        A = 2 means 1200 bps
  576. ;        A = 3 means 2400 bps
  577. ;
  578. STI$GETBAUD:
  579.     LD    A,(STI$BRATE)    ; SET FLAG
  580.     OR    A        ; SET FLAGS
  581.     RET
  582. ;
  583. ;  BAUD RATE FLAG
  584. ;    A = 0 IF NONE
  585. ;    A = 1 IF  300 BAUD
  586. ;    A = 2 IF 1200 bps
  587. ;    A = 3 IF 2400 bps
  588. ;
  589. STI$BRATE:
  590.     DB    0        ; FLAG BUFFER
  591. ;
  592. ;        END of Telephone Interface Routines
  593. ;
  594.     DB    'End of TI-2400'
  595.  
  596.     END
  597.  IF 2400 bps
  598. ;
  599. STI$BRATE:
  600.     DB    0        ; FLAG BUFFER
  601. ;
  602. ;        END of Telephone Interface Routines
  603.