home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / mex / mxo-ad13.aqm / MXO-AD13.ASM
Assembly Source File  |  1985-08-05  |  28KB  |  1,089 lines

  1. ;//////////////////////////////////////////////////////////////////////////////
  2. ;
  3.      Title  'MEX Overlay for Advanced Digital Super Six / Super Quad SBC'
  4. ;
  5. ;//////////////////////////////////////////////////////////////////////////////
  6. ;
  7. REV    EQU    13        ; revision number * 10
  8. ;
  9. ;----------------
  10. ;  History:    
  11. ;
  12. ;
  13. ;  11/24/84 ... MXO-AD13.ASM   (was MXO-AD12.ASM)
  14. ;
  15. ;        Squashed a bug with the default baud rate setting if a 
  16. ;        new rate was set then a CLONE was done - would not come
  17. ;        up at the new bit rate. Added SET DIGIT implemented as 
  18. ;        inter-digit time specification (40 mS works well). 
  19. ;                                   JP Sojak
  20. ;
  21. ;-----------------
  22. ;  
  23. ;  MEX Overlay for Advanced Digital Computers using the on board RS232 EIA
  24. ;  port.  The SBC utilizes a Z80 DART and a dual baud rate generator with
  25. ;  one oddball... the initial baudrate for the console and the serial port
  26. ;  is set with 7 Berg jumpers upon reset through a read only IO port. The 8th
  27. ;  bit is the side select bit for the floppy controller. The dual baud rate 
  28. ;  generator needs 8 bits to be set, 4 bits for each channel. This overlay
  29. ;  therefore brings in the jumpers, masks the side bit, extracts the default
  30. ;  console baud rate, <or>'s in the modem baud rate and writes it out to the 
  31. ;  generator. Type ahead buffer may be installed with this overlay ... the 
  32. ;  interrupt vector is not modified. In addition, A full-featured SET command 
  33. ;  processor is implemented to select the serial communications character-
  34. ;  istics of serial port 02, the modem port. A SET <cr> shows the current 
  35. ;  default settings, a SET ? brings up help and a SET XXXXXXX where XXXXXXX 
  36. ;  is defined in the following table will SET a new parameter.
  37. ;
  38. ;    Available SET Commands:
  39. ;
  40. ;    DELAY <n> (seconds)            BAUD <rate> 110-19.2K
  41. ;    ORIG (originate mode)            ANSWER    (mode)
  42. ;    TONE (dialing)                PULSE (dialing)
  43. ;    MONITOR (speaker on)            QUIET (speaker off)
  44. ;    PARITY (Odd, Even, None)        STOPBITS (1, 1.5, 2)
  45. ;    LENGTH (5, 6, 7, or 8)             DIGIT <time> in Ms 
  46. ;
  47. ;----------------
  48. ;  10/01/84 ...    MXO-AD10.ASM
  49. ;        Original version ... Tested with MEX112 ... Extractions 
  50. ;        from MXO-KP40.ASM ... Would appreciate a note of any 
  51. ;        problems be left on my RCPM MINIRBBS. 
  52. ;
  53. ;                                            John Sojak - SYSOP
  54. ;                            Smokin Silicon RCPM
  55. ;                            312 / 941-0049
  56. ;
  57. ;//////////////////////////////////////////////////////////////////////////////
  58. ;
  59. ; Advanced Digital port definitions
  60. ;
  61. CTRLPT    EQU    03H        ;serial status port
  62. DATAPT    EQU    02H        ;serial data port
  63. BAUDRP    EQU    18H        ;baud rate write port
  64. BDJMPS    EQU    15H        ;default jumper read port
  65. ;
  66. ; Advanced Digital bit definitions
  67. ;
  68. MDRCVB    EQU    01H        ;modem receive bit (DAV)
  69. MDRCVR    EQU    01H        ;modem receive ready
  70. MDSNDB    EQU    04H        ;modem send bit
  71. MDSNDR    EQU    04H        ;modem send ready bit
  72. MDMDCD    EQU    08H        ;modem data carrier detect 
  73. ;
  74. ; MEX Service Processor
  75. ;
  76. MEX    EQU    0D00H        ;address of the service processor
  77. INMDM    EQU    255        ;get char from port to A, CY=no more in 100 ms
  78. TIMER    EQU    254        ;delay 100ms * reg B
  79. TMDINP    EQU    253        ;B=# secs to wait for char, cy=no char
  80. CHEKCC    EQU    252        ;check for ^C from KBD, Z=present
  81. SNDRDY    EQU    251        ;test for modem-send ready
  82. RCVRDY    EQU    250        ;test for modem-receive ready
  83. SNDCHR    EQU    249        ;send a character to the modem (after sndrdy)
  84. RCVCHR    EQU    248        ;recv a char from modem (after rcvrdy)
  85. LOOKUP    EQU    247        ;table search: see CMDTBL comments for info
  86. PARSFN    EQU    246        ;parse filename from input stream
  87. BDPARS    EQU    245        ;parse baud-rate from input stream
  88. SBLANK    EQU    244        ;scan input stream to next non-blank
  89. EVALA    EQU    243        ;evaluate numeric from input stream
  90. LKAHED    EQU    242        ;get nxt char w/o removing from input
  91. GNC    EQU    241        ;get char from input, cy=1 if none
  92. ILP    EQU    240        ;inline print
  93. DECOUT    EQU    239        ;decimal output
  94. PRBAUD    EQU    238        ;print baud rate
  95. ;
  96. CONOUT    EQU    2        ;simulated BDOS function 2: console char out
  97. PRINT    EQU    9        ;simulated BDOS function 9: print string
  98. INBUF    EQU    10        ;input buffer, same structure as BDOS 10
  99. ;
  100. ;    msc constants
  101. ;
  102. TPA    EQU    100H
  103. CR    EQU    13
  104. LF    EQU    10
  105. TAB    EQU    9
  106. ;
  107. YES    EQU    0FFFFH        ;it is so
  108. NO    EQU    NOT YES     ;it is not so
  109. ;
  110. ;//////////////////////////////////////////////////////////////////////////////
  111. ;
  112. ;            The code starts here 
  113. ;
  114. ;//////////////////////////////////////////////////////////////////////////////
  115. ;
  116.     ORG    TPA        ;Shove the overlay here
  117. ;
  118.     DS    3        ;MEX has a JMP START here
  119.     DS    2        ;not used by MEX
  120. TPULSE:    DB    'T'        ;T=touch, P=pulse (Used by this overlay)
  121. CLOCK:    DB    60        ;clock speed x 10 (up to 25.5 mhz.)
  122. MSPEED:    DB    5        ;sets display time for sending a file
  123.                 ;0=110    1=300  2=450  3=600  4=710
  124.                 ;5=1200 6=2400 7=4800 8=9600 9=19200
  125. BYTDLY:    DB    5        ;default time to send character in
  126.                 ;terminal mode file transfer (0-9)
  127.                 ;0=0 delay, 1=10 ms, 5=50 ms, 9=90 ms
  128. CRDLY:    DB    5        ;end-of-line delay after CRLF in terminal
  129.                 ;mode file transfer for slow BBS systems
  130.                 ;0=0 delay, 1=100 ms, 5=500 ms, 9=900 ms
  131. COLUMS:    DB    5        ;number of directory columns
  132. SETFL:    DB    YES        ;yes=user-defined SET command
  133. SCRTST:    DB    YES        ;yes=if home cursor and clear screen
  134.                 ;routine at CLRSCRN
  135.     DB    0        ;was once ACKNAK, now spare
  136. BAKFLG:    DB    YES        ;yes=make .BAK file
  137. CRCDFL:    DB    YES        ;yes=default to CRC checking
  138.                 ;no=default to Checksum checking
  139. TOGCRC:    DB    YES        ;yes=allow toggling of Checksum to CRC
  140. CVTBS:    DB    NO        ;yes=convert backspace to rub
  141. TOGLBK:    DB    YES        ;yes=allow toggling of bksp to rub
  142. ADDLF:    DB    NO        ;no=no LF after CR to send file in
  143.                 ;terminal mode (added by remote echo)
  144. TOGLF:    DB    YES        ;yes=allow toggling of LF after CR
  145. TRNLOG:    DB    NO        ;yes=allow transmission of logon
  146.                 ;write logon sequence at location LOGON
  147. SAVCCP:    DB    YES        ;yes=do not overwrite CCP
  148. LOCNXT:    DB    NO        ;yes=local cmd if EXTCHR precedes
  149.                 ;no=not local cmd if EXTCHR precedes
  150. TOGLOC:    DB    YES        ;yes=allow toggling of LOCNXTCHR
  151. LSTTST:    DB    YES        ;yes=allow toggling of printer on/off
  152.                 ;in terminal mode. Set to no if using
  153.                 ;the printer port for the modem
  154. XOFTST:    DB    NO        ;yes=allow testing of XOFF from remote
  155.                 ;while sending a file in terminal mode
  156. XONWT:    DB    NO        ;yes=wait for XON after sending CR while
  157.                 ;transmitting a file in terminal mode    
  158. TOGXOF:    DB    YES        ;yes=allow toggling of XOFF testing
  159. IGNCTL:    DB    NO         ;yes=do not send control characters
  160.                 ;above CTL-M to CRT in terminal mode
  161.                 ;no=send any incoming CTL-char to CRT
  162. EXTRA1:    DB    0        ;for future expansion
  163. EXTRA2:    DB    0        ;for future expansion
  164. BRKCHR:    DB    '@'-40H        ;^@ = Send a 300 ms. break tone
  165. NOCONN:    DB    'N'-40H        ;^N = Disconnect from phone line
  166. LOGCHR:    DB    'L'-40H        ;^L = Send logon
  167. LSTCHR:    DB    'P'-40H        ;^P = Toggle printer
  168. UNSVCH:    DB    'R'-40H        ;^R = Close input text buffer
  169. TRNCHR:    DB    'T'-40H        ;^T = Transmit file to remote
  170. SAVCHR:    DB    'Y'-40H        ;^Y = Open input text buffer
  171. EXTCHR:    DB    '^'-40H        ;^^ = Send next character
  172. ;
  173.     DS    2        ;not used
  174. ;
  175. ; Low-level modem I/O routines.
  176. ;
  177. INCTL1:    JMP    INC        ;in modem control port
  178.     DB    0,0,0,0,0,0,0    ;spares if needed for non-PMMI
  179. ;
  180. OTDATA:    JMP    OUTD        ;out modem data port
  181.     DB    0,0,0,0,0,0,0    ;spares if needed for non=PMMI
  182. ;
  183. INPORT: JMP    IND        ;in modem data port
  184.     DB    0,0,0,0,0,0,0    ;spares if needed for non-PMMI
  185. ;
  186. ; Bit-test routines. 
  187. ;
  188. MASKR:    ANI MDRCVB ! RET    ;bit to test for receive ready
  189. TESTR:    CPI MDRCVR ! RET    ;value of receive bit when ready
  190. MASKS:    ANI MDSNDB ! RET    ;bit to test for send ready
  191. TESTS:    CPI MDSNDR ! RET    ;value of send bit when ready
  192. ;
  193.     DS    12
  194. ;
  195. LOGON:    DS    2        ;needed for MDM compat, not ref'd by MEX
  196. DIALV:    JMP    DIAL
  197. DISCV:    JMP    DISCON
  198. GOODBV:    JMP    GOODBYE        ;called before exit to CP/M
  199. INMODV:    JMP    NITMOD        ;initialization. Called at cold-start
  200. NEWBDV:    JMP    PBAUD        ;set baud rate
  201. NOPARV:    RET!NOP!NOP        ;set modem for no-parity
  202. PARITV:    RET!NOP!NOP        ;set modem parity
  203. SETUPV:    JMP    SETCMD        ;SET cmd: jump to a RET if you don't write SET
  204. SPMENV:    RET!NOP!NOP        ;not used with MEX
  205. VERSNV:    JMP    SYSVER        ;Overlay's voice in the sign-on message
  206. BREAKV:    JMP    SBREAK        ;send a break
  207. ;
  208. ; MDM calls supported in MEX 1.0 but not recommended for use.
  209. ;
  210. ILPRTV:    DS    3        ;replace with MEX function 9
  211. INBUFV:    DS    3        ;replace with MEX function 10
  212. ILCMPV:    DS    3        ;replace with table lookup funct. 247
  213. INMDMV:    DS    3        ;replace with MEX function 255
  214. NXSCRV:    DS    3        ;not supported by MEX (returns w/no action)
  215. TIMERV:    DS    3        ;replace with MEX function 254
  216. ;
  217. CLREOS:    
  218. ;    LXI    D,EOSMSG
  219. ;    MVI    C,PRINT
  220. ;    CALL    MEX
  221.     RET
  222. ;
  223. CLS:    
  224. ;    LXI    D,CLSMSG
  225. ;    MVI    C,PRINT
  226. ;    CALL    MEX
  227.     RET
  228. ;------------------------------------------------------------
  229. ;
  230. ; end of fixed area
  231. ;
  232. ;------------------------------------------------------------
  233. ;
  234. ; input control/status port
  235. ;
  236. INC:    MVI    A,10H
  237.     OUT    CTRLPT
  238.     IN    CTRLPT
  239.     RET
  240. ;
  241. ; input data port
  242. ;
  243. IND    IN    DATAPT
  244.     RET
  245. ;
  246. ; output data port
  247. ;
  248. OUTD:    OUT    DATAPT
  249.     RET
  250. ;
  251. ; Print out the overlay version
  252. ;
  253. SYSVER:      CALL    MILP
  254.       DB    'Advanced Digital Overlay - Version '
  255.       DB    REV/10+'0'
  256.       DB    '.'
  257.       DB    REV MOD 10+'0'
  258.       DB    CR,LF
  259.       DB    0
  260.       RET
  261. ;
  262. ; Break, disconnect and goodbye routines
  263. ;
  264. SBREAK:   MVI    A,5
  265.       OUT    CTRLPT
  266.       LDA    WR5
  267.       ORI    00010000B    ;ENABLE BREAK
  268.       OUT    CTRLPT
  269.       MVI    B,3        ;DELAY 300 MS.
  270.       CALL    MTIME
  271.       MVI    A,5
  272.       OUT    CTRLPT
  273.       LDA    WR5
  274.       ANI    11101111B    ;TURN OFF BREAK
  275.       OUT    CTRLPT
  276.       RET
  277. ;
  278. ; Disconnect Routine
  279. ;
  280. DISCON:   MVI    A,5
  281.       OUT    CTRLPT        ;SEND TO THE STATUS PORT
  282.       MVI    A,68H        ;TURN OFF DTR
  283.       OUT   CTRLPT
  284. ;
  285. ; GOODBYE routines are called by MEX prior to exit to CP/M
  286. ;
  287. GOODBYE:  MVI    B,3        ;DELAY 300 MS.
  288.       CALL  MTIME
  289.       MVI    A,5
  290.       OUT    CTRLPT        ;SEND TO THE STATUS PORT
  291.       LDA    WR5
  292.       ORI    10000000B    ;RAISE DTR
  293.       OUT    CTRLPT
  294.       RET
  295. ;
  296. ; Initialize RS-232 port, PIO port and default modes.
  297. ;
  298. NITMOD: CALL    INC        ;SEE IF CARRIER ie RETURNING TO MEX WITH
  299.     ANI    MDMDCD        ;   A CALL ACTIVE 
  300.     RNZ            ;SKIP IF CONNECTED
  301.  
  302.     LDA    DFBAUD        ;GET THE DEFAULT BAUD RATE
  303.     STA       MSPDSV        ;SEED THE MSPEED VALUE
  304.     STA    MSPEED        ;AND KEEP IT CURRENT
  305.     CALL    PBAUD        ;SET THE BAUD RATE
  306.  
  307.     LDA    WR5        ;DEFAULT DTR AND CTS
  308.     STA    REG5
  309.      CALL      NITSIO        ;INITIALIZE THE DART
  310.     LDA    MONFLG        ;GET MONITOR DEFAULT
  311.     ORA    A
  312.     MVI    A,'0'        ;SPEAKER OFF
  313.     JZ    NITMOD4
  314.     MVI    A,'1'        ;SPEAKER ON
  315.  
  316. NITMOD4:  STA    SMINIT+3    ;PUT IT IN SMINIT STRING
  317.       LDA    ANSFLG        ;GET MODE DEFAULT
  318.       ORA    A
  319.       MVI    A,'0'        ;ORIGINATE
  320.       JZ    NITMOD5
  321.       MVI    A,'1'        ;ANSWER
  322.  
  323. NITMOD5:  STA    SMINIT+8    ;PUT IT IN SMINIT STRING
  324.       LXI    H,SMINIT
  325.  
  326. SINIT:      CALL    SMSEND        ;SEND THE INIT STRING
  327.  
  328. SMTLP1:      MVI    C,INMDM        ;WAIT FOR MODEM RESPONSE
  329.       CALL    MEX
  330.       JNC    SMTLP1        ;EAT EVERYTHING UNTIL SILENCE FOR
  331.       RET            ; 100 MSEC
  332. ;
  333. ;    Initialize the Zilog DART chip 
  334. ;
  335. NITSIO:      
  336. NITSIO2:  MVI    A,00H        ;Select reg. 0
  337.       CALL  OUTCTL1
  338.       LDA    REG0        ;Command byte
  339.       CALL  OUTCTL1
  340.       MVI    A,04H        ;Select reg. 4
  341.       CALL  OUTCTL1
  342.       LDA    REG4        ;Receive/transmit control byte
  343.       CALL  OUTCTL1
  344.       MVI    A,03H        ;Select reg. 3
  345.       CALL  OUTCTL1
  346.       LDA    REG3        ;Receiver logic byte
  347.       CALL  OUTCTL1
  348.       MVI    A,05H        ;Select reg. 5
  349.       CALL  OUTCTL1
  350.       LDA    REG5        ;Transmitter logic byte
  351.       CALL  OUTCTL1
  352. ;
  353. ;                       ;Save REG5 values for modem selected
  354. NITEND:      LDA  REG5
  355.              STA  WR5        ;Save external modem REG5
  356.       RET
  357. ;
  358. OUTCTL1:  OUT   CTRLPT
  359.       RET
  360. ;
  361. ;
  362. ; Set command processor
  363. ;
  364. SETCMD:      MVI    C,SBLANK    ;ANY ARGUMENTS?
  365.       CALL  MEX
  366.       JC    SETSHO        ;IF NOT, DISPLAY DEFAULT(S)
  367.       LXI    D,CMDTBL
  368.           MVI    C,LOOKUP
  369.       CALL  MEX        ;PARSE THE ARGUMENT
  370.       PUSH    H        ;SAVE ANY PARSED ARGUMENTS ON STACK
  371.       RNC            ;IF WE HAVE ONE, RETURN TO IT
  372.       POP    H        ;OOPS, INPUT NOT FOUND IN TABLE
  373. SETERR:      LXI    D,SETEMS
  374.       MVI    C,PRINT
  375.       CALL    MEX
  376.       CALL  CRLF
  377.       RET
  378. SETEMS:      DB    CR,LF,'SET command error',CR,LF,'$'
  379. ;
  380. SETBAD:      LXI    D,SETBMS
  381.       MVI    C,PRINT
  382.       CALL    MEX
  383.       RET
  384. SETBMS:      DB    CR,LF,'SET command not valid for modem',CR,LF,'$'
  385. ;
  386. ; Argument table
  387. ;
  388. CMDTBL:   DB    '?'+80H            ; HELP
  389.       DW    SETHELP
  390.       DB    'ORI','G'+80H        ; ORIGINATE MODE
  391.       DW    ORIG
  392.       DB    'ANSWE','R'+80H        ; ANSWER MODE
  393.       DW    ANS
  394.       DB    'TON','E'+80H        ; TONE DIALING
  395.       DW    STTONE
  396.       DB    'PULS','E'+80H        ; PULSE DIALING
  397.       DW    STPULSE
  398.       DB    'MONITO','R'+80H    ; MONITOR ON
  399.       DW    MONIT
  400.       DB    'QUIE','T'+80H        ; MONITOR OFF
  401.       DW    QUIET
  402.       DB    'BAU','D'+80H        ; SET BAUD
  403.       DW    STBAUD
  404.       DB    'DELA','Y'+80H        ; SET DELAY
  405.       DW    DELAY
  406.       DB    'PARIT','Y'+80H        ; SET PARITY
  407.       DW    STPRTY
  408.       DB    'STOPBIT','S'+80H    ; SET STOPBITS
  409.       DW    STSTOP
  410.       DB    'LENGT','H'+80H        ; SET LENGTH
  411.       DW    STBITS
  412.       DB    'DIGI','T'+80H        ; SET INTER-DIGIT DELAY
  413.       DW    SDIGIT
  414.       DB    0            ;TABLE TERMINATOR
  415. ;
  416. ;
  417. ;  "SET (no args): PRINT CURRENT STATISTICS
  418. ;
  419. SETSHO:      CALL  MILP
  420.       DB    CR,LF
  421.       DB    'Current settings:',CR,LF,0
  422.       CALL    CRLF
  423.       CALL    TPSHOW
  424.       CALL    CRLF
  425.       CALL    BDSHOW
  426.       CALL  CRLF
  427.       CALL    MONSHO
  428.       CALL    CRLF
  429.       CALL  SHPRTY
  430.       CALL    CRLF
  431.       CALL    SHSTOP
  432.       CALL    CRLF
  433.       CALL  SHBITS
  434.       CALL  CRLF
  435.       CALL    DLSHOW
  436.       CALL    CRLF
  437.       CALL    DDSHOW
  438.       CALL  CRLF
  439.       CALL  CRLF
  440.       RET
  441. ;
  442. ; "SET ?" processor
  443. ;
  444. SETHELP:  CALL    MILP
  445.       DB    CR,LF,'SET ORIG      - Modem Originate mode'
  446.       DB    CR,LF,'SET ANSWER    - Modem Answer mode'
  447.       DB    CR,LF,'SET TONE      - Touch Tone dial'
  448.       DB    CR,LF,'SET PULSE     - Dial Pulse dial'
  449.       DB    CR,LF,'SET PARITY    - Off, Even or Odd'
  450.       DB    CR,LF,'SET STOPBITS  - 1, 1.5 or 2'
  451.       DB    CR,LF,'SET LENGTH    - 5, 6, 7 or 8'
  452.       DB    CR,LF,'SET QUIET     - Speaker Off'
  453.       DB    CR,LF,'SET MONITOR   - Speaker On'
  454.       DB    CR,LF,'SET BAUD <X>  - <X> = 110, 300, 600, 1200, 2400, '
  455.       DB    '4800, 9600, 19200'
  456.       DB    CR,LF,'SET DELAY <X> - <X> seconds'
  457.       DB    CR,LF,'SET DIGIT <X> - <X> 0-99 mS'    
  458.       DB    CR,LF,CR,LF,0
  459.       RET
  460. ;
  461. ; "SET BAUD" processor
  462. ;
  463. STBAUD:          MVI    C,BDPARS    ;FUNCTION CODE: PARSE A BAUDRATE
  464.           CALL    MEX        ;LET MEX LOOK UP CODE
  465.           JC    SETERR        ;JUMP IF INVALID CODE
  466.           CALL    PBAUD        ;NO, TRY TO SET IT
  467.           JC    SETERR        ;IF NOT ONE OF OURS, BOMB OUT
  468.  
  469. BDSHOW:          LDA    MSPEED        ;GET CURRENT BAUD RATE
  470.           MVI    C,PRBAUD    ;LET MEX PRINT IT
  471.           CALL    MEX
  472.           RET 
  473. ;
  474. ; This routine sets baud rate passed as MSPEED code in A.
  475. ; Returns CY=1 if baud rate not supported.
  476. ;
  477. PBAUD:          PUSH    H        ;DON'T ALTER ANYBODY
  478.           PUSH    D
  479.           PUSH     B
  480.  
  481.         MOV    E,A        ;MSPEED CODE TO DE
  482.         MVI    D,0
  483.           LXI    H,BAUDTB    ;OFFSET INTO TABLE
  484.           DAD    D
  485.           MOV    A,M        ;FETCH CODE
  486.           ORA    A        ;0 MEANS UNSUPPORTED CODE
  487.           STC            ;PREP CARRY IN CASE UNSUPPORTED
  488.           JZ    PBEXIT        ;EXIT IF BAD
  489.           MOV    B,A        ;SAVE THE NEW BAUD FOR A SEC
  490.         MOV    A,E        ;GET THE NEW MSPEED BACK
  491.           STA    DFBAUD        ;SAVE AS DEFAULT IN CASE OF CLONE
  492.           IN    BDJMPS        ;GET THE CURRENT CONSOLE BAUD 
  493.           ANI    00001111b    ;ISOLATE IT
  494.           ORA    B        ;AND MAKE A COMPOSITE WITH MODEM BAUD
  495.           OUT    BAUDRP        ;SET IT
  496.           MOV    A,E        ;GET MSPEED CODE BACK
  497.           STA    MSPEED        ;SET IT
  498.  
  499. PBEXIT:          POP    B
  500.           POP    D
  501.           POP    H
  502.           RET
  503. ;
  504. BAUDTB:          DB    020H        ;110
  505.           DB    050H        ;300
  506.           DB    00h        ;450 (not supported)
  507.           DB    060H        ;600
  508.           DB    00h        ;710 (not supported)
  509.           DB    070H        ;1200
  510.           DB    0A0H        ;2400
  511.           DB    0C0H        ;4800
  512.           DB    0E0H        ;9600
  513.           DB    0F0H        ;19200 
  514. ;
  515. ; SET MODE PROCESSOR ---- SET MODEM PARAMETERS
  516. ;
  517. ORIG:          XRA    A
  518.           STA    ANSFLG        ;SET ORIG FLAG
  519.           LXI    H,SMO        ;SEND OUT ATS0=0
  520.           CALL    SINIT
  521.         CALL    MILP
  522.         DB    'Originate mode',0
  523.         RET
  524.  
  525. ;
  526. SMO:    DB    'ATS0=0',CR,0
  527. SMA:    DB    'ATS0=1',CR,0
  528. ;
  529. ANS:    MVI    A,0FFH
  530.     STA    ANSFLG        ;SET ANS FLAG
  531.     LXI    H,SMA        ;SEND OUT ATS0=1
  532.     CALL    SINIT
  533.     CALL    MILP
  534.     DB    'Answer mode',0
  535.     RET
  536. ;
  537. ;
  538. ; Monitor control processor
  539. ;
  540. QUIET:      XRA    A
  541.       STA    MONFLG
  542.       LXI    H,SMQT
  543.       CALL    SINIT
  544.       JMP    MONSHO
  545.  
  546. MONIT:      MVI    A,0FFH
  547.       STA    MONFLG
  548.       LXI    H,SMMON
  549.       CALL    SINIT
  550.  
  551. MONSHO:      LDA    MONFLG
  552.       ORA    A
  553.       JZ    MONOFF
  554.       CALL    MILP
  555.       DB    'Speaker On',0
  556.       RET
  557. MONOFF:      CALL    MILP
  558.       DB    'Speaker Off',0
  559.       RET
  560. SMQT:      DB    'ATM0',CR,0
  561. SMMON:      DB    'ATM1',CR,0
  562. ;
  563. ; Set dial processor
  564. ;
  565. STTONE:      MVI    B,'T'
  566.       JMP    SDIAL1
  567. STPULSE:  MVI    B,'P'
  568. SDIAL1:   LDA    TPULSE
  569.       CPI    B
  570.       JZ    TPSHOW
  571.       MOV    A,B
  572.       STA    TPULSE
  573.       CPI    'P'
  574.       MVI    A,01010000B    ;PULSE DIAL
  575.       JZ    SDIAL2
  576.       MVI    A,01000000B    ;TONE DIAL
  577. SDIAL2:   STA    DIALWD
  578. TPSHOW:      LDA    DIALWD
  579.       ANI    00010000B
  580.       JZ    TPTONE
  581.       CALL    MILP
  582.       DB    'Pulse Dial',0
  583.       RET
  584. TPTONE:      CALL    MILP
  585.       DB    'Tone Dial',0      
  586.       RET
  587. ;
  588. ; Set delay processor
  589. ;
  590. DELAY:      MVI    C,EVALA
  591.       CALL    MEX
  592.       MOV    A,H
  593.       ORA    A
  594.       JNZ    SETERR
  595.       MOV    A,L
  596.       STA    NDELAY
  597.  
  598. DLSHOW:      CALL    MILP
  599.       DB    'Answer delay is ',0
  600.       LDA    NDELAY
  601.       MOV    L,A
  602.       MVI    H,0
  603.       MVI    C,DECOUT
  604.       CALL    MEX
  605.       CALL    MILP
  606.       DB    ' seconds',0
  607.       RET
  608. ;
  609. ; Set interdigit time 
  610. ;
  611. SDIGIT:      MVI    C,EVALA
  612.       CALL    MEX
  613.       MOV    A,H
  614.       ORA    A
  615.       JNZ    SETERR
  616.       MOV    A,L
  617.       CPI    100        ;TOO BIG ?
  618.       JNC    SETERR
  619. ;
  620.       MVI    B,0        ;MAKE ASCII OUT OF 7 BIT BINARY 
  621. TENS:      SUI    10
  622.       JC    ONES        ;GONE NEGATIVE YET ?
  623.       INR    B
  624.       JMP    TENS        ;NOPE... KEEP BUMPING THE 10'S DIGIT
  625. ;
  626. ONES:      ADI    10        ;FIX IT
  627.       PUSH    PSW        ;SAVE THE NUMBER FOR A SEC
  628.       MOV    A,B
  629.       ADI    '0'        ;ADD IN THE ASCII BIAS
  630.       STA    SMDDLY+4    ;SAVE THE 10'S DIGIT IN THE DEFAULT STRING
  631.       POP    PSW
  632.        ADI    '0'        ;ADD IN THE ASCII BIAS - MUST BE 0-9
  633.       STA   SMDDLY+5
  634. ;
  635.       LXI    H,SMDDLY    ;NOW TELL THE MODEM ABOUT IT
  636.       CALL  DONEW
  637.  
  638. DDSHOW:      CALL    MILP        ;FINALLY TELL THE USER ABOUT IT
  639.       DB    'Inter-digit time is ',0
  640. ;
  641.       LDA    SMDDLY+4    ;PRINT 10'S DIGIT
  642.       MOV    E,A    
  643.       MVI    C,CONOUT
  644.       CALL    MEX
  645. ;
  646.       LDA    SMDDLY+5    ;PRINT 1'S DIGIT
  647.       MOV    E,A    
  648.       MVI    C,CONOUT    
  649.       CALL    MEX
  650. ;
  651.       CALL    MILP        ;PRINT UNITS
  652.       DB    ' Ms.',0
  653.       RET
  654.  
  655. ;
  656. ;    SET PARITY command: reset transmit/receive parity
  657. ;
  658. ;        Parity is controlled by bits 0 and 1 of
  659. ;        the byte sent to the DART write-register
  660. ;        4 as follows:
  661. ;
  662. ;           Parity    Bit 1       Bit 0
  663. ;                 Off          -          0
  664. ;              Odd      0         1
  665. ;             Even      1         1
  666. ;
  667. STPRTY:      MVI    C,SBLANK    ;check for parity code
  668.       CALL    MEX        ;
  669.       JC    SETERR        ;if none, print error
  670.       LXI    D,PARTBL    ;check for proper syntax
  671.       MVI    C,LOOKUP
  672.       CALL    MEX
  673.       PUSH    H        ;match found, go do it!
  674.       RNC            ;
  675.       POP    H        ;no match: fix stack and
  676.       JMP    SETERR        ;  print error
  677. ;
  678. PROFF:      LDA    REG4        ;get register 4 byte
  679.       ANI    0FEH        ;reset bit 0
  680.       JMP    PARTB1        ;
  681. PREVEN:      LDA    REG4        ;
  682.       ORI    003H        ;set bits 0 & 1
  683.       JMP    PARTB1        ;
  684. PRODD:      LDA    REG4        ;
  685.       ORI    001H        ;set bit 0
  686.       ANI    0FDH        ;reset bit 1
  687. PARTB1:      STA    REG4        ;
  688.       CALL    NITSIO        ;re-initialize the USART
  689.       CALL    SHPRTY        ;print the result
  690.       RET             ;
  691. SHPRTY:      CALL    MILP        ;display parity
  692.       DB    'Parity:  ',TAB,' ',0
  693.       LDA    REG4        ;
  694.       ANI    001H        ;test bit 0
  695.       CPI    0        ;if bit0=0 then parity off
  696.       JNZ    SHPRT1        ;
  697.       CALL    MILP        ;
  698.       DB    'Off',0        ;
  699.       RET
  700. SHPRT1:      LDA    REG4        ;
  701.       ANI    002H        ;test bit 1
  702.       CPI    0        ;if bit1=0 then parity odd
  703.       JNZ    SHPRT2        ;
  704.       CALL    MILP        ;
  705.       DB    'Odd',0        ;
  706.       RET            ;
  707. SHPRT2:      CALL    MILP        ;
  708.       DB    'Even',0    ;
  709.       RET
  710. ;
  711. ;    SET PARITY command table
  712. ;
  713. PARTBL:      DB    'OF','F'+80H    ;"set parity off"
  714.       DW    PROFF
  715.       DB    'EVE','N'+80H    ;"set parity even"
  716.       DW    PREVEN
  717.       DB    'OD','D'+80H    ;"set parity odd"
  718.       DW    PRODD
  719.       DB    0        ;<<== end of parity table
  720. ;
  721. ;    SET STOPBITS command: reset number of stop bits
  722. ;
  723. ;        The number of stop bits is controlled by bits
  724. ;        2 and 3 of the byte sent to the DART write-
  725. ;        register 4, as follows:
  726. ;
  727. ;            Stop bits       Bit 3    Bit 2
  728. ;            1         0            1
  729. ;               1.5         1          0
  730. ;            2         1          1
  731. ;
  732. ;
  733. STSTOP:      MVI    C,SBLANK    ;check for stop bits
  734.       CALL    MEX        ;
  735.       JC    SETERR        ;if none, print error
  736.       LXI    D,STPTBL    ;check for proper syntax
  737.       MVI   C,LOOKUP
  738.       CALL    MEX        ;
  739.       PUSH    H        ;match found, go do it!
  740.       RNC            ;
  741.       POP    H        ;no match: fix stack and
  742.       JMP    SETERR        ;  print error
  743. ;
  744. STOP01:      LDA    REG4        ;get register 4 byte
  745.       ANI    0F7H        ;reset bit 3
  746.       ORI    004H        ;set bit 2
  747.       JMP    STSTP1        ;
  748. STOP02:      LDA    REG4        ;
  749.       ORI    00CH        ;set bits 2 and 3
  750.       JMP    STSTP1        ;
  751. STOP15:      LDA    REG4        ;
  752.       ORI    008H        ;set bit 3
  753.       ANI    0FBH        ;reset bit 2
  754. STSTP1:      STA    REG4        ;
  755.       CALL    NITSIO        ;
  756.       CALL    SHSTOP        ;print the result
  757.       RET
  758. SHSTOP:      CALL    MILP        ;display stop-bits
  759.       DB    'Stop bits:',TAB,' ',0
  760.       LDA    REG4        ;
  761.       ANI    004H        ;test bit 2
  762.       CPI    0        ;if bit2=0 then 1.5
  763.       JNZ    SHSTP1        ;
  764.       CALL    MILP        ;
  765.       DB    '1.5',0        ;
  766.       RET
  767. SHSTP1:      LDA    REG4        ;
  768.       ANI    008H        ;test bit 3
  769.       CPI    0        ;if bit3=0 then 1
  770.       JNZ    SHSTP2        ;
  771.       CALL    MILP        ;
  772.       DB    '1',0        ;
  773.       RET
  774. SHSTP2:      CALL    MILP        ;
  775.       DB    '2',0        ;
  776.       RET
  777. ;
  778. ;    SET STOPBITS command table
  779. ;
  780. STPTBL:      DB    '1'+80H        ;"set stop 1"
  781.       DW    STOP01
  782.       DB    '2'+80H        ;"set stop 2"
  783.       DW    STOP02
  784.       DB    '1.','5'+80H    ;"set stop 1.5"
  785.       DW    STOP15
  786.       DB    0        ;<<== End of stop-bits table
  787. ;
  788. ;    SET LENGTH command: set bits per character
  789. ;
  790. ;        The number of bits per character is controlled for
  791. ;        the receiver circuit by bits 6 and 7 of the byte
  792. ;        sent to the DART write-register 3 and for the trans-
  793. ;        mitter circuit by bits 5 and 6 of the byte sent to
  794. ;        the DART write-register 5.  The assumption has been
  795. ;        made here that both transmission and reception will
  796. ;        be carried on at the same number of bits per charac-
  797. ;        ter.  The bit configurations are shown for register
  798. ;        3 only, but are the same for register 5:
  799. ;
  800. ;            BPC        Bit 7        Bit 6
  801. ;             5          0          0
  802. ;             6          1             0
  803. ;             7          0          1
  804. ;             8          1          1
  805. ;
  806. STBITS:      MVI    C,SBLANK    ;check for bits/char
  807.       CALL    MEX        ;
  808.       JC    SETERR        ;if none, print error
  809.       LXI    D,BITTBL    ;check for proper syntax
  810.       MVI    C,LOOKUP
  811.       CALL    MEX
  812.       PUSH    H        ;match found, go do it!
  813.       RNC            ;
  814.       POP    H        ;no match: fix stack and
  815.       JMP    SETERR        ;  print error
  816. ;
  817. BIT5:      LDA    REG3        ;
  818.       ANI    0BFH        ;reset bit 6
  819.       ANI    07FH        ;reset bit 7
  820.       STA    REG3        ;
  821.       LDA    REG5        ;
  822.       ANI    0DFH        ;reset bit 5
  823.       ANI    0BFH        ;reset bit 6
  824.       JMP    STBTS1        ;
  825. BIT6:      LDA    REG3        ;
  826.       ANI    0BFH        ;reset bit 6
  827.       ORI    080H        ;set bit 7
  828.       STA    REG3        ;
  829.       LDA    REG5        ;
  830.       ANI    0DFH        ;reset bit 5
  831.       ORI    040H        ;set bit 6
  832.       JMP    STBTS1        ;
  833. BIT7:      LDA    REG3        ;
  834.       ORI    040H        ;set bit 6
  835.       ANI    07FH        ;reset bit 7
  836.       STA    REG3        ;
  837.       LDA    REG5        ;
  838.       ORI    020H        ;set bit 5
  839.       ANI    0BFH        ;reset bit 6
  840.       JMP    STBTS1        ;
  841. BIT8:      LDA    REG3        ;
  842.       ORI    040H        ;set bit 6
  843.       ORI    080H        ;set bit 7
  844.       STA    REG3        ;
  845.       LDA    REG5        ;
  846.       ORI    020H        ;set bit 5
  847.       ORI    040H        ;set bit 6
  848. STBTS1:      STA    REG5        ;
  849.       CALL    NITSIO        ;
  850.       CALL    SHBITS        ;print the result
  851.       RET
  852. SHBITS:      CALL    MILP        ;display bits/char
  853.       DB    'Bits/char:',TAB,' ',0
  854.       LDA    REG5        ;
  855.       ANI    040H        ;test bit 6
  856.       CPI    0        ;if bit6=0 then 6 bpc
  857.       JNZ    SHBTS2        ;
  858.       LDA    REG5        ;
  859.       ANI    020H        ;test bit 5
  860.       CPI    0        ;if bit5=0 then 5 bpc
  861.       JNZ    SHBTS1        ;
  862.       CALL    MILP        ;
  863.       DB    '5',0        ;
  864.       RET            ;
  865. SHBTS1:      CALL    MILP        ;
  866.       DB    '7',0        ;
  867.       RET            ;
  868. SHBTS2:      LDA    REG5        ;
  869.       ANI    020H        ;test bit 5
  870.       CPI    0        ;if bit5=0 then 6 bpc
  871.       JNZ    SHBTS3        ;
  872.       CALL    MILP        ;
  873.       DB    '6',0        ;
  874.       RET            ;
  875. SHBTS3:      CALL    MILP        ;
  876.       DB    '8',0        ;
  877.       RET
  878. ;
  879. ;    SET LENGTH command table
  880. ;
  881. BITTBL:      DB    '5'+80H        ;"set bits 5"
  882.       DW    BIT5
  883.       DB    '6'+80H        ;"set bits 6"
  884.       DW    BIT6
  885.       DB    '7'+80H        ;"set bits 7"
  886.       DW    BIT7
  887.       DB    '8'+80H        ;"set bits 8"
  888.       DW    BIT8
  889.       DB    0        ;<<== end of bpc table
  890. ;
  891. ;
  892. ; Dialing routine
  893. ;
  894. DIAL:      LHLD    DIALPT        ;FETCH POINTER
  895.       CPI    254        ;START DIAL?
  896.       JZ    STDIAL1        ;JUMP IF SO
  897.       CPI    255        ;END DIAL?
  898.       JZ    ENDIAL1        ;JUMP IF SO
  899. ;
  900. ; Not start or end sequence, must be a digit to be sent to the modem
  901. ;
  902.       MOV    M,A        ;PUT CHAR IN BUFFER
  903.       INX    H        ;ADVANCE POINTER
  904.       SHLD    DIALPT        ;STUFF PNTR
  905.       RET            ;ALL DONE
  906. ;
  907. ; Here on a start-dial sequence
  908. ;
  909. STDIAL1:  LXI    H,DIALBF    ;SET UP BUFFER POINTER
  910.       SHLD    DIALPT
  911.       RET
  912. ;
  913. ; Here on an end-dial sequence
  914. ;
  915. ENDIAL1:  MVI    M,CR        ;STUFF END-OF-LINE INTO BUFFER
  916.       INX    H        ;FOLLOWED BY TERMINATOR
  917.       MVI    M,0
  918.       LDA    TPULSE        ;GET OVERLAY'S TOUCH-TONE FLAG
  919.       STA    SMDIAL+3    ;PUT INTO STRING
  920.       LXI    H,SMDIAL    ;POINT TO DIALING STRING
  921.       CALL    SMSEND        ;SEND IT
  922. WAITSM:      MVI    C,INMDM
  923.       CALL    MEX        ;CATCH ANY OUTPUT FROM THE MODEM
  924.       JNC    WAITSM        ;LOOP UNTIL NO MORE CHARACTERS
  925. ;
  926. ; THE FOLLOWING LOOP WAITS FOR A RESULT FROM THE MODEM.
  927. ;
  928. RESULT:      LDA    NDELAY        ;GET DELAY COUNT
  929.       MOV    C,A
  930. SMWLP:      PUSH    B
  931.       MVI    B,1        ;CHECK FOR A CHAR, UP TO 1 SEC WAIT
  932.       MVI    C,TMDINP    ;DO TIMED INPUT
  933.       CALL    MEX
  934.       POP    B
  935.       JNC    SMTEST        ;JUMP IF MODEM HAD A CHAR
  936.       PUSH    B        ;NO, TEST FOR CONTROL-C FROM CONSOLE
  937.       MVI    C,CHEKCC
  938.       CALL    MEX
  939.       POP    B
  940.       JNZ    SMNEXT        ;IF NOT, JUMP
  941.       CALL    SMDMOFF        ;YES, SHUT DOWN THE MODEM
  942.       MVI    A,3        ;RETURN ABORT CODE
  943.       RET
  944. SMNEXT:      DCR    C        ;NO
  945.       JNZ    SMWLP        ;CONTINUE
  946. ;
  947. ; NO MODEM RESPONSE WITHIN THE TIME SPECIFIED IN SET DELAY COMMAND
  948. ;
  949. SMTIMO:      CALL    SMDMOFF
  950.       MVI    A,2        ;RETURN TIMEOUT CODE
  951.       RET
  952. ;
  953. ; MODEM GAVE US A RESULT, CHECK IT
  954. ;
  955. SMTEST:      ANI    7FH        ;IGNORE ANY PARITY
  956.       CALL    SMANAL        ;TEST THE RESULT
  957.       JC    RESULT        ;GO TRY AGAIN IF UNKNOWN RESPONSE
  958.       MOV    A,B        ;A=RESULT 
  959.       PUSH    PSW        ;SAVE IT
  960. SMTLP:      MVI    C,INMDM        ;EAT ANY ADDITIONAL CHARS FROM SMARTMODEM
  961.       CALL    MEX
  962.       JNC    SMTLP        ;UNTIL 100MS OF QUIET TIME
  963.       POP    PSW        ;RETURN THE CODE
  964.       RET
  965. ;
  966. ; Analyze character returned from Modem
  967. ;
  968. SMANAL:      MVI    B,0        ;PREP CONNECT CODE
  969.       CPI    'C'        ;"CONNECT"?
  970.       RZ
  971.       CPI    '1'        ;NUMERIC VERSION OF "CONNECT"
  972.       RZ
  973.       CPI    '5'        ;NUMERIC VERSION OF "CONNECT 1200"
  974.       RZ
  975.       INR    B        ;PREP BUSY CODE B=1
  976.       CPI    'B'
  977.       RZ
  978.       INR    B        ;PREP NO CONNECT MSG B=2
  979.       CPI    'N'        ;N=NO CONNECT
  980.       RZ
  981.       CPI    '3'        ;NUMERIC VERSION OF "NO CONNECT"
  982.       RZ
  983.       MVI    B,4        ;PREP MODEM ERROR
  984.       CPI    'E'        ;E=ERROR
  985.       RZ
  986.       CPI    '4'        ;NUMERIC VERSION OF "ERROR"
  987.       RZ
  988. ;
  989. ; UNKNOWN RESPONSE, RETURN CARRY TO CALLER. BUT FIRST,
  990. ; FLUSH THE UNKNOWN RESPONSE LINE FROM THE MODEM.
  991. ;
  992. WTLF:      CPI    LF        ;LINEFEED?
  993.       STC
  994.       RZ            ;END IF SO
  995.       MVI    C,INMDM        ;NO. GET NEXT CHAR
  996.       CALL    MEX
  997.       JNC    WTLF        ;UNLESS BUSY, LOOP
  998.       RET
  999. ;
  1000. ; Send string to the External Modem
  1001. ;
  1002. SMSEND:      MVI    C,SNDRDY    ;WAIT FOR MODEM READY
  1003.       CALL    MEX
  1004.       JNZ    SMSEND
  1005.       MOV    A,M        ;FETCH NEXT CHARACTER
  1006.       INX    H
  1007.       ORA    A        ;END?
  1008.       RZ            ;DONE IF SO
  1009.       MOV    B,A        ;NO, POSITION FOR SENDING
  1010.       MVI    C,SNDCHR    ;NOPE, SEND THE CHARACTER
  1011.       CALL    MEX
  1012.       JMP    SMSEND
  1013. ;
  1014. ; Shut down (disconnect) External Modem
  1015. ;
  1016. SMDMOFF:  MVI    B,CR
  1017.       MVI    C,SNDCHR
  1018.       CALL    MEX
  1019.       MVI    B,10        ;ONE SECOND WAIT FOR HAYES, ETC
  1020.       CALL    MTIME
  1021.       JMP    DISCON        ;MAKE SURE IT IS OFF
  1022. ;
  1023. ; General utility routines
  1024. ;
  1025. MILP:      MVI    C,ILP        ;IN-LINE PRINT
  1026.       JMP    MEX
  1027.       RET
  1028. ;
  1029. MTIME:      MVI    C,TIMER        ;MEX TIMER
  1030.       JMP    MEX
  1031.       RET
  1032. ;
  1033. CRLF:      CALL    MILP        ;PRINT CARRIAGE RETURN, LINE FEED
  1034.       DB    CR,LF,0
  1035.       RET
  1036.  
  1037. DONEW:      PUSH    H        ;SAVE THE NEW COMMAND STRING FRO A SEC 
  1038.       LXI    H,ATNSTR
  1039.       CALL    SMSEND        ;WAKE UP THE MODEM WITH 'AT'
  1040.       POP    H
  1041.       JMP    SINIT        ;NOW SEND THE NEW PARAMETER
  1042.  
  1043. ATNSTR:      DB    'AT',0
  1044. ;
  1045. ;==========================================================================
  1046. ;                            Data Area
  1047. ;==========================================================================
  1048. ;
  1049. ; Default UART parameters (Initalized for External RS-232)
  1050. ;
  1051. REG0:      DB    00011000B    ;RESET CHANNEL A
  1052. REG3:      DB    11000001B    ;ENABLE RECEIVE AT 8 BITS/CHAR
  1053. REG4:      DB    01000100B    ;NO PARITY, 1 STOP BIT, CLOCK X16
  1054. REG5:      DB    11101010B    ;ENABLE TRANSMIT AT 8 BITS/CHAR
  1055. WR5:       DB    11101010B    ;MDM CTRL REGISTER 5 (Initial value)
  1056. ;
  1057. ; Miscellaneous Default Data
  1058. ;
  1059. SMDIAL:      DB    'ATDT '        ;Smartmodem dial prefix
  1060. DIALBF:      DS    52        ;2* 24 CHAR MAX, + CR + NULL + SLOP
  1061. DIALPT:      DS    2        ;DIAL POSITION POINTER
  1062. DIALWD:      DB    01000000B    ;PULSE/TONE DIAL WORD
  1063. DIGIT      DB    0        ;SAVE DIALED DIGIT
  1064. MSPDSV:      DB    0        ;SAVE EXTERNAL MODEM MSPEED
  1065. DFBAUD:      DB    05        ;0=110,1=300,3=600,5=1200,6=2400
  1066.                 ;7=4800,8=9600,9=19200 
  1067. MONFLG:      DB    0FFH        ;0: MONITOR OFF - 0FFH: MONITOR ON
  1068. ANSFLG:      DB    0        ;0: ORIGINATE   - 0FFH: ANS
  1069. NDELAY:      DB    30        ;NO. SECONDS FOR ANSWER
  1070. ;
  1071. SMATN:    DB    '+++',0        ;Smartmodem online 'attention'
  1072. SMDISC:      DB    'ATH',CR,0    ;Smartmodem disconnect 
  1073. SMINIT:   DB    'ATM1 '
  1074.       DB    'S0=0 '
  1075.       DB    'S7=60 '
  1076.       DB    'X1'
  1077. SMDDLY:      DB    'S11=40 '
  1078.       DB    CR,0    ;MODEM INIT STRING
  1079.  
  1080. ;
  1081. EOSMSG:      DB    17H,'$'        ;CLEAR TO END-OF-SCREEN
  1082. CLSMSG:      DB    1AH,'$'        ;CLEAR WHOLE SCREEN
  1083. ;
  1084. ;******************************************************************************
  1085. ;
  1086.                   END
  1087. ;
  1088. ;******************************************************************************
  1089.