home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / mex / mxo-as10.azm / MXO-AS10.ASM
Assembly Source File  |  1986-12-21  |  21KB  |  624 lines

  1. ;    Title    'MEX overlay for the ALSPA Computer version 1.0'
  2. ;
  3. REV    EQU    10        ; Overlay revision level
  4. ;
  5. ; MEX ALSPA OVERLAY VERSION 1.0
  6. ; Modified from MXO-NS10.ASM  by Bill Duerr  12/28/84
  7. ;
  8. ; This is a MEX overlay file for the ALSPA Computer with the standard
  9. ; serial ports (Modem on the second serial port as default).
  10. ;
  11. ; ***NOTE***  If you are using the ALSPA second serial port, you MUST set
  12. ; the speed on the second serial port for 1200 bps, even if your modem is
  13. ; only 300 bps.  (See instructions for "baud-rate header" - page 7 of the
  14. ; ALSPA User's Guide.)
  15. ;
  16. ; Note that all overlays may freely use memory up to 0CFFH.  If your
  17. ; overlay must work with the MEX Smartmodem overlay (MXO-SMxx.ASM) or
  18. ; the MEX DATEC 212 overlay (MXO-DTxx.ASM), the physical modem overlay
  19. ; should terminate by 0AFFH.
  20. ;
  21. ; The SET command allows the user to change the baud rate, parity, pulse
  22. ; or tone dialing, and the port assignment.  The parity options are: No
  23. ; parity (NONE); Even parity (EVEN); Even parity with 8 data bits
  24. ; (EVEN8); Odd parity (ODD); and Odd parity with 8 data bits (ODD8).
  25. ; EVEN8 and ODD8 are for special purposes and will most likely never be
  26. ; used.  The port assignments may be "0" (printer), "2" (console), or
  27. ; "4" (modem).
  28. ;
  29. ; Misc equates.
  30. ;
  31. YES    EQU    0FFH
  32. NO    EQU    0
  33. NA    EQU    0FFH        ; Value for baud rate not available
  34. TPA    EQU    100H        ; Beginning of TPA
  35. CR    EQU    13        ; Carriage return
  36. LF    EQU    10        ; Line feed
  37. TAB    EQU    9        ; Tab
  38. BELL    EQU    07H        ; Bell
  39. ESC    EQU    1BH        ; Escape
  40. ;
  41. ; Change the following information to match your equipment
  42. ;
  43. PORT    EQU    4H        ; Modem data port (see also SET command)
  44. ;
  45. MODCTL    EQU    PORT+1        ; MODEM control port
  46. MODDAT    EQU    PORT        ; MODEM data port
  47. MDRCVB    EQU    2        ; Bit to test for receive
  48. MDRCVR    EQU    2        ; Value when ready
  49. MDSNDB    EQU    1        ; Bit to test for send
  50. MDSNDR    EQU    1        ; Value when ready
  51. EVEN    EQU    78H        ; Even parity, 7 data bits
  52. EVEN8    EQU    7CH        ; Even parity, 8 data bits
  53. ODD    EQU    58H        ; Odd parity, 7 data bits
  54. ODD8    EQU    5CH        ; Odd parity, 8 data bits
  55. NONE    EQU    4CH        ; No parity, 8 data bits
  56. ;
  57. ; Initial baud rate
  58. ;
  59. INITBD    EQU    5        ; Initial baud rate (1200) (MSPEED=5)
  60. ;
  61. ; EOS and CLS is set up for ADM-3 terminal
  62. ;
  63. EOS    EQU    17H        ; Clear to end of screen
  64. CLS    EQU    1AH        ; Clear screen
  65. ;
  66. ; Control bytes
  67. ;
  68. RESET1    EQU    0B7H        ; Initialize UART
  69. RESET2    EQU    77H        ; Internal reset
  70. CHIPSET    EQU    27H        ; DTR, RTS, RE, TE
  71. DISCNT    EQU    07H        ; No DTR, RTS, RE, TE
  72. ;
  73. BREAK    EQU    CHIPSET    OR 8H    ; BREAK character
  74. ;
  75. ; MEX service processor stuff ... MEX supports an overlay service
  76. ; processor, located at 0D00H (and maintained at this address from
  77. ; version to version).    If your overlay needs to call BDOS for any
  78. ; reason, it should call MEX instead; function calls below about
  79. ; 240 are simply passed on to the BDOS (console and list I/O calls
  80. ; are specially handled to allow modem port queuing, which is why
  81. ; you should call MEX instead of BDOS).  MEX uses function calls
  82. ; above about 244 for special overlay services (described below).
  83. ;
  84. ; Some sophisticated overlays may need to do file I/O; if so, use
  85. ; the PARSFN MEX call with a pointer to the FCB in DE to parse out
  86. ; the name.  This FCB should support a spare byte immediately
  87. ; preceeding the actual FCB (to contain user # information).  If
  88. ; you've used MEX-10 for input instead of BDOS-10 (or you're
  89. ; parsing part of a SET command line that's already been input),
  90. ; then MEX will take care of DU specs, and set up the FCB
  91. ; accordingly.    Thereafter all file I/O calls done through the MEX
  92. ; service processor will handle drive and user with no further
  93. ; effort necessary on the part of the programmer.
  94. ;
  95. MEX    EQU    0D00H        ; Address of the service processor
  96. INMDM    EQU    255        ; Get char from port to A, CY=no more in 100 ms
  97. TIMER    EQU    254        ; Delay 100ms * reg B
  98. TMDINP    EQU    253        ; B=# secs to wait for char, cy=no char
  99. CHEKCC    EQU    252        ; Check for ^C from KBD, Z=present
  100. SNDRDY    EQU    251        ; Test for modem-send ready
  101. RCVRDY    EQU    250        ; Test for modem-receive ready
  102. SNDCHR    EQU    249        ; Send a character to the modem (after sndrdy)
  103. RCVCHR    EQU    248        ; Recv a char from modem (after rcvrdy)
  104. LOOKUP    EQU    247        ; Table search: see CMDTBL comments for info
  105. PARSFN    EQU    246        ; Parse filename from input stream
  106. BDPARS    EQU    245        ; Parse baud-rate from input stream
  107. SBLANK    EQU    244        ; Scan input stream to next non-blank
  108. EVALA    EQU    243        ; Evaluate numeric from input stream
  109. LKAHED    EQU    242        ; Get next char w/o removing from input
  110. GNC    EQU    241        ; Get char from input, cy=1 if none
  111. ILP    EQU    240        ; Inline print
  112. DECOUT    EQU    239        ; Decimal output
  113. PRBAUD    EQU    238        ; Print baud rate
  114. ;
  115. CONOUT    EQU    2        ; Simulated BDOS function 2: console char out
  116. PRINT    EQU    9        ; Simulated BDOS function 9: print string
  117. INBUF    EQU    10        ; Input buffer, same structure as BDOS 10
  118. ;
  119.     ORG    TPA        ; We begin
  120. ;
  121.     DS    3        ; MEX has a JMP START here
  122. ;
  123. ; The following variables are located at the beginning of the program
  124. ; to facilitate modification without the need of re-assembly.  They will
  125. ; be moved in MEX 2.0.
  126. ;
  127. PMODEM:    DB    NO        ; Yes=PMMI modem \ / These 2 locations are not
  128. SMODEM:    DB    YES        ; Yes=Smartmodem / \ referenced by MEX
  129. TPULSE:    DB    'P'        ; T=touch, P=pulse (not referenced by MEX)
  130. CLOCK:    DB    40        ; Clock speed x .1, up to 25.5 mhz.
  131. MSPEED:    DB    INITBD        ; Sets initial baud rate
  132.                 ; 0=110  1=300    2=450  3=600  4=710
  133.                 ; 5=1200 6=2400 7=4800 8=9600 9=19200
  134. BYTDLY:    DB    5        ; Default time to send character in
  135.                 ; Terminal mode file transfer (0-9)
  136.                 ; 0=0 delay, 1=10 ms, 5=50 ms, 9=90 ms
  137. CRDLY:    DB    5        ; End-of-line delay after CRLF in terminal
  138.                 ; Mode file transfer for slow BBS systems
  139.                 ; 0=0 delay, 1=100 ms, 5=500 ms, 9=900 ms
  140. COLUMS:    DB    5        ; Number of directory columns
  141. SETFL:    DB    YES        ; Yes=user-defined SET command
  142. SCRTST:    DB    YES        ; Yes=if home cursor and clear screen
  143.                 ; Routine at CLRSCRN
  144.     DB    0        ; Was once ACKNAK, now spare
  145. BAKFLG:    DB    NO        ; Yes=make .BAK file
  146. CRCDFL:    DB    NO        ; Yes=default to CRC checking
  147.                 ; No=default to Checksum checking
  148. TOGCRC:    DB    YES        ; Yes=allow toggling of Checksum to CRC
  149. CVTBS:    DB    NO        ; Yes=convert backspace to rub
  150. TOGLBK:    DB    YES        ; Yes=allow toggling of bksp to rub
  151. ADDLF:    DB    NO        ; No=no LF after CR to send file in
  152.                 ; Terminal mode (added by remote echo)
  153. TOGLF:    DB    YES        ; Yes=allow toggling of LF after CR
  154. TRNLOG:    DB    NO        ; Yes=allow transmission of logon
  155.                 ; Write logon sequence at location LOGON
  156. SAVCCP:    DB    YES        ; Yes=do not overwrite CCP
  157. LOCNXT:    DB    NO        ; Yes=local cmd if EXTCHR precedes
  158.                 ; No=not local cmd if EXTCHR precedes
  159. TOGLOC:    DB    YES        ; Yes=allow toggling of LOCNXTCHR
  160. LSTTST:    DB    YES        ; Yes=allow toggling of printer on/off
  161.                 ; In terminal mode. Set to no if using
  162.                 ; The printer port for the modem
  163. XOFTST:    DB    NO        ; Yes=allow testing of XOFF from remote
  164.                 ; While sending a file in terminal mode
  165. XONWT:    DB    NO        ; Yes=wait for XON after sending CR while
  166.                 ; Transmitting a file in terminal mode
  167. TOGXOF:    DB    YES        ; Yes=allow toggling of XOFF testing
  168. IGNCTL:    DB    NO        ; Yes=do not send control characters
  169.                 ; Above CTL-M to CRT in terminal mode
  170.                 ; No=send any incoming CTL-char to CRT
  171. EXTRA1:    DB    0        ; For future expansion
  172. EXTRA2:    DB    0        ; For future expansion
  173. BRKCHR:    DB    '@'-40H        ; ^@ = Send a 300 ms. break tone
  174. NOCONN:    DB    'N'-40H        ; ^N = Disconnect from phone line
  175. LOGCHR:    DB    'L'-40H        ; ^L = Send logon
  176. LSTCHR:    DB    'P'-40H        ; ^P = Toggle printer
  177. UNSVCH:    DB    'R'-40H        ; ^R = Close input text buffer
  178. TRNCHR:    DB    'T'-40H        ; ^T = Transmit file to remote
  179. SAVCHR:    DB    'Y'-40H        ; ^Y = Open input text buffer
  180. EXTCHR:    DB    '^'-40H        ; ^^ = Send next character
  181. ;
  182. ; Equates used only by PMMI routines grouped together here.
  183. ;
  184.     DS    2        ; Not used
  185. ;
  186. ; Low-level modem I/O routines: this will be replaced with a jump table
  187. ; in MEX 2.0 (You can insert jumps here to longer routines if you'd
  188. ; like.  I'd recommend NOT putting part of a routine in this area, then
  189. ; jumping to the rest of the routine in the non-fixed area; that will
  190. ; complicate the 2.0 conversion.)
  191. ;
  192. ;                ; MODCTL is modified by set command
  193. INCTL:    IN    MODCTL        ; In modem control port
  194.     RET            ;
  195. ;                ; MODCTL is modified by set command
  196. OUTCTL:    OUT    MODCTL        ; Out modem control port
  197.     RET
  198.     DB    0,0,0,0        ; Spares if needed
  199. ;
  200. ;                ; MODDAT is modified by set command
  201. OTDATA:    OUT    MODDAT        ; Out modem data port
  202.     RET
  203.     DB    0,0,0,0,0,0,0    ; Spares if needed
  204. ;
  205. ;                ; MODDAT is modified by set command
  206. INDATA:    IN    MODDAT        ; In modem data port
  207.     RET
  208.     DB    0,0,0,0,0,0,0    ; Spares if needed
  209. ;
  210. ; Bit-test routines.  These will be merged with the above
  211. ; routines in MEX 2.0 to provide a more reasonable format
  212. ;
  213. MASKR:    ANI    MDRCVB ! RET    ; Bit to test for receive ready
  214. TESTR:    CPI    MDRCVR ! RET    ; Value of receive bit when ready
  215. MASKS:    ANI    MDSNDB ! RET    ; Bit to test for send ready
  216. TESTS:    CPI    MDSNDR ! RET    ; Value of send bit when ready
  217. ;
  218. ; Unused area: was once used for special PMMI functions, Now used
  219. ; only to retain compatibility with MDM overlays.  You may use this
  220. ; area for any miscellaneous storage you'd like but the length of
  221. ; the area *must* be 12 bytes.
  222. ;
  223.     DS    12
  224. ;
  225. ; Special modem function jump table: if your overlay cannot handle
  226. ; some of these, change the jump to "DS 3", so the code present in
  227. ; MEX will be retained.
  228. ;
  229. LOGON:    DS    2        ; Needed for MDM compat, not ref'd by MEX
  230. DIALV:    DS    3        ; Dial digit in A (see info at PDIAL)
  231. DISCV:    JMP    MDISC        ; Disconnect the modem
  232. GOODBV:    RET    ! NOP !    NOP    ; Called before exit to CP/M
  233. INMODV:    JMP    NITMOD        ; Initialization. Called at cold-start
  234. NEWBDV:    JMP    SBAUD        ; Set baud rate
  235. NOPARV:    DS    3        ; Set for no parity (called after transfer)
  236. PARITV:    DS    3        ; Set modem parity (called before transfer)
  237. SETUPV:    JMP    SETCMD        ; SET command
  238. SPMENV:    DS    3        ; Not used with MEX
  239. VERSNV:    JMP    SYSVER        ; Overlay's voice in the sign-on message
  240. BREAKV:    JMP    SBREAK        ; Send a break
  241. ;
  242. ; The following jump vector provides the overlay with access to special
  243. ; routines in the main program (retained and supported in the main pro-
  244. ; gram for MDM overlay compatibility). These should not be modified by
  245. ; the overlay.
  246. ;
  247. ; Note that for MEX 2.0 compatibility, you should not try to use these
  248. ; routines, since this table will go away with MEX 2.0 (use the MEX
  249. ; service call processor instead).
  250. ;
  251. ILPRTV:    DS    3        ; Replace with MEX function 9
  252. INBUFV:    DS    3        ; Replace with MEX function 10
  253. ILCMPV:    DS    3        ; Replace with table lookup funct. 247
  254. INMDMV:    DS    3        ; Replace with MEX function 255
  255. NXSCRV:    DS    3        ; Not supported by MEX (returns w/no action)
  256. TIMERV:    DS    3        ; Replace with MEX function 254
  257. ;
  258. ; Clear/screen and clear/end-of-screen. Each routine must use the full
  259. ; 9 bytes alloted (may be padded with nulls).
  260. ;
  261. ; These routines (and other screen routines that MEX 2.0 will support)
  262. ; will be accessed through a jump table in 2.0, and will be located in
  263. ; an area that won't tie the screen functions to the modem overlay
  264. ; (as the MDM format does).
  265. ;
  266.     LXI    D,EOSMSG
  267.     MVI    C,PRINT
  268.     CALL    MEX
  269.     RET
  270. ;
  271.     LXI    D,CLSMSG    ; Null unless patched
  272.     MVI    C,PRINT
  273.     CALL    MEX
  274.     RET
  275. ;
  276. ;    *** END OF FIXED FORMAT AREA ***
  277. ;
  278. ; Modem initialization.
  279. ;
  280. NITMOD:    MVI    A,RESET1    ; Initialize 8251 chip
  281.     CALL    OUTCTL
  282.     MVI    A,RESET1    ; Initialize 8251 chip again
  283.     CALL    OUTCTL
  284.     LDA    MSPEED        ; Fall thru to set initial baud rate
  285. ;
  286. ; Set Baud Rate.
  287. ;
  288. ; New baud-rate code in A.
  289. ; NOTE: this routine (ie, the one vectored through NEWBDV) should
  290. ; update MSPEED with the passed code, but ONLY if that rate is
  291. ; supported by the hardware.
  292. ;
  293. ;     A=0:    110 baud       A=1:   300 baud        A=2:   450 baud
  294. ;     A=3:    600 baud       A=4:   710 baud        A=5:  1200 baud
  295. ;     A=6:  2400 baud       A=7:  4800 baud        A=8:  9600 baud
  296. ;
  297. SBAUD:    PUSH    H        ; Don't alter anybody
  298.     PUSH    D
  299.     PUSH    B
  300.     MOV    C,A        ; Save baud rate code
  301.     MVI    B,0        ; Use BC as index to table
  302.     LXI    H,BTABL        ; Get baudrate value
  303.     DAD    B        ; Add the index value
  304.     MOV    A,M        ; Get the value from table
  305.     CPI    NA        ; See if baud rate valid
  306.     STC            ; Set for not valid
  307.     JZ    NOTVAL        ; Not valid
  308. ;
  309.     LXI    H,PARITY    ; Baud rate and parity are in save byte
  310.     ORA    M        ; Put in parity and data length
  311.     PUSH    PSW        ; First reset the UART
  312.     MVI    A,RESET2
  313.     CALL    OUTCTL
  314.     XTHL            ; Delay -- must be in pairs
  315.     XTHL
  316.     POP    PSW
  317.     CALL    OUTCTL
  318.     MOV    A,C
  319.     STA    MSPEED        ; Save new baud rate code
  320.     MVI    A,CHIPSET    ; Set chip for I/O
  321.     CALL    OUTCTL
  322.     XRA    A        ; Clear carry flag
  323. NOTVAL:    POP    B        ; Restore the registers and return
  324.     POP    D
  325.     POP    H
  326.     RET
  327. ;
  328. ; Send-break routine.
  329. ;
  330. SBREAK:    MVI    A,BREAK        ; Output the break code
  331.     CALL    OUTCTL        ; To the control port
  332.     MVI    B,2        ; Wait 200 ms
  333.     JMP    MDISC1        ; Go wait, and return
  334. ;
  335. ; Disconnect the modem (this routine is not used if MXO-SMxx is installed).
  336. ;
  337. MDISC:    MVI    A,DISCNT    ; Hang up
  338.     CALL    OUTCTL
  339.     MVI    B,20        ; Wait for modem to disconnect (2 sec)
  340. MDISC1:    MVI    C,TIMER
  341.     CALL    MEX        ; Use MEX timer routine
  342.     MVI    A,CHIPSET    ; Reset modem
  343.     JMP    OUTCTL        ; Out to control port and return
  344. ;
  345. ; SET command processor.
  346. ;
  347. ; Control is passed here after MEX parses a SET command.
  348. ;
  349. SETCMD:    MVI    C,SBLANK    ; Any arguments?
  350.     CALL    MEX
  351.     JC    SETSHO        ; If not, go print out values
  352.     LXI    D,CMDTBL    ; Parse command
  353.     CALL    TSRCH        ; From table
  354.     PUSH    H        ; Any address on stack
  355.     RNC            ; If we have one, execute it
  356.     POP    H        ; Nope, fix stack
  357. SETERR:    LXI    D,SETEMS    ; Print error message
  358.     JMP    MPRINT        ; Print message and return
  359. ;
  360. ; SET <no-args>: print current statistics.
  361. ;
  362. SETSHO:    CALL    BDSHOW        ; For active baud rate
  363.     CALL    PSHOW        ; For active parity
  364.     CALL    SSHOW        ; For number of stop bits
  365.     CALL    DSHOW        ; For type of dialing
  366.     CALL    PTSHOW        ; For active port
  367.     RET            ; Return
  368. ;
  369. ; SET ?  processor.
  370. ;
  371. STHELP:    LXI    D,HLPMSG    ; Print HELP message
  372.     JMP    MPRINT        ; Print message and return
  373. ;
  374. ; SET BAUD processor.
  375. ;
  376. STBAUD:    MVI    C,BDPARS    ; Function code
  377.     CALL    MEX        ; Let MEX look up code
  378.     JC    SETERR        ; Invalid code
  379.     CALL    SBAUD        ; No, try to set it
  380.     JC    SETERR        ; Not-supported code
  381. BDSHOW:    CALL    ILPRT        ; Display baud
  382.     DB    CR,LF,'Baud rate:  ',0
  383.     LDA    MSPEED
  384.     MVI    C,PRBAUD    ; Use MEX routine
  385.     JMP    MEX        ; And return
  386. ;
  387. ; SET STOP BIT processor.
  388. ;
  389. STSTOP:    LXI    D,STOPTBL    ; Lookup input item in table
  390.     CALL    TSRCH
  391.     JC    SETERR        ; If not found, error
  392.     LDA    PARITY        ; Get the parity byte
  393.     ANI    03FH        ; Wipe out old stop bit value
  394.     ORA    L        ; Get new stop bit value
  395.     STA    PARITY        ; Store it for NITMOD
  396.     LDA    MSPEED        ; Get current baud rate
  397.     CALL    SBAUD        ; Set parity and stop bits
  398. ;
  399. SSHOW:    LDA    PARITY        ; Get the parity and stop bits
  400.     LXI    D,SMSG1        ; Message for 1 stop bit
  401.     ANI    080H        ; Is it 1 or 2 bits
  402.     JZ    SSHOW1        ; 1 bit, go print
  403.     LXI    D,SMSG2        ; 2 bit message
  404. SSHOW1:    JMP    MPRINT        ; Print number of stop bits and return
  405. ;
  406. ; SET PARITY processor.
  407. ;
  408. STPAR:    LXI    D,PARTBL    ; Lookup next input item in table
  409.     CALL    TSRCH
  410.     JC    SETERR        ; If not found, error
  411.     LDA    PARITY        ; Get old parity/stop bits
  412.     ANI    0C0H        ; Wipe out parity
  413.     ORA    L        ; Get parity code
  414.     STA    PARITY        ; Store it for NITMOD
  415.     LDA    MSPEED        ; Get current baud rate
  416.     CALL    SBAUD        ; Set parity
  417. ;
  418. PSHOW:    CALL    ILPRT        ; Show parity
  419.     DB    CR,LF,'Parity:     ',0
  420.     LXI    H,PARFND    ; Find proper message
  421.     LDA    PARITY        ; Get parity value
  422.     ANI    07FH        ; Drop stop bits
  423.     MOV    B,A        ; Save it
  424. FNDP:    MOV    A,M        ; See if parity value matches
  425.     ORA    A        ; First see if zero
  426.     JZ    SETERR        ; Should never get here
  427.     CMP    B        ; Match?
  428.     INX    H        ; Point to first letter of message
  429.     JZ    CDISP        ; Matches, type message
  430. FNDNXT:    MOV    A,M
  431.     ORA    A        ; See if end of last message
  432.     INX    H
  433.     JP    FNDNXT        ; Not finished
  434.     INX    H        ; Increment past parity byte
  435.     JMP    FNDP
  436. ;
  437. ; Dialing Mode Processor.
  438. ;
  439. STTONE:    MVI    A,'T'        ; Indicate tone dialing
  440.     JMP    STDIAL        ; Go store it
  441. STPULSE:MVI    A,'P'        ; Indicate tone dialing
  442. STDIAL:    STA    TPULSE        ; Store in MEX parms
  443. ;
  444. DSHOW:    LDA    TPULSE        ; Get the Dialing code
  445.     LXI    D,PMSG        ; Pulse dialing message
  446.     CPI    'P'        ; Is it Pulse
  447.     JZ    DTONE        ; Yes, go print
  448.     LXI    D,TMSG        ; Tone dialing message
  449. DTONE:    JMP    MPRINT        ; Print dialing type and return
  450. ;
  451. ; Set PORT processor.
  452. ;
  453. STPORT:    LXI    D,PORTTBL    ; Lookup input item in table
  454.     CALL    TSRCH
  455.     JC    SETERR        ; If not found, error
  456.     MOV    A,L        ; Get new data port number
  457.     STA    OTDATA+1    ; Modify instruction
  458.     STA    INDATA+1    ; Modify instruction
  459.     INR    A        ; Control port is one greater than data port
  460.     STA    INCTL+1        ; Modify instruction
  461.     STA    OUTCTL+1    ; Modify instruction
  462.     MOV    A,H        ; ASCII port returned in H
  463.     STA    PORTA        ; Store in print message
  464.     CPI    '2'        ; Set up for console
  465.     JZ    PTSHOW        ; Do not initialize the console we are using
  466.     CALL    NITMOD        ; Initialize the net port
  467. PTSHOW:    LXI    D,PORTM        ; Get message to tell port number
  468.     JMP    MPRINT        ; Print port number and return
  469. ;
  470. GOHL:    PCHL
  471. ;
  472. ;  Print message ending with 80H bit set.
  473. ;
  474. CDISP:    MOV    A,M        ; Get character to print
  475.     INX    H        ; Point to next character
  476.     PUSH    PSW        ; Save 80H bit
  477.     ANI    7FH        ; Strip 80H bit just in case
  478.     MOV    E,A        ; Move to "E" for CONOUT
  479.     MVI    C,CONOUT    ; CONOUT routine
  480.     CALL    MEX
  481.     POP    PSW        ; Restore character
  482.     ORA    A        ; Check high order bit
  483.     JM    CRLF        ; Finished
  484.     JMP    CDISP        ; Loop till finished
  485. ;
  486. ; Compare next input-stream item in table @DE; CY=1
  487. ; if not found, else HL=matched data item
  488. ;
  489. TSRCH:    MVI    C,LOOKUP    ; Get function code
  490.     JMP    MEX        ; Pass to MEX processor
  491. ;
  492. ; Print in-line message ... blows away C register.
  493. ;
  494. CRLF:    CALL    ILPRT
  495.     DB    CR,LF,0
  496.     RET
  497. ;
  498. ILPRT:    MVI    C,ILP        ; Get function code
  499.     JMP    MEX        ; Go do it
  500. ;
  501. ; Sign-on message (MPRINT is used as print subroutine).
  502. ;
  503. SYSVER:    LXI    D,SOMESG    ; Sign on message to show version of overlay
  504. MPRINT:    MVI    C,PRINT        ; This label will be used as print subroutine
  505.     JMP    MEX        ; Let MEX print message and return
  506. ;
  507. ; SET command table ... note that tables are constructed of command-
  508. ; name (terminated by high bit=1) followed by word-data-value returned
  509. ; in HL by MEX service processor LOOKUP.  Table must be terminated by
  510. ; a binary zero.
  511. ;
  512. ; Note that LOOKUP attempts to find the next item in the input stream
  513. ; in the table passed to it in HL ... if found, the table data item is
  514. ; returned in HL; if not found, LOOKUP returns carry set.
  515. ;
  516. CMDTBL:    DB    '?'+80H        ; "set ?"
  517.     DW    STHELP
  518.     DB    'BAU','D'+80H    ; "set baud"
  519.     DW    STBAUD
  520.     DB    'PARIT','Y'+80H    ; "set parity"
  521.     DW    STPAR
  522.     DB    'STOPBI','T'+80H ; "set number of stop bits"
  523.     DW    STSTOP
  524.     DB    'TON','E'+80H    ; "set tone dialing"
  525.     DW    STTONE
  526.     DB    'PULS','E'+80H    ; "set pulse dialing"
  527.     DW    STPULSE
  528.     DB    'POR','T'+80H    ; "set port number"
  529.     DW    STPORT
  530. ;
  531.     DB    0        ; <<=== table terminator
  532. ;
  533. ; Baud rate table
  534. ;
  535. BTABL:    DB    NA        ; -    0     110
  536.     DB    3        ; X64    1     300
  537.     DB    NA        ; -    2     450
  538.     DB    NA        ; -    3     600
  539.     DB    NA        ; -    4     710
  540.     DB    2        ; X16    5    1200
  541.     DB    3        ; -    6    2400
  542.     DB    NA        ; -    7    4800
  543.     DB    2        ; -    8    9600
  544.     DB    0        ; X01    9      19200
  545. ;
  546. ; PARITY argument table
  547. ; Format of the table is:  Starting at PARTBL, the name is
  548. ; given (ending with 80H bit set), then the one byte code
  549. ; for setting that parity.  The next byte will duplicate the
  550. ; NEXT parity code (used in PSHOW).  The byte at PARFND
  551. ; will duplicate the first parity code.
  552. ;
  553. PARFND:    DB    EVEN
  554. PARTBL:    DB    'EVE','N'+80H    ; Even parity, 7 data bits
  555.     DB    EVEN,EVEN8
  556.     DB    'EVEN','8'+80H    ; Even parity, 8 data bits
  557.     DB    EVEN8,ODD
  558.     DB    'OD','D'+80H    ; Odd parity, 7 data bits
  559.     DB    ODD,ODD8
  560.     DB    'ODD','8'+80H    ; Odd parity, 8 data bits
  561.     DB    ODD8,NONE
  562.     DB    'NON','E'+80H    ; No parity, 8 data bits
  563.     DB    NONE,0
  564. ;
  565.     DB    0        ; <<== table terminator
  566. ;
  567. ; Stop bit messages
  568. ;
  569. SMSG1:    DB    '1 stop bit',CR,LF,'$'
  570. SMSG2:    DB    '2 stop bit',CR,LF,'$'
  571. ;
  572. ; Parity control byte location.
  573. ;
  574. PARITY:    DB    NONE        ; Default parity to "no parity"
  575. ;
  576. PORTM:    DB    'Using port '
  577. PORTA:    DB    '4',CR,LF,LF,'$'
  578. ;
  579. ; Table of valid port numbers.
  580. ;
  581. PORTTBL:DB    '0'+80H,0,'0'
  582.     DB    '2'+80H,2,'2'
  583.     DB    '4'+80H,4,'4'
  584.     DB    0
  585. ;
  586. ; Table of valid stop bit values.
  587. ;
  588. STOPTBL:DB    '1'+80H,040H,'1'
  589.     DB    '2'+80H,0C0H,'2'
  590.     DB    0
  591. ;
  592. ; Strings to clear-to-end-of-screen, and clear-screen.
  593. ;
  594. EOSMSG:    DB    EOS,'$'        ; Clear to end-of-screen
  595. CLSMSG:    DB    CLS,'$'        ; Clear whole screen
  596. ;
  597. SETEMS:    DB    CR,LF,'SET command error',CR,LF,'$'
  598. ;
  599. PMSG:    DB    'Pulse dialing',CR,LF,'$'
  600. TMSG:    DB    'Tone dialing',CR,LF,'$'
  601. ;
  602. ; The help message.
  603. ;
  604. HLPMSG:    DB    CR,LF,'SET command:',CR,LF
  605. ;
  606.     DB    CR,LF,'SET BAUD 300 <or> 1200'
  607.     DB    CR,LF,'SET PARITY EVEN[8] <or> ODD[8] <or> NONE'
  608.     DB    CR,LF,'SET STOPBIT 1 <or> 2'
  609.     DB    CR,LF,'SET TONE'
  610.     DB    CR,LF,'SET PULSE'
  611.     DB    CR,LF,'SET PORT 0 <or> 2 <or> 4'
  612.     DB    CR,LF        ; Will also print overlay version
  613. ;
  614. ; Sign on Message.
  615. ;
  616. SOMESG:    DB    'using ALSPA Overlay - Version '
  617.     DB    REV/10+'0'
  618.     DB    '.'
  619.     DB    REV MOD    10+'0',' - 12/28/84',CR,LF,LF,'$'
  620. ;
  621. ; End of ALSPA MEX modem overlay.
  622. ;
  623.     END
  624.