home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / MEX / MXO-AP50.ASM < prev    next >
Assembly Source File  |  2000-06-30  |  30KB  |  1,044 lines

  1. ;    TITLE  'MEX Overlay for Apple ][ / SSC / Smartmodem'
  2. ;
  3. ;  MXO-AP50.ASM created 02/06/85   by   Henry Middlebrook
  4. ;
  5. REV    EQU    50        ; 14 Feb 1985
  6. ;
  7. ; This overlay is specific for the following hardware:
  8. ;
  9. ;    Apple ][ +/e  with PCPI Applicard
  10. ;    Apple Super Serial Card
  11. ;    Hayes compatible intelligent modem
  12. ;
  13. ;            - Henry Middlebrook [70766,766]
  14. ;                February 14, 1985
  15. ;
  16. ; This overlay is written in three distinct parts as a "MIXED" type of
  17. ; overlay for MEX.  The parts follow the guidelines available in the
  18. ; MEX OVERLAY LIST #2 (01/06/85 -- Ron Fowler, NightOwl Software) with
  19. ; reference to the PORT, MODEM, and PATCH overlay types.  Thus, you
  20. ; should be able to remove or add any one of the three parts without
  21. ; severely affecting the overlay operation.  Naturally, removing the
  22. ; first section (PORT) will completely disable MEX; however, removing
  23. ; or changing the the MODEM (derived from MXO-SM13.ASM) section or
  24. ; the PATCH (MEXPAT11.ASM) will minimally affect operation (see LSTST
  25. ; and SSET).
  26. ;
  27. ; >>>>  NOTE:      Previous versions of MXO-APxx do NOT properly support
  28. ;        the PCPI Applicard.  You may not like this overlay;
  29. ;        however, you can use it as a reliable guide.
  30. ;
  31. ;                HM    02/04/85
  32. ;
  33. ; To use this overlay just set equates as you see fit, assemble with
  34. ; ASM.COM then using MLOAD21.COM and MEX112.COM create running MEX:
  35. ;
  36. ;    A>MLOAD21 MEX.COM=MEX112.COM,MXO-AP50
  37. ;
  38. ;----------------------------------------------------------------------
  39. ;
  40. ;            Overlay Update History
  41. ;
  42. ; 02/06/85 - Coded for Apple SSC I/O      -AP50 - Henry Middlebrook
  43. ; 01/28/85 - Created MXO original overlay -AP30    - Henry Middlebrook
  44. ;
  45. ;======================================================================
  46.  
  47. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  48. ;
  49. ;            PORT OVERLAY SECTION
  50. ;
  51. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  52. ;
  53. BELL        EQU    07H    ;bell
  54. CR        EQU    0DH    ;carriage return
  55. ESC        EQU    1BH    ;escape
  56. LF        EQU    0AH    ;linefeed
  57. TAB        EQU    09H    ;tab
  58. YES        EQU    0FFH
  59. NO        EQU    0
  60. ;
  61. ;----------------------------------------------------------------------
  62. ;
  63. ;    Apple Super Serial Card equates
  64. ;    -------------------------------
  65. ;
  66. SSCSLOT        EQU    2        ;Slot of Super Serial Card
  67. ;
  68. MODDATP        EQU    0C088H + (SSCSLOT*10H)    ;data port of ACIA
  69. MODSTAP        EQU    0C089H + (SSCSLOT*10H)    ;status port of ACIA
  70. MODCTLP        EQU    0C08BH + (SSCSLOT*10H)    ;control port of ACIA
  71. MODCMDP        EQU    0C08AH + (SSCSLOT*10H)    ;command port of ACIA
  72. ;
  73. ;
  74. RDBYTE        EQU    0FFE0H    ;Read a Byte from Apple (A = BYTE)
  75. WRBYTE        EQU    0FFE3H    ;Write a Byte to Apple (C = BYTE)
  76. RDWORD        EQU    0FFE6H    ;Read 2 Bytes from Apple (DE = BYTES)
  77. WRWORD        EQU    0FFE9H    ;Write 2 Bytes to Apple (DE = BYTES)
  78. RDNBYTS        EQU    0FFECH    ;Read N Bytes (DE = COUNT, HL = BUFFER)
  79. WRNBYTS        EQU    0FFEFH    ;Write N Bytes (DE = COUNT, HL = BUFFER)
  80. ;
  81. PEEK1BYTE    EQU    6    ;Command to Peek 1 Byte in the Apple
  82. POKE1BYTE    EQU    7    ;Command to Poke 1 Byte to the Apple
  83. ;
  84. ; Status bit equates for CPS serial port
  85. ;
  86. MDSNDB        EQU    10H
  87. MDSNDR        EQU    10H
  88. MDRCVB        EQU    08H
  89. MDRCVR        EQU    08H
  90. ;
  91. ; Equates for PSW (Parity, Stop Bit, Word Length) used by SSC ACIA
  92. ;  In these bytes the high nibble is the Word Length mask, the low
  93. ;  nibble is the Parity mask for the ACIA PSWFIX routine.
  94. ;
  95. P8N1        EQU    010H    ;8 NONE 1
  96. P7E1        EQU    036H    ;7 EVEN 1
  97. P7O1        EQU    032H    ;7 ODD 1
  98. P7N1        EQU    030H    ;7 NONE 1
  99. ;
  100. BRKMSK        EQU    0CH    ;mask byte for BREAK function
  101. DISCB        EQU    0AH    ;command byte for ACIA to drop DTR
  102. ;
  103. ;----------------------------------------------------------------------
  104. ;
  105. ;    MEX Service Processor Calls
  106. ;
  107. MEX    EQU    0D00H    ;address of the service processor
  108. INMDM    EQU    255    ;get char from port to A, CY=no more in 100 ms
  109. TIMER    EQU    254    ;delay 100ms * reg B
  110. TMDINP    EQU    253    ;B=# secs to wait for char, cy=no char
  111. CHEKCC    EQU    252    ;check for ^C from KBD, Z=present
  112. SNDRDY    EQU    251    ;test for modem-send ready
  113. RCVRDY    EQU    250    ;test for modem-receive ready
  114. SNDCHR    EQU    249    ;send a character to the modem (after sndrdy)
  115. RCVCHR    EQU    248    ;recv a char from modem (after rcvrdy)
  116. LOOKUP    EQU    247    ;table search: see CMDTBL comments for info
  117. PARSFN    EQU    246    ;parse filename from input stream
  118. BDPARS    EQU    245    ;parse baud-rate from input stream
  119. SBLANK    EQU    244    ;scan input stream to next non-blank
  120. EVALA    EQU    243    ;evaluate numeric from input stream
  121. LKAHED    EQU    242    ;get nxt char w/o removing from input
  122. GNC    EQU    241    ;get char from input, cy=1 if none
  123. ILP    EQU    240    ;inline print
  124. DECOUT    EQU    239    ;decimal output
  125. PRBAUD    EQU    238    ;print baud rate
  126. PRNTBL    EQU    237    ;print command table in columns (HL=addr)
  127. PRID    EQU    236    ;print MEX ID string on console
  128. ;
  129. CONOUT    EQU    2    ;simulated BDOS function 2: console char out
  130. PRINT    EQU    9    ;simulated BDOS function 9: print string
  131. INBUF    EQU    10    ;input buffer, same structure as BDOS 10
  132. ;
  133. ;
  134. ;======================================================================
  135. ;
  136.     ORG    100H    ;we begin
  137. ;
  138.     DS    3    ;MEX has a JMP START here            100H
  139. ;
  140. ; The following variables are located at the beginning of the program
  141. ; to facilitate modification without the need of re-assembly. They will
  142. ; be moved in MEX 2.0.
  143. ;
  144. PMODEM:    DB    YES    ;\ / These two locations are            103H
  145. SMODEM:    DB    NO    ;/ \ not referenced by MEX.            104H
  146. TPULSE:    DB    'T'    ;Tone/Pulse (used only in Smodem overlay)    105H
  147. CLOCK:    DB    60    ;clock speed x .1, up to 25.5 mhz.        106H
  148. MSPEED:    DB    1    ;sets display time for sending a file        107H
  149.             ;0=110    1=300  2=450  3=600  4=710
  150.             ;5=1200 6=2400 7=4800 8=9600 9=19200
  151. BYTDLY:    DB    1    ;default time to send character in        108H
  152.             ;terminal mode file transfer (0-9)
  153.             ;0=0 delay, 1=10 ms, 5=50 ms, 9=90 ms
  154. CRDLY:    DB    1    ;end-of-line delay in terminal            109H
  155.             ;mode file transfer for slow BBS systems
  156.             ;0=0 delay, 1=100 ms, 5=500 ms, 9=900 ms
  157. COLUMS:    DB    5    ;number of directory columns            10AH
  158. SETFL:    DB    YES    ;yes=user-defined SET command            10BH
  159. SCRTST:    DB    YES    ;yes=if home cursor and clear screen        10CH
  160.             ;routine at CLRSCRN
  161.     DB    0    ;was once ACKNAK, now spare            10DH
  162. BAKFLG:    DB    NO    ;yes=make .BAK file                10EH
  163. CRCDFL:    DB    YES    ;yes=default to CRC checking            10FH
  164.             ;no=default to Checksum checking
  165. TOGCRC:    DB    YES    ;yes=allow toggling of Checksum to CRC        110H
  166. CVTBS:    DB    NO    ;yes=convert backspace to rub            111H
  167. TOGLBK:    DB    YES    ;yes=allow toggling of bksp to rub        112H
  168. ADDLF:    DB    NO    ;no=no LF after CR to send file in        113H
  169.             ;terminal mode (added by remote echo)
  170. TOGLF:    DB    YES    ;yes=allow toggling of LF after CR        114H
  171. TRNLOG:    DB    NO    ;yes=allow transmission of logon        115H
  172.             ;write logon sequence at location LOGON
  173. SAVCCP:    DB    YES    ;yes=do not overwrite CCP            116H
  174. LOCNXT:    DB    NO    ;yes=local cmd if EXTCHR precedes        117H
  175.             ;no=not local cmd if EXTCHR precedes
  176. TOGLOC:    DB    YES    ;yes=allow toggling of LOCNXTCHR        118H
  177. LSTTST:    DB    YES    ;yes=allow toggling of printer on/off        119H
  178.             ;in terminal mode. Set to no if using
  179.             ;the printer port for the modem
  180. XOFTST:    DB    YES    ;yes=allow testing of XOFF from remote        11AH
  181.             ;while sending a file in terminal mode
  182. XONWT:    DB    NO    ;yes=wait for XON after sending CR while    11BH
  183.             ;transmitting a file in terminal mode    
  184. TOGXOF:    DB    YES    ;yes=allow toggling of XOFF testing        11CH
  185. IGNCTL:    DB    NO    ;yes=do not send control characters        11DH
  186.             ;above CTL-M to CRT in terminal mode
  187.             ;no=send any incoming CTL-char to CRT
  188. EXTRA1:    DB    0    ;for future expansion                11EH
  189. EXTRA2:    DB    0    ;for future expansion                11FH
  190. BRKCHR:    DB    '@'-40H    ;^@ = Send a 300 ms. break tone            120H
  191. NOCONN:    DB    'N'-40H    ;^N = Disconnect from phone line        121H
  192. LOGCHR:    DB    'L'-40H    ;^L = Send logon                122H
  193. LSTCHR:    DB    'P'-40H    ;^P = Toggle printer                123H
  194. UNSVCH:    DB    'R'-40H    ;^R = Close input text buffer            124H
  195. TRNCHR:    DB    'T'-40H    ;^T = Transmit file to remote            125H
  196. SAVCHR:    DB    'Y'-40H    ;^Y = Open input text buffer            126H
  197. EXTCHR:    DB    '^'-40H    ;^^ = Send next character            127H
  198. ;
  199. ; Equates used only by PMMI routines grouped together here.
  200. ;
  201. PRATE:    DB    125    ;125=20pps dialing, 250=10pps            128H
  202.     DB    0    ;not used                    129H
  203. ;
  204. ; Jump table accessed by MEX to write/read serial port
  205. ;
  206. IN$MODSTAP:    JMP    RD$MODSTAP     ;read ACIA status port        12AH
  207.         DS    7
  208. OUT$MODDATP:    JMP    WR$MODDATP    ;send character to ACIA        134H
  209.         DS    7
  210. IN$MODDATP:    JMP    RD$MODDATP    ;read character from ACIA    13EH
  211.         DS    7
  212. ;
  213. ; Bit-test routines.  These will be merged with the above
  214. ; routines in MEX 2.0 to provide a more reasonable format
  215. ;
  216. MASKR:        ANI    MDRCVB ! RET    ;bit to test for receive ready    148H
  217. TESTR:        CPI    MDRCVR ! RET    ;value of rcv. bit when ready    14BH
  218. MASKS:        ANI    MDSNDB ! RET    ;bit to test for send ready    14EH
  219. TESTS:        CPI    MDSNDR ! RET    ;value of send bit when ready    151H
  220. ;
  221. ; Unused area: was once used for special PMMI functions, now used only
  222. ; to retain compatibility with MDM overlays. You may use this area for
  223. ; any miscellaneous storage you'd like but the length of the area
  224. ; >> MUST << be 12 bytes.
  225. ;
  226.         DS    12        ;PMMI only calls        154H
  227. ;
  228. ; Special modem function jump table: if your overlay cannot handle
  229. ; some of these, change the jump to "DS 3", so the code present in
  230. ; MEX will be retained.  Thus, if your modem can't dial, change the
  231. ; JMP PDIAL at DIALV to DS 3, and MEX will print a "not-implemented"
  232. ; diagnostic for any commands that require dialing.
  233. ;
  234. ;
  235. LOGON:        DS    2        ;not used by MEX          160H
  236. DIALV:        JMP    DIAL        ;dial a digit in A (ref SMOVL)    162H
  237. DISCV:        JMP    DISCON        ;drops DTR to hang-up fast!    165H
  238. GOODBV:        JMP    GOODBYE        ;called before exit to CPM    168H
  239. INMODV:        JMP    INITMOD        ;go to user written routine    16BH
  240. NEWBDV:        JMP    PBAUD        ;changes baud with phone #    16EH
  241. NOPARV:        RET  !    NOP  !    NOP    ;set modem for no-parity     171H
  242. PARITV:        RET  !    NOP  !    NOP    ;set modem parity             174H
  243. SETUPV:        JMP    SETCMD        ;                177H
  244. SPMENV:        DS     3        ;not used by MEX        17AH
  245. VERSNV:        JMP    SYSVER        ;                17DH
  246. BREAKV:        JMP    SENDBRK        ;                180H
  247. ;
  248. ; The following jump vector provides the overlay with access to special
  249. ; routines in the main program (retained and supported in the main pro-
  250. ; gram for MDM overlay compatibility). These should not be modified by
  251. ; the overlay.
  252. ;
  253. ; Note that for MEX 2.0 compatibility, you should not try to use these
  254. ; routines, since this table will go away with MEX 2.0 (use the MEX
  255. ; service call processor instead).
  256. ;
  257. ILPRTV:        DS    3    ;replace with MEX function 9         183H
  258. INBUFV:        DS    3    ;replace with MEX functin 10        186H
  259. ILCMPV:        DS    3    ;replace with table lookup funct 247    189H
  260. INMDMV:        DS    3    ;replace with MEX function 255        18CH
  261. NXSCRV:        DS    3    ;not supported by MEX            18FH
  262. TIMERV:        DS    3    ;replace with MEX function 254        192H
  263. ;
  264. ; Clear/screen and clear/end-of-screen. Each routine must use the
  265. ; full 9 bytes alloted (may be padded with nulls).
  266. ;
  267. ;
  268. CLREOS:        LXI    D,EOSMSG    ;                195H
  269.         MVI    C,PRINT
  270.         CALL    MEX
  271.         RET            ;                19DH
  272. ;
  273. CLS:        LXI    D,CLSMSG    ;                19EH
  274.         MVI    C,PRINT
  275.         CALL    MEX
  276.         RET            ;                1A6H
  277. ;
  278. ;
  279. ;        *** END OF FIXED FORMAT AREA ***
  280. ;
  281. ;**********************************************************************
  282. ;
  283. ;        Overlay  Fixed  Messages  Area
  284. ;
  285. EOSMSG:    DB    ESC,0D9H,0,0,'$'    ;clear to end of screen message
  286.                     ;for Videx Videoterm / SOROC
  287. ;
  288. CLSMSG:    DB    ESC,0AAH,0,0,'$'    ;clear screen message
  289.                     ;for Videx Videoterm / SOROC
  290. ;
  291. VERMSG:    DB    CR,LF,TAB,TAB,'Version for Apple ][ / Applicard'
  292.     DB    CR,LF
  293.     DB    TAB,TAB,' SSC card   '
  294.     DB    'Overlay Version ',REV/10+'0','.'
  295.     DB    REV MOD 10+'0'
  296.     DB    CR,LF,LF,'$'
  297.     DB    0,'Overlay by Henry Middlebrook [70766,766]',0,'$'
  298. ;
  299. ;----------------------------------------------------------------------
  300. ;
  301. ; These routines are specific to the Apple ][+ with Applicard.  The
  302. ; routines read modem hardware (Apple Super Serial Card ACIA) directly
  303. ; from the Applicard.
  304. ;
  305. ; Read the Command Port of ACIA
  306. ;
  307. RD$MODCMDP:    PUSH    D
  308.         LXI    D,MODCMDP
  309.         CALL    PEEK
  310.         POP    D
  311.         RET
  312. ;
  313. ; Write to the Command Port of ACIA
  314. ;
  315. WR$MODCMDP:    PUSH    D
  316.         LXI    D,MODCMDP
  317.         CALL    POKE
  318.         POP    D
  319.         RET
  320. ;
  321. ; Read the Status Port of the ACIA
  322. ;
  323. RD$MODSTAP:    PUSH    D
  324.         LXI    D,MODSTAP
  325.         CALL    PEEK
  326.         POP    D
  327.         RET
  328. ;
  329. ; Write to the Control Port of the ACIA
  330. ;
  331. WR$MODCTLP:    PUSH    D
  332.         LXI    D,MODCTLP
  333.         CALL    POKE
  334.         POP    D
  335.         RET
  336. ;
  337. ; Read the Control Port of the ACIA
  338. ;
  339. RD$MODCTLP:    PUSH    D
  340.         LXI    D,MODCTLP
  341.         CALL    PEEK
  342.         POP    D
  343.         RET
  344. ;
  345. ; Read Data Port of ACIA
  346. ;
  347. RD$MODDATP:    PUSH    D
  348.         LXI    D,MODDATP
  349.         CALL    PEEK
  350.         POP    D
  351.         RET
  352. ;
  353. ; Write to the Serial Data Port of the ACIA
  354. ;
  355. WR$MODDATP:    PUSH    D
  356.         LXI    D,MODDATP
  357.         CALL    POKE
  358.         POP    D
  359.         RET
  360. ;
  361. ; Peek at 1 byte from Apple 6502 address space
  362. ; ENTRY: DE = Address in Apple
  363. ; EXIT:    A = Data
  364. ;
  365. PEEK:    PUSH    B
  366.     MVI    C,PEEK1BYTE
  367.     CALL    WRBYTE
  368.     CALL    WRWORD
  369.     CALL    RDBYTE
  370.     POP    B
  371.     RET
  372. ;
  373. ; Poke 1 byte to Apple 6502 address space
  374. ; ENTRY: DE = Address in Apple
  375. ; EXIT:    A = Data
  376. ;
  377. POKE:    PUSH    B
  378.     MOV    B,A
  379.     MVI    C,POKE1BYTE
  380.     CALL    WRBYTE
  381.     CALL    WRWORD
  382.     MOV    C,B
  383.     CALL    WRBYTE
  384.     POP    B
  385.     RET
  386. ;
  387. ;----------------------------------------------------------------------
  388. ;
  389. ; This routine sends a timed Break to modem from SSC card.
  390. ;
  391. SENDBRK:CALL    RD$MODCMDP    ;get current command status
  392.     STA    CMDSV
  393.     ORI    BRKMSK        ;mask to make ACIA send BREAK
  394.     CALL    WR$MODCMDP    ;send command
  395.     MVI    B,5
  396.     MVI    C,TIMER        ;wait 500 msecs
  397.     CALL    MEX
  398.     LDA    CMDSV        ;get old command state
  399.     CALL    WR$MODCMDP    ;put it back
  400.     RET
  401. ;
  402. ;.....
  403. ;
  404. ; You can add your own routine here to set DTR low and/or send a break
  405. ; tone to disconnect when exiting to CPM.
  406. ;
  407. GOODBYE:    RET        ;just return so exit to system
  408.                 ;will not cause disconnect
  409. ;
  410. ;.....
  411. ;
  412. ; The following is used to initialize the SSC card for eight data bits,
  413. ; no parity, one stop bit, and 300 baud.
  414. ;
  415. INITMOD:MVI    A,0BH        ;default No Parity byte for ACIA
  416.     STA    PARSV        ;save it
  417.     MVI    A,10H        ;default 8 Data, 1 Stop Bits for ACIA
  418.     STA    WRDSV        ;save it
  419.     MVI    A,1        ;300 baud marker for PBAUD
  420.     JMP    PBAUD        ;let PBAUD setup ACIA
  421. ;
  422. ; This is the secondary entry used by the overlay to set baud,
  423. ; parity, and stop bit parameters of ACIA.
  424. ;
  425. INITMOD1:
  426.     LDA    PARSV        ;get current parity byte
  427.     ORI    0BH        ;enable DTR, RECV IRQ, and RTS
  428.     STA    CMDSV        ;save byte for other uses
  429.     CALL    WR$MODCMDP    ;send to command port
  430.     PUSH    H
  431.     LXI    H,BAUDSV    ;get address of current baud byte
  432.     LDA    WRDSV        ;get current word length byte
  433.     ORA    M        ;put 'em together
  434.     STA    CTLSV        ;...and save for other uses
  435.     POP    H
  436.     CALL    WR$MODCTLP    ;now send to control port
  437.     RET
  438. ;
  439. CMDSV:    DB    0        ;temporary storage
  440. CTLSV:    DB    0        ;temporary storage
  441. ;
  442. ;.....
  443. ;
  444. ; This routine drops DTR to force modem to disconnect.  Does NOT do
  445. ; any initialization.
  446. ;
  447. DISCON:    CALL    RD$MODCMDP    ;get current command status
  448.     STA    CMDSV        ;save it
  449.     MVI    A,DISCB        ;get disconnect byte (drops DTR)
  450.     CALL    WR$MODCMDP    ;send to ACIA
  451.     MVI    B,10
  452.     MVI    C,TIMER        ;wait 1 second
  453.     CALL    MEX
  454.     LDA    CMDSV        ;get back command status
  455.     CALL    WR$MODCMDP    ;put it back in ACIA register
  456.     MVI    B,10
  457.     MVI    C,TIMER        ;wait another second
  458.     CALL    MEX
  459.     RET            ;back to program
  460. ;
  461. ;.....
  462. ;
  463. ; This routine changes the modem baud rate with phone list entry
  464. ;
  465. ; Set baud-rate code in A (if supported by your modem overlay).  PMMI
  466. ; supports only five rates, which are validated here. NOTE: this routine
  467. ; (ie, the one vectored through NEWBDV) should update MSPEED with the
  468. ; passed code, but ONLY if that rate is supported by the hardware.
  469. ;
  470. PBAUD:    PUSH    H        ;don't alter anybody
  471.     PUSH    D
  472.     PUSH    B
  473.     MOV    E,A        ;code to DE
  474.     MVI    D,0
  475.     LXI    H,BAUDTB    ;offset into table
  476.     DAD    D
  477.     MOV    A,M        ;fetch code
  478.     ORA    A        ;0 means unsupported code
  479.     JZ    PBEXIT        ;exit if so
  480.     STA    BAUDSV         ;good rate, save it for INITMOD1
  481.     CALL    INITMOD1    ;set baud (and PSW)
  482.     MOV    A,E        ;get speed code back
  483.     STA    MSPEED        ;make it current
  484.     JMP    PBEXIT + 1    ;jump error flag set
  485. PBEXIT:    STC            ;set return error for STBAUD caller
  486.     POP    B        ;all done
  487.     POP    D
  488.     POP    H
  489.     RET
  490. ;
  491. ; Table of baud rate parameters for supported rates
  492. ;
  493. BAUDTB:    DB    03H,06H,0,07H,0        ;110,300,450,610,710
  494.     DB    08H,0AH,0CH,0EH,0FH    ;1200,2400,4800,9600,19200
  495. BAUDSV: DB    06H            ;current baud byte
  496. ;
  497. ;.....
  498. ;
  499. ; Sign-on message
  500. ;
  501. SYSVER:    LXI    D,VERMSG
  502.     MVI    C,PRINT
  503.     CALL    MEX
  504.     RET
  505. ;
  506. ;.....
  507. ;
  508. ; Newline on console
  509. ;
  510. CRLF:    MVI    A,CR
  511.     CALL    TYPE
  512.     MVI    A,LF        ;fall into TYPE
  513. ;
  514. ; type char in A on console
  515. ;
  516. TYPE:    PUSH    H        ;save 'em
  517.     PUSH    D
  518.     PUSH    B
  519.     MOV    E,A        ;align output character
  520.     MVI    C,CONOUT    ;print via MEX
  521.     CALL    MEX
  522.     POP    B
  523.     POP    D
  524.     POP    H
  525.     RET
  526. ;
  527. ;----------------------------------------------------------------------
  528. ;
  529. ; The remainder of this overlay implements a very versatile SET command
  530. ; -- if you prefer not to write a SET for your modem, you may delete the
  531. ; code from here to the END statement. Control is passed here after
  532. ; MEX parses a SET command.
  533. ;
  534. ;
  535. SETCMD:    MVI    C,SBLANK    ;any arguments?
  536.     CALL    MEX
  537.     JC    SETSHO        ;if not, go print out values
  538.     LXI    D,CMDTBL    ;parse command
  539.     CALL    TSRCH        ;from table
  540.     PUSH    H        ;any address on stack
  541.     RNC            ;if we have one, execute it
  542.     POP    H        ;nope, fix stack
  543. SETERR:    LXI    D,SETEMS    ;print error
  544.     MVI    C,PRINT
  545.     CALL    MEX
  546.     RET
  547. ;
  548. SETEMS:    DB    CR,LF,'SET command error',CR,LF,'$'
  549. ;
  550. ; SET command table ... note that tables are constructed of command-
  551. ; name (terminated by high bit=1) followed by word-data-value returned
  552. ; in HL by MEX service processor LOOKUP.  Table must be terminated by
  553. ; a binary zero.
  554. ;
  555. ; Note that LOOKUP attempts to find the next item in the input stream
  556. ; in the table passed to it in HL ... if found, the table data item is
  557. ; returned in HL; if not found, LOOKUP returns carry set.
  558. ;
  559. CMDTBL:    DB    '?'+80H            ;"set ?"
  560.     DW    STHELP
  561.     DB    'BAU','D'+80H        ;"set baud"
  562.     DW    STBAUD
  563.     DB    'PS','W'+80H        ;"set PSW"
  564.     DW    STPSW
  565.     DB    'TON','E'+80H        ;'set TONE/PULSE byte to 'T'
  566.     DW    STTONE
  567.     DB    'PULS','E'+80H        ;'set TONE/PULSE byte to 'P'
  568.     DW    STPULSE
  569.     DB    0            ;<<=== table terminator
  570. ;
  571. ; SET <no-args>: print current statistics
  572. ;
  573. SETSHO:    LXI    H,SHOTBL    ;get table of SHOW subroutines
  574. SETSLP:    MOV    E,M        ;get table address
  575.     INX    H
  576.     MOV    D,M
  577.     INX    H
  578.     MOV    A,D        ;end of table?
  579.     ORA    E
  580.     RZ            ;exit if so
  581.     PUSH    H        ;save table pointer
  582.     XCHG            ;adrs to HL
  583.     CALL    GOHL        ;do it
  584.     CALL    CRLF        ;print newline
  585.     MVI    C,CHEKCC    ;check for console abort
  586.     CALL    MEX
  587.     POP    H        ;it's done
  588.     JNZ    SETSLP        ;continue if no abort
  589.     RET
  590. ;
  591. GOHL:    PCHL
  592. ;
  593. ; Table of SHOW subroutines
  594. ;
  595. SHOTBL:    
  596.     DW    BDSHOW        ;displays current baud
  597.     DW    PSWSHOW        ;displays current PSW
  598.     DW    TPSHOW        ;displays current TPULSE byte (0105H)
  599.     DW    CRLF
  600.     DW    0        ;<<== table terminator
  601. ;
  602. ; SET ?  processor
  603. ;
  604. STHELP:    CALL     CLS            ;clear screen
  605.     LXI    D,HLPMSG
  606.     MVI    C,PRINT
  607.     CALL    MEX
  608.     RET
  609. ;
  610. ; The help message
  611. ;
  612. HLPMSG:    DB    CR,LF,'SET Commands available are:',CR,LF,LF
  613.     DB    'SET BAUD  <110, 300, 600, 1200, 2400, 4800,'
  614.     DB    ' 9600, or 19200>',CR,LF
  615.     DB    'SET PSW   <8N1, 7E1, 7O1, or 7N1> -- Word Length,'
  616.     DB    ' Parity, Stop Bits',CR,LF
  617.     DB    'SET TONE  (Sets flag for TONE  dialing)',CR,LF
  618.     DB    'SET PULSE (Sets flag for PULSE dialing)'
  619.     DB    CR,LF,LF,'$'
  620. ;
  621. ; SET BAUD processor
  622. ;
  623. STBAUD:    MVI    C,BDPARS    ;function code
  624.     CALL    MEX    
  625.     JC    SETERR        ;invalid code
  626.     CALL    PBAUD        ;try to set it
  627.     JC    SETERR        ;unsupported code
  628. BDSHOW:    CALL    ILPRT        ;display baud
  629.     DB    'Baud rate:',TAB,' ',0
  630.     LDA    MSPEED
  631.     MVI    C,PRBAUD    ;use MEX routine
  632.     CALL    MEX
  633.     RET
  634. ;
  635. ; SET PSW processor
  636. ;
  637. STPSW:    MVI    C,SBLANK
  638.     CALL    MEX
  639.     JC    SETERR        ;SET PSW should have had argument
  640.     LXI    D,PSWTBL    ;look for PSW match in table
  641.     CALL    TSRCH
  642.     JC    SETERR        ;not there, so report error
  643.     CALL    FIXPSW        ;routine to set PARSV and WRDSV
  644.     CALL    INITMOD1    ;now fix ACIA registers
  645. ;
  646. PSWSHOW:
  647.     CALL    ILPRT
  648.     DB    'PSW setting:',TAB,' ',0
  649.     LDA    PSWSET
  650.     CPI    P8N1
  651.     JNZ    PSW1
  652.     CALL    ILPRT
  653.     DB    '8N1',0
  654.     RET
  655. PSW1:    CPI    P7E1
  656.     JNZ    PSW2
  657.     CALL    ILPRT
  658.     DB    '7E1',0
  659.     RET
  660. PSW2:    CPI    P7O1
  661.     JNZ    PSW3
  662.     CALL    ILPRT
  663.     DB    '7O1',0
  664.     RET
  665. PSW3:    CPI    P7N1
  666.     JNZ    PSW4
  667.     CALL    ILPRT
  668.     DB    '7N1',0
  669.     RET
  670. PSW4:    CALL    ILPRT
  671.     DB    '<< ERROR >>',0
  672.     RET
  673. ;
  674. ;
  675. PSWSET:    DB    010H        ;storage and default (8N1)
  676. PARSV:    DB    0BH        ;storage and default (no parity)
  677. WRDSV:    DB    010H        ;storage and default (8 data, 1 stop bits)
  678. ;
  679. FIXPSW:    MOV    A,L        ;PSW byte from table
  680.     STA    PSWSET        ;save it
  681.     ANI    0F0H        ;mask for word length bits
  682.     STA    WRDSV        ;put in storage
  683.     LDA    PSWSET        ;get back PSW byte
  684.     ANI    0FH        ;mask for parity bits
  685.     RLC            ;first shift into upper nibble..
  686.     RLC            ;...away we go...
  687.     RLC            ;.....and go...
  688.     RLC            ;......and done
  689.     ORI    0BH        ;mask needed for ACIA command register
  690.     STA    PARSV        ;put in storage
  691.     RET
  692. ;
  693. PSWTBL:    DB    '8N','1'+80H
  694.     DW    P8N1        ;filled in with equ's
  695.     DB    '7E','1'+80H
  696.     DW    P7E1        ; - ditto -
  697.     DB    '7O','1'+80H
  698.     DW    P7O1        ; - ditto -
  699.     DB    '7N','1'+80H
  700.     DW    P7N1        ; - ditto -
  701.     DB    0        ;<<==== table terminator
  702. ;
  703. ;.....
  704. ;
  705. ; These routines set TPULSE flag at 0105H to either 'T' or 'P' so that
  706. ; MODEM (specifically MXO-SM13.ASM) overlay will dial in TONE or PULSE
  707. ; mode.  The settings are mutually exclusive.
  708. ;
  709. STTONE:    MVI    A,'T'        ;get T flag
  710.     STA    TPULSE        ;put into proper place
  711.     JMP    TPSHOW        ;display dial mode
  712. ;
  713. STPULSE:
  714.     MVI    A,'P'        ;get P flag
  715.     STA    TPULSE
  716. ;
  717. TPSHOW:    CALL    ILPRT
  718.     DB    'Dial Mode:',TAB,' ',0
  719.     LDA    TPULSE
  720.     CPI    'T'
  721.     JNZ    TP1
  722.     CALL    ILPRT
  723.     DB    'TONE',0
  724.     RET
  725. TP1:    CPI    'P'
  726.     JNZ    TP2
  727.     CALL    ILPRT
  728.     DB    'PULSE',0
  729.     RET
  730. TP2:    CALL    ILPRT
  731.     DB    '<< ERROR >>',0
  732.     RET
  733. ;
  734. ;......
  735. ;
  736. ; Compare next input-stream item in table @DE; CY=1 if not found,
  737. ; else HL = matched data item
  738. ;
  739. TSRCH:    MVI    C,LOOKUP    ;get function code
  740.     JMP    MEX        ;pass to MEX processor
  741. ;
  742. ; Print in-line message ... blows away C register
  743. ;
  744. ILPRT:    MVI    C,ILP        ;get function code
  745.     JMP    MEX        ;go do it
  746. ;
  747. ;
  748. ;    >>>>   End of PORT specific overlay section   <<<<
  749.  
  750. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  751. ;
  752. ;        MODEM SPECIFIC OVERLAY SECTION
  753. ;
  754. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  755. ;
  756. ;        MEX SMARTMODEM OVERLAY V1.3
  757. ;
  758. ; Smartmodem overlay for MEX: revision 1.3
  759. ;
  760. ; Adapted by Henry Middlebrook (1/85)
  761. ;
  762. ; NOTE: Some redundant parts of the V1.3 overlay were removed when this
  763. ;    section was pulled into MXO-SS30.  See the original overlay for
  764. ;    additional information on the history and use of this MODEM
  765. ;    specific overlay.        -HM-    2/4/85
  766. ;
  767. ; Written 04/16/84 by Ronald G. Fowler (V1.0)
  768. ;
  769. ;
  770.     ORG    0B00H        ;maintain official MEX origin
  771. ;
  772. DIAL:    LHLD    DIALPT        ;FETCH POINTER
  773.     CPI    254        ;START DIAL?
  774.     JZ    STDIAL        ;JUMP IF SO
  775.     CPI    255        ;END DIAL?
  776.     JZ    ENDIAL        ;JUMP IF SO
  777. ;
  778. ; Not start or end sequence, must be a digit to be sent to the modem
  779. ;
  780.     MOV    M,A        ;PUT CHAR IN BUFFER
  781.     INX    H        ;ADVANCE POINTER
  782.     SHLD    DIALPT        ;STUFF PNTR
  783.     RET            ;ALL DONE
  784. ;
  785. ; Here on a start-dial sequence
  786. ;
  787. STDIAL:    LXI    H,DIALBF    ;SET UP BUFFER POINTER
  788.     SHLD    DIALPT
  789.     RET
  790. ;
  791. ; Here on an end-dial sequence
  792. ;
  793. ENDIAL:    MVI    M,CR        ;STUFF END-OF-LINE INTO BUFFER
  794.     INX    H        ;FOLLOWED BY TERMINATOR
  795.     MVI    M,0
  796.     LDA    TPULSE        ;GET OVERLAY'S TOUCH-TONE FLAG
  797.     STA    SMDIAL+3    ;PUT INTO STRING
  798.     LXI    H,SMDIAL    ;POINT TO DIALING STRING
  799.     CALL    SMSEND        ;SEND IT
  800. WAITSM:    MVI    C,INMDM
  801.     CALL    MEX        ;CATCH ANY OUTPUT FROM THE MODEM
  802.     JNC    WAITSM        ;LOOP UNTIL NO MORE CHARACTERS
  803. ;
  804. ; THE FOLLOWING LOOP WAITS FOR A RESULT FROM THE MODEM (UP TO
  805. ; 60 SECONDS: YOU MAY CHANGE THIS VALUE IN THE FOLLOWING LINE).
  806. ; NOTE THAT THE SMARTMODEM HAS AN INTERNAL 30 SECOND TIMEOUT WHILE
  807. ; FOR A CARRIER ON THE OTHER END.  YOU CAN CHANGE BY PLAYING WITH THE
  808. ; S7 VARIABLE (I.E. SEND THE SMARTMODEM "AT S7=20" TO LOWER THE 30 SECOND
  809. ; WAIT TO 20 SECONDS).
  810. ;
  811. RESULT:    MVI    C,60        ;<<== MAXIMUM TIME TO WAIT FOR RESULT
  812. SMWLP:    PUSH    B
  813.     MVI    B,1        ;CHECK FOR A CHAR, UP TO 1 SEC WAIT
  814.     MVI    C,TMDINP    ;DO TIMED INPUT
  815.     CALL    MEX
  816.     POP    B
  817.     JNC    SMTEST        ;JUMP IF MODEM HAD A CHAR
  818.     PUSH    B        ;NO, TEST FOR CONTROL-C FROM CONSOLE
  819.     MVI    C,CHEKCC
  820.     CALL    MEX
  821.     POP    B
  822.     JNZ    SMNEXT        ;IF NOT, JUMP
  823.     MVI    B,CR        ;YES, SHUT DOWN THE MODEM
  824.     MVI    C,SNDCHR
  825.     CALL    MEX
  826.     MVI    A,3        ;RETURN ABORT CODE
  827.     RET
  828. SMNEXT:    DCR    C        ;NO
  829.     JNZ    SMWLP        ;CONTINUE
  830. ;
  831. ; ONE MINUTE WITH NO MODEM RESPONSE (OR NO CONNECTION)
  832. ;
  833. SMTIMO:    MVI    A,2        ;RETURN TIMEOUT CODE
  834.     RET
  835. ;
  836. ; MODEM GAVE US A RESULT, CHECK IT
  837. ;
  838. SMTEST:    ANI    7FH        ;IGNORE ANY PARITY
  839.     CALL    SMANAL        ;TEST THE RESULT
  840.     MOV    A,B        ;A=RESULT (CY SIGNIFICANT HERE TOO)
  841.     PUSH    PSW        ;SAVE IT
  842. SMTLP:    MVI    C,INMDM        ;FLUSH ANY REMAINING COMMAND LINE
  843.     CALL    MEX
  844.     JC    SMCHEK        ;JUMP IF NO INPUT
  845.     CPI    LF        ;GOT SOME ... WAITING FOR EOL
  846.     JNZ    SMTLP        ;EAT ANY IN-BETWEEN
  847. SMCHEK:    POP    PSW        ;A HAS MEX RETURN-CODE, CY=1 IF UNKNOWN
  848.     JC    RESULT        ;IF RESULT UNKNOWN, IGNORE IT
  849.     RET
  850. ;
  851. SMANAL:    MVI    B,0        ;PREP CONNECT CODE
  852.     CPI    'C'        ;"CONNECT"?
  853.     RZ
  854.     CPI    '1'        ;NUMERIC VERSION OF "CONNECT"
  855.     RZ
  856.     CPI    '5'        ;NUMERIC VERSION OF "CONNECT 1200"
  857.     RZ
  858.     INR    B        ;PREP BUSY CODE B=1
  859.     CPI    'B'
  860.     RZ
  861.     INR    B        ;PREP NO CONNECT MSG B=2
  862.     CPI    'N'        ;N=NO CONNECT
  863.     RZ
  864.     CPI    '3'        ;NUMERIC VERSION OF "NO CONNECT"
  865.     RZ
  866.     MVI    B,4        ;PREP MODEM ERROR
  867.     CPI    'E'        ;E=ERROR
  868.     RZ
  869.     CPI    '4'        ;NUMERIC VERSION OF "ERROR"
  870.     RZ
  871.     STC            ;UNKNOWN...
  872.     RET
  873. ;
  874. ;.....
  875. ;
  876. ; SMARTMODEM UTILITY ROUTINE: SEND STRING TO MODEM
  877. ;
  878. SMSEND:    MVI    C,SNDRDY    ;WAIT FOR MODEM READY
  879.     CALL    MEX
  880.     JNZ    SMSEND
  881.     MOV    A,M        ;FETCH NEXT CHARACTER
  882.     INX    H
  883.     ORA    A        ;END?
  884.     RZ            ;DONE IF SO
  885.     MOV    B,A        ;NO, POSITION FOR SENDING
  886.     MVI    C,SNDCHR    ;NOPE, SEND THE CHARACTER
  887.     CALL    MEX
  888.     JMP    SMSEND
  889. ;
  890. ; DATA AREA
  891. ;
  892. SMDIAL:    DB    'ATDT '
  893. DIALBF:    DS    52        ;2* 24 CHAR MAX, + CR + NULL + SLOP
  894. DIALPT:    DS    2        ;DIAL POSITION POINTER
  895. ;
  896. ;
  897. ;    >>>>    End of MODEM Specific Overlay
  898.  
  899. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  900. ;
  901. ;        MEXPAT11.ASM    --    Patch file
  902. ;
  903. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  904. ;
  905. ;
  906. ; This is the patch file for MEX 1.1 -- you may edit this file to change
  907. ; various initial variables. Assemble with ASM or MAC, then use MLOAD
  908. ; to patch the changes into MEX:
  909. ;
  910. ;    ASM MEXPAT11.AAZ            ;assemble the edited file
  911. ;    MLOAD NEWMEX.COM=MEX.OBJ,MEXPAT10    ;patch MEX
  912. ;
  913. ; You may also pull this file into your modem overlay (be sure you in-
  914. ; clude the ORG statement below).
  915. ;
  916. ; The order of the patch variables supported here will not change from
  917. ; version to version (i.e., new items will be added on to the end).
  918. ;
  919. ;
  920.     ORG    0D00H        ;location of patch variables
  921. ;
  922. ;
  923. ;
  924. ; The following line defines the MEX service call entry point, and
  925. ; is not meant to be changed by the user
  926. ;
  927. MEXSTART:    DS    3        ;MEX service call processor
  928.         DS    3        ;reserved
  929.         DS    1        ;reserved
  930. ;
  931. ; The following line contains the initial free-memory pointer for
  932. ; MEX.  Sophisticated modem overlays requiring additional space may change
  933. ; this pointer (ie, move it higher), and thus "protect" an area of RAM.
  934. ;
  935. MEMRY:    DS    2        ;first free memory pointer
  936. ;
  937. ; Following are the lowest-level vectors for console and list I/O used
  938. ; by MEX.  These normally point to routines that save the registers and
  939. ; vector to the appropriate BIOS routines.  Complex applications may
  940. ; need to intercept (or even replace) these routines.  If you do this,
  941. ; be sure to preserve DE, HL and BC.
  942. ;
  943. STSVEC:    DS    2        ;console status vector
  944. INVEC:    DS    2        ;console input vector
  945. OUTVEC:    DS    2        ;console output vector
  946. ;
  947. ;
  948. LVEC:    DS    2        ;list output vector
  949. LSTVEC:    DS    2        ;list status vector
  950. ;
  951. ; The following line defines the location of the default MEX prompt.
  952. ; If you'd like to provide your own initial prompt, add a DW statement
  953. ; pointing to a prompt buffer structured as follows:
  954. ;
  955. ;        DB <max size of buffer>
  956. ;        DB <length of actual prompt>
  957. ;        DB <prompt string>
  958. ;
  959. ; <maxsize> and <length> may be equal (especially if you disable the
  960. ; ID command by setting CHGPMT, below to 0); the ID command will, if
  961. ; left enabled, be limited to the <max size> value.
  962. ;
  963. PROMPT:    DS    2        ;prompt location
  964.     DS    1        ;reserved
  965. TYPLIN:    DB    22        ;for TYPE command: # lines/screen
  966. PAUSFL:    DB    1        ;for TYPE cmd: 1=pause 0=no pause
  967. SEPCHR:    DB    ';'        ;multiple command-line separator
  968. ;
  969. ; following five for SENDOUT command
  970. ;
  971. SOWAIT:    DB    4        ;# seconds waiting for a sendout echo
  972. SOREPL:    DB    8        ;# seconds waiting for initial reply
  973. SOTRIG:    DB    '>'        ;sendout trigger char from remote
  974. CANCHR:    DB    'U'-64        ;sendout char to cancel line to remote
  975. SORTRY:    DB    6        ;sendout # retries
  976. ;
  977. ;
  978. HEXFLG:    DB    0        ;hex/decimal mode
  979. ESCCHR:    DB    1BH        ;terminal mode escape char (1BH = ESC)
  980. NOBELL:    DB    0        ;set to 1 to disable bell
  981. ;
  982. ; Buffer variables.  See BUFFERS.DOC for setup information
  983. ;
  984. PSIZE:    DB    2        ;default=2k
  985. ASIZE:    DB    255        ;"big" capture buffer
  986. XSIZE:    DB    16        ;16K transfer buffer
  987. NSIZE:    DB    1        ;1k for 85 batch files
  988. PRELEN:    DB    40        ;maximum length of PREFIX string
  989. SUFLEN:    DB    40        ;maximum length of SUFFIX string
  990. ;
  991. ; Misc. stuff
  992. ;
  993. CDOSFL:    DB    0        ;non-zero for CDOS
  994. WTECHO:    DB    0        ;non-zero sets "wait-for-echo"
  995. KYSIZE:    DW    400        ;size of keystring area, in bytes
  996. CISFLG:    DB    1        ;non-zero allows CIS file transfers
  997. CISOK:    DB    1        ;non zero allows STAT CIS ON or OFF
  998. CHGPMT:    DB    1        ;non-zero allows ID (prompt chg) command
  999. ERRID:    DB    1        ;non-zero prints ID msg in err msgs
  1000. ;
  1001. ; by setting the following DB to 0, you can disable the HELP
  1002. ; command, freeing up space used by the help file index.
  1003. ;
  1004. HELPOK:    DB    1        ;non-zero allows HELP command
  1005. MEXDU:    DB    0        ;user \/  alt. area for READ,LOAD,INI.MEX
  1006.     DB    0        ;drive/\  & HELP.MEX (if SEARCH <>0)
  1007. DEBUG:    DB    0        ;debugging in term-mode if non-zero
  1008. EXCLSY:    DB    1        ;non-0 excludes $SYS from batchsend, dir
  1009. INIMEX:    DB    0        ;non-zero runs INI.MEX at startup
  1010. RTIMER:    DB    1        ;receiver wait: # seconds [Plouff patch]
  1011. PQSIZE:    DW    150        ;size of the modem-port queue
  1012. PHSIZE:    DB    30        ;phone library size (# entries)
  1013. SILENT:    DB    0FFH        ;0=silence multi-line & READ cmd echo
  1014. ALERT:    DB    255        ;alert-bell count on CALL complete
  1015. EXTEND:    DB    0        ;non-zero: unk cmds goto READ processor
  1016. SPLIT:    DB    1        ;non-zero: phonelib printout, shows baud
  1017. SEARCH:    DB    0        ;search mode 0,1,2,3
  1018. ;
  1019. ; Following is the GLOBAL secondary options table.  To
  1020. ; set an option to global, change its ASCII character to a 0.
  1021. ;
  1022. RESTT:    DB    'ABDELQRSTVX'
  1023.     DS    8        ;room for option expansion
  1024. ;
  1025. ;
  1026. ; added on release 1.10:
  1027. ;
  1028. queue:    db    1        ;1=allow queueing, 0=no
  1029. timbas:    dw    208        ;timing constant
  1030. mode:    db    0        ;mode of modem I/O
  1031. sminit:    ds    2        ;Smartmodem INIT routine adrs
  1032. ssetv:    ds    2        ;SSET command: defaulted off
  1033. smexit:    ds    2        ;Smartmodem EXIT routine adrs
  1034.     ds    4        ;internal to MEX
  1035. sodflg:    db    0        ;1=tie SENDOUT to time delay if no WTECHO
  1036. autosv:    db    1        ;0=initial term mode, save off
  1037. tabflg:    db    0ffh        ;non-zero=expand tabs within MEX
  1038. ;
  1039. ;
  1040. ;        >>>> End of PATCH Overlay Section <<<<
  1041. ;
  1042.     END
  1043.