;
; MCQXS798.ASM
;
; Patches for overlaying distribution version of MODEM798
;to work with EPSON QX-10 computer and DC Hayes Smartmodem 1200.
;
;You will want to look this file over carefully, there are a number
;of options that you can use to configure MODEM798 to suit your taste.
;
;After you have finished editing this file use DDT to overlay the HEX
;file onto MODEM798 and SAVE 64 MODEM798.COM.
;
;All users should set CLOCK to the right value for their system.
;
;PMMI users should set PUSERATE and CLDBOOT to their proper values.
;
;Non-PMMI, non-QX-10 users who want to get MODEM798 working quickly
;and who do not need to set their modem parameters using this program
;should change VERMSG, INIT, SETUP, CLEAR and PMMI to FALSE and
;change the equates for MODDATP, MODCTLP, MODSNDB, MODSNDR, MODRCVB
;and MODRCVR before assembly.
;
;
; TO USE: First edit this file filling in answers for your own
; equipment. Then assemble with ASM.COM or equivalent
; assembler. Then use DDT to overlay the the results
; of this program to the original MODEM798.COM file:
;
; A>DDT MODEM798.COM
; DDT VERS 2.2
; NEXT PC
; 4080 0100
; -IMCQXS798.HEX (note the "I" command)
; -R (loads in the .HEX file)
; NEXT PC
; 4080 0000
; -G0 (return to CP/M)
; A>SAVE 64 MODEM798.COM (now have modified .COM file)
;
;12/31/82 - Fixed "illegal FCB" bug when batch mode and smart-
; modem commands are used together. ;BRR
;
;12/27/82 - Added additional command-line baud rates. ;BRR
;
;12/26/82 - Modified to allow baud rate on SET command line ;BRR
; Also added smartmodem command logic.
;
;12/24/82 - Modified to work with version 7.97 of MODEM7 ;BRR
;
;12/20/82 - Modified to work with version 7.96 of MODEM7 ;B. RATOFF
;
;12/08/82 - Modified to work with version 7.95 of MODEM7 ;G. KANTOR
;
;11/26/82 - Modified to work with version 7.94 of MODEM7 ;PLK
;
;11/19/82 - Modified to work with version 7.92 of MODEM7 ;PLK
;
;11/02/82 - Modified to work with version 7.90 of MODEM7.
; Included "how to use" instructions at start of file. ;IMH
;
;10/20/82 - Modified to work with version 7.89 of MODEM7. ;IMH
;
;10/16/82 - Modified to work with version 7.71 of MODEM7. ;PLK
;
;10/15/82 - Fixed lack of ENDIF after IF VERMSG AND (NOT PMMI) ;PLK
;
;10/12/82 - Modified to give version message. ;PLK
;
;10/09/82 - Modified to work with version 7.70 of MODEM7. ;PLK
;
;10/04/82 - Fixed so can also be easily used for making optional
; changes with PMMI modem. ;PLK
;
;10/03/82 - First version of this file. ;PLK
;
TRUE EQU 0FFH
FALSE EQU 0
;
BELL EQU 07H ;bell
CR EQU 0DH ;carriage return
LF EQU 0AH ;linefeed
ESC EQU 1BH ;escape
;
VERMSG EQU true ;change to TRUE if you have given at
;location SYSVERMSG the name of the
;system for which MODEM7 has been
;configured.
;
INIT EQU TRUE ;change to TRUE if you have written a
;routine at location INITMOD in this
;file to initialize your modem port
;on MODEM7 execution. PMMI users should
;use FALSE here.
;
SETUP EQU TRUE ;change to TRUE if you have written a
;routine at location SETUPR to change
;baud rate, etc and MSPEED. PMMI users
;should use FALSE here.
;
EOSCLR EQU TRUE ;change to TRUE if you have defined the
;clear to end of screen sequence for
;your terminal. Clear to end of screen is
;used on returning from terminal mode to
;keep the screen from becoming jumbled if
;the remote can position your cursor.
;
SCRNCLR EQU true ;change to TRUE if you have defined the
;home cursor and clear screen sequence
;for you terminal.
PMMI EQU FALSE ;change to TRUE for PMMI.
;
IF NOT PMMI
;THE FOLLOWING MUST BE CHANGED FOR YOUR MICRO IF YOU DON'T HAVE AN EPSON
;QX-10 OR A PMMI MODEM BOARD.
MODDATP EQU 011H ;data port for QX-10
MODCTLP EQU MODDATP+2 ;modem status port for QX-10
MODSNDB EQU 04H ;bit to test for ready to send
MODSNDR EQU MODSNDB ;change to 0 if bit is 0 when
;ready to send
MODRCVB EQU 1 ;bit to test for received data
MODRCVR EQU MODRCVB ;change to 0 if bit is 0 when
;data received
ENDIF ;NOT PMMI
;
;CHANGE CLR1, CLR2, CLR3, AND CLR4 TO THE APPROPRIATE VALUES FOR
;YOUR TERMINAL IF YOU DO NOT HAVE AN EPSON QX-10 AND EOSCLR IS TRUE.
IF EOSCLR
CLR1 EQU 1BH ;QX-10 Zapple clear to end
CLR2 EQU 'Y' ;of screen sequence
CLR3 EQU 0 ;the unused bytes MUST be 0
CLR4 EQU 0
ENDIF ;EOSCLR
;
;CHANGE SCLR1, SCLR2, SCLR3, AND SCLR4 TO THE APPROPRIATE VALUES FOR
;YOUR TERMINAL IF YOU DO NOT HAVE AN EPSON QX-10 AND SCRNCLR IS TRUE.
IF SCRNCLR
SCLR1 EQU 1ah ;EPSON QX-10 home cursor
SCLR2 EQU 0 ;and clear screen sequence
SCLR3 EQU 0 ;the unused bytes MUST be 0
SCLR4 EQU 0
ENDIF ;SCRNCLR
;
;IF YOU HAVE A PMMI YOU MAY NEED TO CHANGE THE BASE ADDRESS.
;ALSO, CHANGE PORT NUMBER IN THE PMMI MESSAGE BELOW SYSVERMSG.
IF PMMI
PORT EQU 0C0H ;PMMI BASE ADDRESS
MODCTLP EQU PORT ;MODEM CONTROL PORT
MODDATP EQU PORT+1 ;MODEM DATA PORT
BAUDRP EQU PORT+2 ;BAUD RATE PORT
MODCTL2 EQU PORT+3 ;2ND MODEM CONTROL PORT
ENDIF ;PMMI
;
;
;CLOCK SHOULD BE CHANGED TO SUIT YOUR SYSTEM.
;PMMI USERS SHOULD ALSO CHANGE PULSERATE AND CLDBOOT AS NECESSARY.
;
;You can change locations 107H to 120H, and 123H to 125H
;to suit your taste.
;
;*** WARNING - DO NOT INSERT OR DELETE LINES BEFORE SYSVERMSG: ***
; THE DEFINED LOCATIONS ARE GIVEN ON THE RIGHT MARGIN.
;
;
ORG 100H
;
DS 3 ;(for JMP START)
PMMIBYTE: DB PMMI ;don't change this line 103H
SETUPTST: DB SETUP ;don't change this line 104H
SCRNTEST: DB SCRNCLR ;test for home cursor and clear screen 105H
;routine at CLRSCRN, don't change this
CLOCK: DB 4 ;clock rate in MHz, 8 MHz maximum 106H
BAKUPBYTE: DB TRUE ;true=make .BAK file 107H
CKSUMDFLT: DB TRUE ;true=default to Checksum checking 108H
;false=default to CRC checking
TOGGLECRC: DB TRUE ;true=allow toggling of Checksum to CRC 109H
CONVBKSP: DB FALSE ;true=convert backspace to rub 10AH
TOGGLEBK: DB TRUE ;true=allow toggling of bksp to rub 10BH
ADDLF: DB FALSE ;true=add LF after CR 10CH
TOGGLELF: DB TRUE ;true=allow toggling of LF after CR 10DH
TRANLOGON: DB TRUE ;true=allow transmission of logon 10EH
;write logon sequence at location LOGON
SAVCCP: DB TRUE ;true=do not overwrite CCP 10FH
LOCONEXTCHR: DB FALSE ;true=local command if EXTCHR precedes 110H
;false=not local command if EXTCHR precedes
TOGGLELOC: DB TRUE ;true=allow toggling of LOCONEXTCHR 111H
LSTTST: DB TRUE ;true=allow toggling of printer on/off 112H
;in terminal mode, set to false if your
;printer can't keep up with the modem
XOFFTST: DB true ;true=allow testing of XOFF from remote 113H
;while transmitting a file in terminal mode
XONWAIT: DB FALSE ;true=wait for XON after sending CR 114H
;while transmitting a file in terminal mode
TOGXOFF: DB TRUE ;true=allow toggling of XOFF testing 115H
MSPEED: DB 5 ;0=110 1=300 2=450 3=600 4=710 5=1200 116H
;6=2400 7=4800 8=9600
;default modem speed, PMMI routines
;reset this value and so should your own
;modem routines
BYTDLY: DB 0 ;0=0 delay, 1=0.02 sec, -- ,9=0.18 sec 117H
;default time to send character in
;terminal mode file transfer
CRDLY: DB 0 ;0=0 delay, 1=0.08 sec, -- ,9=0.72 sec 118H
;default time for extra wait after CR
;in terminal mode file transfer
BELRPT: DB 30 ;bell repeat time = value*0.03 sec 119H
EXITCHR: DB 'E'-40H ; ^E = Exit without disconnect 11AH
LOGCHR: DB 'O'-40H ; ^O = Send logon 11BH
LSTCHR: DB 'P'-40H ; ^P = Toggle printer 11CH
UNSAVE: DB 'W'-40H ; ^W = Close input text buffer 11DH
TRANCHR: DB 'T'-40H ; ^T = Transmit file to remote 11EH
SAVECHR: DB 'Y'-40H ; ^Y = Open input text buffer 11FH
EXTCHR: DB '^'-40H ; ^^ = Send next character 120H
;
;Equates used only by PMMI routines grouped together here.
PULSERATE: DB 125 ;125 for 20pps, 250 for 10pps on PMMI 121H
;not used if PMMI FALSE
CLDBOOT: DW 00000H ;currently set to warm boot with 122H
;BYE routine for PMMI, put your cold
;boot entry here if you have one and
;desire to do on BYE
BRKCHR: DB '@'-40H ; ^@ = Transmit "BREAK" with PMMI 124H
CHGBAUD: DB 'B'-40H ; ^B = Used with PMMI in terminal 125H
; mode to change baud rate on fly
DISCCHR: DB 'D'-40H ; ^D = PMMI Disconnect 126H
;
IN$MODCTLP: IN MODCTLP ! RET ;in modem control port 127H
OUT$MODDATP: OUT MODDATP ! RET ;out modem data port 12AH
IN$MODDATP: IN MODDATP ! RET ;in modem data port 12DH
;
IF NOT PMMI
ANI$MODSNDB: ANI MODSNDB ! RET ;bit to test for send ready 130H
CPI$MODSNDR: CPI MODSNDR ! RET ;value of send bit when ready 133H
ANI$MODRCVB: ANI MODRCVB ! RET ;bit to test for receive ready 136H
CPI$MODRCVR: CPI MODRCVR ! RET ;value of rcv. bit when ready 139H
DS 15 ;PMMI only calls 13CH
LOGONPTR: DW LOGON ; 14BH
JMP$INITMOD: JMP INITMOD ;go to user written routine 14DH
ENDIF ;NOT PMMI
;
IF PMMI
DS 12 ;not changed 130H
IN$BAUDRP: IN BAUDRP ! RET ;in baudrate port 13CH
OUT$BAUDRP: OUT BAUDRP ! RET ;out baudrate port 13FH
OUT$MODCTL2: OUT MODCTL2 ! RET ;out modem control port #2 142H
OUT$MODCTLP: OUT MODCTLP ;out modem control port 145H
DS 9 ;not changed 147H
ENDIF ;PMMI
;
JMP$SETUPR: ; 150H
;
IF SETUP
JMP SETUPR
ENDIF ;SETUP
;
IF NOT SETUP
RET
NOP
NOP
ENDIF ;NOT SETUP
;
CLREOS: CALL JMP$ILPRT ; 153H
;
IF EOSCLR
DB CLR1,CLR2,CLR3,CLR4,0
ENDIF ;EOSCLR
;
IF NOT EOSCLR
DB 0,0,0,0,0
ENDIF ;NOT EOSCLR
;
RET
;
CLRSCRN: CALL JMP$ILPRT ; 15CH
;
IF SCRNCLR
DB SCLR1,SCLR2,SCLR3,SCLR4,0
ENDIF ;SCRNCLR
;
IF NOT SCRNCLR
DB 0,0,0,0,0
ENDIF ;NOT SCRNCLR
;
RET
;
JMP$ILPRT: DS 3 ; 165H
JMP$ILCOMP: DS 3 ; 168H
JMP$INBUFF: DS 3 ; 16BH
JMP$SYSVERMSG:
IF PMMI
DS 3 ; 16EH
ELSE
JMP SYSVERMSG ; 16EH
ENDIF
JMP$DIALPL: DS 3 ; 171H
JMP$DISCONNT: DS 3 ; 174H
;
SYSVERMSG: ; 16EH
;
IF (NOT VERMSG) AND (NOT PMMI)
CALL JMP$ILPRT
DB 'Version for: UNSPECIFIED SYSTEM',CR,LF,0
;NOTE: 0 MUST BE AT END OF ALL ILPRT MESSAGES
RET
ENDIF ;NOT VERMSG AND NOT PMMI
;
;This is where the message goes giving the system for
;which MODEM7 has been customized.
IF VERMSG AND (NOT PMMI)
LXI D,0CCCCH ;Take opportunity to force
MVI C,12 ;TPM into CP/M 2.2 compatibility mode
CALL 5
CALL SETMSPEED ;Adjust MSPEED for QX-10 CMOS value
CALL JMP$ILPRT
DB 'Version for: EPSON QX-10 and Hayes Smartmodem 1200',CR,LF,0
RET
ENDIF ;VERMSG AND NOT PMMI
;
;
IF NOT PMMI
;INSERT YOUR LOGON HERE, MUST END IN 0.
;FOR A LOGON, PMMI USERS MUST MODIFY MODEM798.ASM
LOGON:
DB '+++' ; ATTENTION STRING FOR SMARTMODEM
DB 0
ENDIF ;NOT PMMI
;
IF (NOT INIT) AND (NOT PMMI)
INITMOD:
RET
ENDIF ;NOT INIT AND NOT PMMI
;
;*** WARNING - IF YOU MAKE INITMOD AND SETUPR TOO LONG YOU MAY ***
;*** GO BEYOND THE LENGTH OF THE PMMI INITMOD ROUTINE. ***
;*** YOU CAN MODIFY UP TO THE BYTE BEFORE NUMBLIB: ***
;*** NUMBLIB CURRENTLY IS AT 617H. ***
;*** IF YOU NEED MORE SPACE USE AN APPROPRIATE DS BEFORE NUMBLIB: ***
;
TPORTS EQU 7 ; TIMER SETUP PORT
TPORTC EQU 6 ; TIMER COUNTER PORT
;
CRAM EQU 35 ; CMOS RAM BAUD RATE STORAGE
MOSADR EQU 3DH ; CMOS RAM ADDRESS PORT
MOSDAT EQU 3CH ; CMOS RAM DATA PORT
;
DSBCD MACRO
DB 0EDH,52H
ENDM
;
;
; MAKE MODEM'S SPEED FLAG MATCH QX-10'S
SETMSPEED:
MVI A,CRAM
OUT MOSADR
IN MOSDAT
ANI 0FH
LXI H,MSPDTBL
ADD L
MOV L,A
JNC SETMSPD2
INR H
SETMSPD2:
MOV A,M
STA MSPEED
RET
;
;
; THIS TABLE GIVES MSPEED VALUES FOR QX-10 CMOS BAUD RATE VALUES
; NOTE THAT LOWER RATES DO NOT MATCH AND APPROXIMATIONS ARE USED
MSPDTBL:
DB 0,0,0,1,3,5,6,7,8
;
; THIS TABLE GIVES THE TIMER CHIP DIVISORS FOR EACH BAUD RATE
CSPDTBL:
DW 110,1135 ; 0
DW 135,924 ; 1
DW 150,832 ; 2
DW 300,416 ; 3
DW 600,208 ; 4
DW 1200,104 ; 5
DW 2400,52 ; 6
DW 4800,26 ; 7
DW 9600,13 ; 8
;
;
;
;The following routine changes the baud rate for the QX-10 from
;the MENU. Write your own routine here to change your modem
;parameters from the menu.
;
;
IF SETUP OR INIT
;
SETUPR:
LDAX D ;Look at passed-in byte count
CPI 5 ;Enuf for possible baud rate?
JC AGAIN ;No, prompt for one
MOV B,A ;Save byte count
INX D ;Point to first byte
CALL NXTARG ;Skip to next argument
MOV A,B
JNC SETUP1
AGAIN: CALL JMP$ILPRT
DB 'Input Baud Rate: ',0
LXI D,KEYBUF
CALL JMP$INBUFF ;read baud rate from console
LXI D,KEYBUF+1
LDAX D
INX D
SETUP1:
MOV L,A ;Force null at end of buffer
MVI H,0
DAD D
MVI M,0
LXI H,0
GDLUP:
LDAX D
ORA A
JZ GDONE
SUI '0'
JC BADRATE
CPI 10
JNC BADRATE
MOV B,H
MOV C,L
DAD H
DAD H
DAD B
DAD H
MVI B,0
MOV C,A
DAD B
INX D
JMP GDLUP
BADRATE:
CALL JMP$ILPRT
DB CR,LF,'++ Invalid baud rate -- try again ++',CR,LF,0
JMP AGAIN
GDONE:
MOV A,H
ORA L
JZ QUIT
;
; ENTER HERE WITH BAUD RATE IN HL TO SET BAUD RATE FROM INITMOD
;
FINDRATE:
PUSH H
LXI H,CSPDTBL
SHLD TBLADR
POP H
LXI B,900H
CLP:
PUSH H
LHLD TBLADR
MOV E,M
INX H
MOV D,M
INX H
XTHL
XCHG
ORA A
DSBCD
XCHG
XTHL
JZ DOIT
INX H
INX H
SHLD TBLADR
POP H
INR C
DCR B
JNZ CLP
JMP BADRATE
;
DOIT:
POP D
MVI A,0B6H
OUT TPORTS
MOV A,M
INX H
OUT TPORTC
MOV A,M
OUT TPORTC
CALL IN$MODDATP
CALL IN$MODDATP
MVI A,CRAM
OUT MOSADR
MOV A,C
OUT MOSDAT
QUIT:
JMP SETMSPEED
;
NXTARG:
CALL SCNTOB
RC
SCNNB:
LDAX D
CPI ' '
RNZ
INX D
DCR B
JNZ SCNNB
STC
RET
;
SCNTOB:
LDAX D
CPI ' '
RZ
RC
INX D
DCR B
JNZ SCNTOB
STC
RET
;
;
TBLADR: DW 0
;
KEYBUF DB 5,0,0,0,0,0,0,0
;
ENDIF ;SETUP OR INIT
;
;
IF INIT
INITMOD:
LDAX D ; GET COMMAND BYTE COUNT
MOV B,A
INX D
MOV L,A
MVI H,0 ; FORCE CR AT END OF BUFFER
DAD D
MVI M,0DH
;
PUSH D
PUSH B
LXI D,5CH+9 ; LOOK AT FIRST FILETYPE
CALL JMP$ILCOMP ; CHECK FOR VALID BAUD RATE
DB '110',0
LXI H,110
JNC GOTRATE
CALL JMP$ILCOMP
DB '300',0
LXI H,300
JNC GOTRATE
CALL JMP$ILCOMP
DB '600',0
LXI H,600
JNC GOTRATE
CALL JMP$ILCOMP
DB '120',0
LXI H,1200
JNC GOTRATE
CALL JMP$ILCOMP
DB '240',0
LXI H,2400
JNC GOTRATE
CALL JMP$ILCOMP
DB '480',0
LXI H,4800
JNC GOTRATE
CALL JMP$ILCOMP
DB '960',0
LXI H,9600
JC NORATE
GOTRATE:
CALL FINDRATE
NORATE:
POP B ; RESTORE COMMAND LINE BYTE COUNT
POP D ; RESTORE COMMAND LINE TEXT POINTER
SCNBSL:
LDAX D ; LOOK AT FIRST CHAR OF ARG
CPI '\' ; BACKSLASH?
JZ GOTBSL
CALL NXTARG
JNC SCNBSL
RET
GOTBSL:
MVI A,0DH ; MAKE STUFF AFTER \ DISAPPEAR
STAX D ; SO MFACCESS ISN'T CONFUSED
INX D
LXI H,6CH+1 ; POINT TO 2ND FCB
MOV A,M
CPI '\' ; DID WE WIND IN 2ND FILENAME?
JNZ BSLOK ; NO, SKIP AHEAD
DCX H
MVI M,0 ; ZAP DRIVE OF 2ND FCB
MVI B,11
ZFL1:
INX H
MVI M,' '
DCR B
JNZ ZFL1
MVI B,4
ZFL2:
INX H
MVI M,0
DCR B
JNZ ZFL2
BSLOK:
CALL MIN ; EMPTY GARBAGE CHARS FROM MODEM
JNC BSLOK ; LOOP TILL TIMEOUT
LXI H,ATS ; SEND INITIAL STRING TO MODEM
CALL SEND
CALL GET ; LOOK FOR REPLY
TIM:
JC TIMOT ; WE MIGHT HAVE TIMED OUT
JNZ ERR
LXI H,AT ; GET ATTENTION STRING
CALL SEND ; SEND IT
XCHG ; NOW SEND OUR COMMAND
CALL SEND
MVI C,CR ; END IT WITH RETURN
CALL PUT
CALL MIN ; READ THE ECHOED CR
CALL GETX ; GET RESULT (NO TIMEOUT)
JNZ ERR
CPI '1' ; ON LINE?
JZ ONLIN
CPI '5' ; ON LINE 1200?
JZ ONLIN
CPI '0' ; OTHER NORMAL RESULT?
RZ ; YUP, QUIT
PUSH PSW ; SAVE STATUS
LXI H,ATV1
CALL SEND ; RESTORE VERBOSE MODE
POP PSW
CPI '3'
JZ CAR ; NO CARRIER ?
CPI '4'
JZ BAD ; BAD COMMAND?
ERR:
CALL JMP$ILPRT
DB CR,LF,'Bad response from DC Hayes.',0
RET
GET:
CALL MIN ; READ WITH TIMEOUT
RC
MOV C,A ; SAVE CHAR
CALL MIN
RC
CPI CR ; 2ND SHOULD BE CR
MOV A,C
RET
GETX:
CALL MINX ; READ W/O TIMEOUT FOR RESULT
MOV C,A ; COULD TAKE A WHILE FOR DIALING, ETC.
CALL MINX ; GET FOLLOWING CR
CPI CR
MOV A,C
RET
MINX:
CALL MRCVRDY ; CHECK FOR A CHAR
JZ MXGOT ; JUMP IF WE GOT ONE
PUSH B
PUSH D
PUSH H
MVI C,11 ; DO ABORT CHECK
CALL 5
ORA A
JZ NO ; SKIP IF NO KEY STRUCK
MVI C,1
CALL 5 ; GOT KEY -- EAT IT
CALL PUT ; SEND IT TO MODEM (WILL CAUSE ABORT)
NO:
POP H
POP D
POP B
JMP MINX
GOT:
POP D
MXGOT:
CALL IN$MODDATP
ANI 7FH
RET
MIN:
PUSH D
LXI D,16000 ;SET A TIMEOUT
WTST:
CALL MRCVRDY ;CHECK FOR READY
JZ GOT ;EXIT WITH CHARACTER
DCX D
MOV A,D ;COUNT DOWN TIMEOUT
ORA E
JNZ WTST
STC
POP D ;QUIT WITH TIMEOUT
RET
;
MRCVRDY: ; TEST FOR MODEM RECEIVE READY
CALL IN$MODCTLP
CALL ANI$MODRCVB
CALL CPI$MODRCVR
RET
;
SEND:
MOV A,M ;GET A CHARACTER
INX H
ORA A ;END OF THE STRING?
RZ
CPI 0DH
RZ
ANI 7FH
MOV C,A ;NO, SEND IT
CALL PUT
CALL MIN ;EAT
ECHO
JNC SEND
POP H ;DITCH RETURN
JMP TIMOT ;GO COMPLAIN
PUT:
CALL IN$MODCTLP ;GET MODEM STATUS
CALL ANI$MODSNDB ;TEST SEND BITS
CALL CPI$MODSNDR
JNZ PUT
MOV A,C
JMP OUT$MODDATP
;
TIMOT:
CALL JMP$ILPRT
DB CR,LF,'No response from DC Hayes.',0
RET
ONLIN:
CALL JMP$ILPRT
DB CR,LF,'On line.',0
RET
CAR:
CALL JMP$ILPRT
DB CR,LF,'No carrier detected.',0
RET
BAD:
CALL JMP$ILPRT
DB CR,LF,'Bad command.',0
RET
;
AT:
DB 'AT ',0
ATV1:
DB 'AT V1',CR+80H,0
ATS:
DB 'AT S10=30 V0 X1 ',CR+80H,0
;
ENDIF ;INIT
;
END