home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
cpm
/
mex
/
mxo-rs.asm
< prev
next >
Wrap
Assembly Source File
|
1994-07-13
|
22KB
|
702 lines
; Title 'MEX overlay for the TRS-80 MOD IV version 1.7'
; Montezuma Micro CP/M 2.2
; = = = = = = = = = = = = = = = = = =
; MEX TRS-80 MOD IV OVERLAY VERSION 1.0: Written 09/10/84 by Ed Richter
;
; VERSION 1.8 02/22/86 - Auto answer modified to work with the
; Model 4p internal modem command structure.
; Ignore all references to Hayes compatability.
; Bob Kitchen
; 73756,1015
; VERSION 1.7 01/25/85 - ^C in "auto-answer" now aborts to CPM, not
; MEX (sorry bout that one). Added code to
; determine baud rate in "auto-answer".
; Changed "NITMOD" to default to the baud
; rate selected by "MSPEED"
; Ed Richter
; 71455,1133
; VERSION 1.6 01/21/85 - A system reset seems a little drastic
; so added code for a ^C abort to auto
; answer. Also added "number of rings"
; equate.
; Ed Richter
; VERSION 1.5 11/17/84 - Added SET ANSWER ON command
; (For Hayes-compatible modems
; only...see NOTE below.)
; Thom Foulks
; VERSION 1.3 10/10/84 - Fixed bug in the Printer ready test
; Ed Richter
; VERSION 1.2 09/18/84 - Added the comments to 1.1 and changed the
; configuration of the SET message that is
; output to the console
; Ed Richter
; VERSION 1.1 09/16/84 - Added code to fully control the SIO USART
; via the SET command. This overlay now
; supports-- SET BAUD -- SET PARITY --
; SET STOP BITS -- SET WORD LENGTH --
; Ed Richter
;
; This file was derived from the MDM7xx overlay M7R4-5.ASM, and the
; file MXOPM10.ASM. It is a MEX overlay for use with the TRS-80 MOD
; IV, and an external modem. It has a SET command that supports 300
; though 9600 baud.
;
; The SMARTMODEM, and compatibles will answer the phone at the
; incoming caller's baud rate. This makes it necessary to insure
; that the SIO-USART is configured to the same speed. This progam
; will answer the phone at the MSPEED baud rate. If it cannot
; read characters at that speed it will start at 110 baud (BAUD vector
; set to 0), check for a CR, LF, or ^C. If it is unable to read a
; character at that speed it will increment the baud rate to 1200
; (the - CPI '6' - in the SKPBAUD routine), and retry at each step.
; To change the upper limit (1200) change the CPI '6' to the MSPEED
; value +1. ie., CPI '10' for 19200.
;
; NOTE: This overlay must be used in congunction with MXO-4P.ASM
; for full modem control. The SET ANSWER command will place MEX
; into an auto-answer mode which may be exited prior to execution
; with a ^C - CONTROL C - it's intended for use with a READ file
; similar to Bruce Morgen's WELCOME3 or WELCOME4.
; - Thom Foulks
;
; = = = = = = = = = = = = = = = = =
REV: EQU 16
;
CR: EQU 0DH ;carriage return
LF: EQU 0AH ;linefeed
TPA: EQU 0100H
TAB: EQU 09H
YES: EQU 0FFH
NO: EQU 0
RING: EQU '2' ;number of rings for auto-answer
WMBOOT: EQU 05B39H ;MEX114.COM cpm stack pointer storage address
;
;
; Change the following information to match your equipment.
; PORT should be set to the base port address for the RS-232 port.
;
PORT: EQU 0E8H ;master reset port
MODCT1: EQU PORT+2 ;modem control port
MODDAT: EQU PORT+3 ;modem data in port
MODCT2: EQU PORT+2 ;not used mod iv
BAUDRP: EQU PORT+1 ;baud rate port
MDRCVB: EQU 080H ;bit to test for receive
MDRCVR: EQU 080H ;value when ready
MDSNDB: EQU 040H ;bit to test for send
MDSNDR: EQU 040H ;value when ready
;
MODCTB: EQU 0ECH ;dtr,rts,8,no,1 for port initialize
CTSMSK: EQU 020H ;carrier detect mask
ISOCD: EQU 0DFH ;port ready mask
PRPORT: EQU 0F8H ;printer port
PRSTAT: EQU 0C0H ;printer ready mask
BRKMSK: EQU 0E3H ;send break
DTRMSK: EQU 0EBH ;drop dtr
;
;MEX SERVICE PROCESSOR STUFF
;
MEX: EQU 0D00H ;address of the service processor
INMDM: EQU 255 ;get char from port,CY=no more in 100ms
TIMER: EQU 254 ;delay 100 ms * reg b
TMDINP: EQU 253 ;b=# secs to wait for char,CY=no char
CHEKCC: EQU 252 ;check for ^C from kbd, Z=present
SNDRDY: EQU 251 ;test for modem-send ready
RCVRDY: EQU 250 ;test for modem-receive ready
SNDCHR: EQU 249 ;send to modem (after SNDRDY)
RCVCHR: EQU 248 ;recv a char from modem after (RCVRDY)
LOOKUP: EQU 247 ;table search: see CMDTBL for info
PARSFN: EQU 246 ;parse filename from input stream
BDPARS: EQU 245 ;parse baud-rate from input stream
SBLANK: EQU 244 ;scan input stream to next non-blank
EVALA: EQU 243 ;evaluate numeric from input stream
LKAHED: EQU 242 ;get nxt char w/o removing from input
GNC: EQU 241 ;get char from input, CY=1 if none
ILP: EQU 240 ;inline print
DECOUT: EQU 239 ;decimal output
PRBAUD: EQU 238 ;print baud rate
CONOUT: EQU 2 ;simulated BDOS funct 2:CONSOLE OUT
PRINT: EQU 9 ;simulated BDOS funct 9: PRINT STRING
INBUF: EQU 10 ;input buffer, same as BDOS FUNCT 10
;
ORG 0D11H ;install printer ready test
DW PRTSTS
;
ORG TPA
;
;
DS 3 ;(for "JMP START" instruction)
PMODEM: DB NO ;Not used by MEX 103H
SMODEM: DB NO ;Not used by MEX
TPULSE: DB '*' ;Not used by MEX 105H
CLOCK: DB 48 ;clock speed in MHz x10, 25.5 MHz max. 106H
;20=2 MHh, 37=3.68 MHz, 40=4 MHz, etc.
MSPEED: DB 1 ;0=110 1=300 2=450 3=600 4=710 5=1200 107H
;6=2400 7=4800 8=9600 9=19200 default
BYTDLY: DB 1 ;0=0 delay 1=10ms 5=50 ms - 9=90 ms 108H
;default time to send character in ter-
;minal mode file transfer for slow BBS.
CRDLY: DB 1 ;0=0 delay 1=100 ms 5=500 ms - 9=900 ms 109H
;default time for extra wait after CRLF
;in terminal mode file transfer
COLUMS: DB 5 ;number of DIR columns shown 10AH
SETFL: DB YES ;yes=user-added Setup routine 10BH
SCRTST: DB YES ;Cursor control routine 10CH
DS 1 ;reserved (old ACKNAK flag) 10DH
BAKFLG: DB YES ;yes=change any file same name to .BAK 10EH
CRCDFL: DB YES ;yes=default to CRC checking 10FH
TOGCRC: DB YES ;yes=allow toggling of CRC to Checksum 110H
CVTBS: DB NO ;yes=convert backspace to rub 111H
TOGLBK: DB YES ;yes=allow toggling of bksp to rub 112H
ADDLF: DB NO ;no=no LF after CR to send file in 113H
;terminal mode (added by remote echo)
TOGLF: DB YES ;yes=allow toggling of LF after CR 114H
TRNLOG: DB YES ;yes=allow transmission of logon 115H
;write logon sequence at location LOGON
SAVCCP: DB YES ;yes=do not overwrite CCP 116H
LOCNXT: DB NO ;yes=local command if EXTCHR precedes 117H
;no=external command if EXTCHR precedes
TOGLOC: DB YES ;yes=allow toggling of LOCONEXTCHR 118H
LSTTST: DB YES ;yes=allow toggling of printer on/off 119H
XOFTST: DB YES ;yes=checks for XOFF from remote while 11AH
;sending a file in terminal mode
XONWT: DB NO ;yes=wait for XON after CR while 11BH
;sending a file in terminal mode
TOGXOF: DB YES ;yes=allow toggling of XOFF checking 11CH
IGNCTL: DB YES ;yes=CTL-chars above ^M not displayed 11DH
EXTRA1: DB 0 ;for future expansion 11EH
EXTRA2: DB 0 ;for future expansion 11FH
BRKCHR: DB 'K'-40H ;^K = Send 300 ms. break tone 120H
NOCONN: DB 'N'-40H ;^N = Disconnect from the phone line 121H
LOGCHR: DB 'L'-40H ;^L = Send logon 122H
LSTCHR: DB 'P'-40H ;^P = Toggle printer 123H
UNSVCH: DB 'R'-40H ;^R = Close input text buffer 124H
TRANCHR: DB 'T'-40H ;^T = Transmit file to remote 125H
SAVECHR: DB 'Y'-40H ;^Y = Open input text buffer 126H
EXTCHR: DB '^'-40h ;^^ = Send next character 127H
DS 2
INCTL1: JMP STATSND ;go to "get status" 12AH
DS 7
OTDATA: OUT MODDAT ! RET ;out modem data port 134H
DS 7
INPORT: IN MODDAT ! RET ;in modem data port
DS 7
MASKR: ANI MDRCVB ! RET ;bit to test for receive ready 148H
TESTR: CPI MDRCVR ! RET ;value of rcv. bit when ready 14BH
MASKS: ANI MDSNDB ! RET ;bit to test for send ready 14EH
TESTS: CPI MDSNDR ! RET ;value of send bit when ready 151H
DS 12 ;unused by MEX
LOGON: DS 2 ;for user message 160H
DIALV: DS 3 ;autodial rtn jump 162H
DISCV: JMP DISCON ;disconnect rtn
GOODBV: DS 3 ;not needed 168H
INMODV: JMP NITMOD ;go to user written routine 16BH
NEWBDV: JMP PBAUD ;set new baud-rate 16EH
NOPARV: DS 3 ;(by-pass PMMI routine) 171H
PARITV: DS 3 ;(by-pass PMMI routine) 174H
SETUPV: JMP SETCMD ;initialize USART and modem 177H
SPMENV: DS 3 ;not used with MEX 17AH
VERSNV: JMP SYSVER ;print header msg 17DH
BREAKV: JMP PBREAK ;send header 180H
; Do not change the following six lines.
ILPRTV: DS 3 ; 183H
INBUFV: DS 3 ; 186H
ILCMPV: DS 3 ; 189H
INMDMV: DS 3 ; 18CH
NXSCRV: DS 3 ; 18FH
TIMERV: DS 3 ; 192H
;
; Routine to clear to end of screen. If using CLREOS and CLRSCRN, set
; SCRNTEST to YES at 010AH (above).
;
CLREOS: LXI D,EOSMSG ;clear to end of screen 195H
MVI C,PRINT ;from cursor
CALL MEX ; 198H
RET ; 19DH
;
CLS: LXI D,CLSMSG ;clear sreen 19EH
MVI C,PRINT
CALL MEX ; 1A1H
RET ; 1A6H
;
SYSVER: LXI D,SOMESG ;print the sys version msg 1A7H
MVI C,PRINT
CALL MEX
CALL CRLF
;
CARRSH LXI D,NOMESG ;no carrier present msg
CALL CARRCK
MVI C,PRINT
CNZ MEX ;print if no carrier
LXI D,CARMSG ;carrier present
MVI C,PRINT
CALL MEX ;say so and continue
RET
;
; Send a break tone to reset some time-share computers.
;
PBREAK: MVI A,BRKMSK ;send break
OUT MODCT1
RET
;
; Routine to return status of the modem port
;
STATSND: IN MODCT1 ;in modem contol port
PUSH B ;just in case
ANI ISOCD ;isolate status and clear CD bit
MOV B,A ;save status
IN PORT ;get CD bit
ANI CTSMSK ;isolate CD bit
ORA B ;merge CD with status
POP B ;restore B
RET
;
; This routine will hang up the phone by dropping DTR.
;
DISCON: MVI A,DTRMSK ;DTR off, send BRK
OUT MODCT1 ;send cmd
MVI B,5
MVI C,TIMER
CALL MEX ;delay 500 msec
MVI A,MODCTB ;normal setup DTR on
OUT MODCT1
RET
;
; This area sets the SIO-UART to an initial value of 8 bits, no parity,
; DTR on, and RTS on.
;
NITMOD: MVI A,1
OUT PORT ;reset the USART to
MVI A,MODCTB ;8,no,1,DTR, and RTS
OUT MODCT1
LXI H,MSPEED
MOV A,M ;initalize to MSPEED baud rate
CALL PBAUD ;get baud rate
RET ;also change the value of MSPEED
;
; Sets the modem speed via the SET COMMAND.
;
SETCMD: MVI C,SBLANK ;any arguments
CALL MEX
JC SETSHO ;if not print out values
LXI D,CMDTBL ;parse commands
CALL TSRCH ;from table
PUSH H ;address on stack
RNC ;if yes then execute it
POP H ;no fix stack
SETERR: LXI D,SETEMS ;no then print error
MVI C,PRINT
CALL MEX
RET
CMDTBL: DB '?'+80H ;"set ?"
DW STHELP
DB 'BAU','D'+80H ;"set baud ?'
DW STBAUD
DB 'WOR','D'+80H ;set word length
DW STWORD
DB 'PARIT','Y'+80H ;set parity
DW STPAR
DB 'STO','P'+80H ;set stop bits
DW STSTOP
DB 'ANSWE','R'+80H ;set auto-answer on
DW STANS
DB 0
SETSHO: CALL CLS ;clear screen
CALL CARRSH ;carrier present
LXI H,SHOTBL ;show subroutines table
SETSLP: MOV E,M ;get table address
INX H
MOV D,M
INX H
MOV A,D ;end of table
ORA E
RZ ;exit if yes
PUSH H ;save table pointer
XCHG ;addrs to HL
CALL GOHL ;do it
CALL CRLF ;print newline
MVI C,CHEKCC ;check for console abort
CALL MEX
POP H ;its done
JNZ SETSLP ;continue if no abort
RET
GOHL: PCHL
SHOTBL: DW BDSHOW ;table
DW PARSHOW
DW WLSHOW
DW STSHOW
DW 0
STHELP: LXI D,HLPMSG ;print help message
MVI C,PRINT
CALL MEX
RET
STBAUD: MVI C,BDPARS ;MEX find baud rate
CALL MEX
JC SETERR ;none then exit
CALL PBAUD ;valid baud rate then set it
JC SETERR ;exit if not supported by overlay
BDSHOW: CALL ILPRT
DB 'Baud Rate:',TAB,' ',0
LDA MSPEED ;get MSPEED to determine present
MVI C,PRBAUD ;baud rate
CALL MEX
RET
STPAR: LXI D,PARTBL ;find parity function requested
CALL TSRCH
PUSH H
RNC ;execute it
POP H
JMP SETERR ;not valid then say so
STWORD: LXI D,WLTBL ;find word length function requested
CALL TSRCH
PUSH H
RNC ;execute it
POP H
JMP SETERR ;not valid then say so
STSTOP: LXI D,STTBL ;find how many stop bits
CALL TSRCH
PUSH H
RNC ;execute it
POP H
JMP SETERR ;not valid then say so
STANS: CALL CLS ;clear the screen
PUSH H ;save H
LXI H,ANSON ;get the set command
CALL SMSEND ;send it
POP H
CALL CRLF ;get ready for msg
CALL CRLF
LXI D,ANSMSG ;and tell us about it
MVI C,PRINT
CALL MEX
WAITCD: CALL INPORT ;to clear garbage
CALL CARRCK ;check for carrier
JZ TSTBAUD ;yes - go check baud rate...
MVI C,CHEKCC ;no check for ^C
CALL MEX
JNZ WAITCD ;no carrier, no ^C so try again
PUSH H ;save H
LXI H,ANSOFF ;turn off auto answer at modem
CALL SMSEND ;send it
POP H
LHLD WMBOOT ;^C -load CPM return address from
;stack pointer storage
SPHL ;put it in the stack pointer
RET ;and go to CPM
TSTBAUD: CALL INPORT ;get byte from modem
CPI CR ;if CR
RZ ;baud rate is good go to MEX
CPI LF ;if LF
RZ ;baud rate is good go to MEX
CPI 'C'-40H ;if ^C
RZ ;baud rate is good go to MEX
PUSH H
PUSH B
PUSH D
LXI H,BAUD ;get baud rate start byte
MOV A,M ;get it out of memory
MOV C,A ;set it up to operate on it
INR C ;add 1 to it
MOV M,C ;and put it back in start byte
CALL PBAUD ;go set baud rate and MSPEED
CPI 6 ;have we tried 1200 baud
JNZ TSTBAUD ;no then we're not done
XRA A ;yes then get ready for retry
STA BAUD ;by setting baud back to 110
POP D
POP B
POP H
JMP WAITCD ;we didn't find a good baud rate
;so keep trying until - 1. get a
;good baud rate 2. get a ^C, or
;3. hangup causes carrier loss.
;
HLPMSG: DB CR,LF,1AH,'SET command, TRS MOD 4 version 1.8',CR,LF
DB CR,LF,'SET BAUD 300 <or> 1200 <or> 2400 <or> 4800 <or> 9600'
DB CR,LF,'SET PARITY ON <or> OFF <or> ODD <or> EVEN'
DB CR,LF,'SET WORD 5 <or> 6 <or> 7 <or> 8'
DB CR,LF,'SET STOP 1 <or> 2'
DB CR,LF,'SET ANSWER <on> '
DB CR,LF,LF,'Auto Answer configured for the Model 4p internal'
DB ' modem only.',CR,LF
DB CR,LF,'$'
SETEMS: DB CR,LF,'SET command error',CR,LF,LF,'$'
TSRCH: MVI C,LOOKUP
JMP MEX
;
ILPRT: MVI C,ILP ;MEX print function
JMP MEX
;
CRLF: MVI A,CR ;newline on console
CALL TYPE
MVI A,LF
TYPE: PUSH H ;save em
PUSH D
PUSH B
MOV E,A
MVI C,CONOUT ;align output char
CALL MEX ;print via mex
POP B ;restore em
POP D
POP H
RET
;
; Test for printer ready
;
PRTSTS: IN PRPORT ;get printer status
ANI PRSTAT ;isolate it
JNZ PRTSTS1 ;return if not ready A=00
MVI A,0FFH ;ready A=FF
RET
PRTSTS1: XRA A
RET
; Carrier detect 0=CARRIER
;
CARRCK: IN PORT ;get carrier bit
ANI CTSMSK
RET
;
; Baud rate set routine
;
PBAUD: PUSH H ;save everybody
PUSH B
PUSH D
MOV E,A ;get speed
MVI D,0 ;zero the other half of reg pair
LXI H,BAUDTB ;get baud rate table address
DAD D ;add speed offset
MOV A,M ;get baud rate
ORA A ;0=not valid baud rate
JZ PBEXIT ;not valid baud rate then exit
OUT BAUDRP ;good baud rate then set it
MOV A,E ;get speed
STA MSPEED ;set speed
JMP PBEXIT1 ;return
PBEXIT: STC
PBEXIT1: POP B ;no carrier or incorrect baud rate
POP D
POP H
RET
;
BAUDTB: DB 0,055H,0,0,0 ;110,300,450,610,710
DB 077H,0AAH,0CCH,0EEH,0 ;1200,2400,4800,9600,19200
;
STTBL: DB '1'+80H ;stop bit tabe
DW STONE ;set one bit
DB '2'+80H
DW STTWO ;set two bits
DB 0
;
PARTBL: DB 'O','N'+80H ;parity table
DW STON ;enable parity
DB 'OF','F'+80H
DW STOFF ;disable parity
DB 'EVE','N'+80H
DW STEVE ;even parity
DB 'OD','D'+80H
DW STODD ;odd parity
DB 0
;
WLTBL: DB '5'+80H ;word length table
DW STFIVE ;5 bit length
DB '6'+80H
DW STSIX ;6 bit length
DB '7'+80H
DW STSEV ;7 bit length
DB '8'+80H
DW STATE ;8 bit length
DB 0
;
STFIVE: MVI A,MODCTB ;get current port info
ANI 09FH ;change to 5 bits
STA MODCTB ;put back new port info
MVI A,'5' ;set 5 bit flag
STFIVE1: STA WLTEL
CALL CARRCK ;carrier present
RZ ;yep then continue
CALL TYPE ;position cursor
CALL WLSHOW ;nope show word length
RET
STSIX: MVI A,MODCTB ;get current port info
ORI 040H ;set six bits
ANI 0DFH
STA MODCTB ;put new
MVI A,'6' ;set six bit flag
JMP STFIVE1
STSEV: MVI A,MODCTB ;get current port info
ORI 020H ;set seven bits
ANI 0BFH
STA MODCTB ;put back new port info
MVI A,'7' ;set 7 bit flag
JMP STFIVE1
STATE: MVI A,MODCTB ;get current port info
ORI 060H ;set eight bit
STA MODCTB ;put back new port info
MVI A,'8' ;set 8 bit flag
JMP STFIVE1
;
STON: MVI A,MODCTB ;get current port info
ANI 0F7H ;set parity on
STA MODCTB ;put back new port info
MVI A,YES
STON1: STA PARTEL ;set parity on flag
CALL CARRCK ;carrier present
RZ ;yep then continue
CALL TYPE ;position cursor
CALL PARSHOW ;nope then show parity info
RET
STOFF: MVI A,MODCTB ;get curent port info
ORI 008H ;set parity off
STA MODCTB ;put back new port info
MVI A,NO ;set no parity flag
JMP STON1
STODD: MVI A,MODCTB ;get current port info
ANI 07FH ;set parity odd
STA MODCTB ;put back new port info
MVI A,YES ;set parity odd flag
STODD1: STA PARTEL1
CALL CARRCK ;carrier present
RZ ;yep then return
CALL TYPE ;position cursor
CALL PARSHOW ;nope show parity info
RET
STEVE: MVI A,MODCTB ;get current port info
ORI 080H ;set even parity
STA MODCTB ;put back new port info
MVI A,NO ;set even parity flag
JMP STODD1
STONE: MVI A,MODCTB ;get current port info
ANI 0EFH ;set one stop bit
STA MODCTB ;put back new port info
MVI A,YES ;set one stop bit flag
STONE1: STA STTEL
CALL CARRCK ;carrier present
RZ ;yep then continue
CALL STSHOW ;nope show stop bit info
RET
STTWO: MVI A,MODCTB ;get current port info
ORI 010H ;set two stop bits
STA MODCTB ;put back new port info
MVI A,NO ;set two stop bit flag
JMP STONE1
;
PARSHOW: LXI D,PARMSG ;get parity message
MVI C,PRINT ;print it
CALL MEX
LXI D,PONMSG ;get set for parity on
MVI C,PRINT
LDA PARTEL ;get flag
CPI YES ;is it on
JZ PARSHOW1 ;yes then say so
LXI D,POFMSG ;no then get parity off message
MVI C,PRINT ;print it
CALL MEX
RET
PARSHOW1: CALL MEX
LXI D,ODDMSG ;get parity odd message
MVI C,PRINT
LDA PARTEL1 ;get odd parity flag
CPI YES ;is it odd
JNZ PARSHOW2 ;nope get even message
CALL MEX ;yes then say so
RET
PARSHOW2: LXI D,EVEMSG ;get even parity message
MVI C,PRINT
CALL MEX ;print it
RET
;
WLSHOW: LXI D,WLMSG ;get word length message
MVI C,PRINT
CALL MEX ;print it
LXI D,FIVEMSG ;load five bit message
MVI C,PRINT
LDA WLTEL ;get word length flag
CPI '5' ;is it five
JNZ SIX ;nope try six
CALL MEX ;yes then show it
RET
SIX: LXI D,SIXMSG ;load six bit message
MVI C,PRINT
CPI '6' ;is it six
JNZ SEV ;nope try seven
CALL MEX ;yep then show it
RET
SEV: LXI D,SEVMSG ;load seven bit message
MVI C,PRINT
CPI '7' ;is it seven
JNZ ATE ;nope try eight
CALL MEX ;yep then show it
RET
ATE: LXI D,ATEMSG ;load eight bit message
MVI C,PRINT
CALL MEX ;print it
RET
;
STSHOW: LXI D,STOPMSG ;get stop bit message
MVI C,PRINT ;print it
CALL MEX
LXI D,STOPMSG1 ;get stop bit 1 message
MVI C,PRINT
LDA STTEL ;is it 1 bit
CPI YES
JNZ STSHOW1 ;nope try two
CALL MEX ;yep then show it
RET
STSHOW1: LXI D,STOPMSG2 ;get stop bit 2 message
MVI C,PRINT
CALL MEX ;print it
RET
;
; Message area
;
BAUD: DB 0 ;300 baud
PARTEL: DB NO ;yes=parity, no=no parity
PARTEL1: DB YES ;yes=odd parity, no=even
WLTEL: DB '8' ;5=5 bits,6=6 bits, etc.
STTEL: DB YES ;yes=1 stop, no=2 stop
STOPMSG: DB 'Number of stop bits is $'
STOPMSG1: DB '1$'
STOPMSG2: DB '2$'
WLMSG: DB 'Word length is $'
FIVEMSG: DB '5 bits$'
SIXMSG: DB '6 bits$'
SEVMSG: DB '7 bits$'
ATEMSG: DB '8 bits$'
PARMSG: DB 'Parity is: $'
PONMSG: DB 'on and $'
POFMSG: DB 'off$'
ODDMSG: DB 'odd$'
EVEMSG: DB 'even$'
CLSMSG: DB CR,LF,1AH,'$'
EOSMSG: DB CR,LF,19H,'$'
SOMESG: DB 'TRS Mod 4 CP/M 2.2 overlay V'
DB REV/10+'0'
DB '.'
DB REV MOD 10+'2','$'
NOMESG: DB 'no $'
CARMSG: DB 'carrier present',CR,LF,'$'
ANSON: DB '*C*MAG@',125,'X',CR,0 ;turn on auto answer
ANSOFF: DB '*C',CR,0 ;turn off auto answer
ANSMSG: DB 'Modem answer mode now turned on. '
DB '[Use ^C to abort to CP/M]'
DB CR,LF,'$'
;
SMSEND: MVI C,SNDRDY
CALL MEX
JNZ SMSEND
MOV A,M
INX H
ORA A
RZ
MOV B,A
MVI C,SNDCHR
CALL MEX
JMP SMSEND
;
;----------------------------------------------------------------------
; NOTE: MUST TERMINATE PRIOR TO 0B00H (with Smartmodem or Anchor)
;----------------------------------------------------------------------
; End of TRS-80 MOD IV MEX modem overlay
END
r)
;-