home *** CD-ROM | disk | FTP | other *** search
- ; MXO-R210.ASM -- TRS-80 MODEL II OVERLAY FILE FOR MEX10. 05/25/84
- ;
- ; YOU WILL WANT TO LOOK THIS FILE OVER CAREFULLY. THERE ARE A NUMBER OF
- ; OPTIONS THAT YOU CAN USE TO CONFIGURE THE PROGRAM TO SUIT YOUR TASTE.
- ; THIS FILE ADAPTS THE TRS-80 MODEL II/12/16.
- ; COMPUTERS TO MEX10.
- ;
- ;
- ; EDIT THIS FILE FOR YOUR PREFERENCES THEN FOLLOW THE "TO USE:" EXAMPLE
- ; SHOWN BELOW.
- ;
- ; USE THE "SET" COMMAND TO CHANGE THE BAUDRATE WHEN DESIRED. IT STARTS
- ; OUT AT THE BAUD RATE THAT WAS LAST SET BY CP/M OR THIS PROGRAM.
- ;
- ;
- ; TO USE: FIRST EDIT THIS FILE FILLING IN ANSWERS FOR YOUR OWN
- ; EQUIPMENT. THEN ASSEMBLE WITH ASM.COM OR EQUIVALENT
- ; ASSEMBLER. THEN USE MLOAD TO OVERLAY THE THE RESULTS
- ; OF THIS PROGRAM TO THE ORIGINAL .COM FILE.
- ;
- ; = = = = = = = = = = = = = = = = = =
- ; 05/25/84 - MEXIFIED THE OVERLAY. - BIFF BUEFFEL
- ; 11/11/83 - RENAMED TO M7R2-1.ASM, NO CHANGES - IRV HOFF
- ; 09/18/83 - MODIFIED M712XE.ASM FOR
- ; TRS-80 MODEL II AND PICKLES
- ; & TROUT CP/M (SHOULD ALSO
- ; WORK ON MODS 12 AND 16) - JOSEPH KATZ
- ; 03/20/84 - MODIFIED OVERLAY TO WORK WITH ANY CP/M
- ; AVAILABLE FOR MODS 2/12/16 - LARRY WINKLER
- ;
- ; 10/17/84 - MODIFIED OVERLAY SO THAT THE 'DTR' WOULD STAY ON
- ; BOB WILLIAMS
- ; = = = = = = = = = = = = = = = = = =
- ;
- BELL: EQU 07H ;BELL
- CR: EQU 0DH ;CARRIAGE RETURN
- ESC: EQU 1BH ;ESCAPE
- LF: EQU 0AH ;LINEFEED
- ;
- YES: EQU 0FFH
- NO: EQU 0
- ;
- ; MEX service processor stuff
- ;
- MEX EQU 0D00H ;address of the service processor
- INMDM EQU 255 ;get char from port to A, CY=no more in 100 ms
- TIMER EQU 254 ;delay 100ms * 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 a character to the modem (after sndrdy)
- RCVCHR EQU 248 ;recv a char from modem (after rcvrdy)
- LOOKUP EQU 247 ;table search: see CMDTBL comments 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
- ;
- PRINT EQU 9 ;MEX/BDOS print-string function call
-
- ;
- PORT: EQU 0F4H ;TRS-80 II SERIAL OUTPUT PORT A
- MODCTL1: EQU PORT+2 ;MODEM CONTROL PORT
- MODDATP: EQU PORT ;MODEM DATA PORT
- MODCTL2: EQU PORT+2 ;MODEM STATUS PORT
- MODRCVB: EQU 01H ;BIT TO TEST FOR RECEIVE
- MODRCVR: EQU 01H ;VALUE WHEN RECEIVE READY
- MODSNDB: EQU 04H ;BIT TO TEST FOR SEND
- MODSNDR: EQU 04H ;VALUE WHEN SEND READY
- ;
- ;
- ORG 100H
- ;
- ;
- ; CHANGE THE CLOCK SPEED TO SUIT YOUR SYSTEM
- ;
- DS 3 ;(FOR "JMP START" INSTRUCTION)
- ;
- DB NO ;YES=PMMI S-100 MODEM 103H
- DB NO ;YES=HAYES SMARTMODEM, NO=NON-PMMI 104H
- TOUCHPULSE: DB 'T' ;T=TOUCH, P=PULSE (SMARTMODEM-ONLY) 105H
- CLOCK: DB 40 ;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 0 ;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 0 ;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
- NOOFCOL: DB 5 ;NUMBER OF DIR COLUMNS SHOWN 10AH
- SETUPTST: DB YES ;YES=USER-ADDED SETUP ROUTINE 10BH
- SCRNTEST: DB YES ;CURSOR CONTROL ROUTINE 10CH
- ACKNAK: DB YES ;YES=RESEND A RECORD AFTER ANY NON-ACK 10DH
- ;NO=RESEND A RECORD AFTER A VALID NAK
- BAKUPBYTE: DB YES ;YES=CHANGE ANY FILE SAME NAME TO .BAK 10EH
- CRCDFLT: DB YES ;YES=DEFAULT TO CRC CHECKING 10FH
- TOGGLECRC: DB YES ;YES=ALLOW TOGGLING OF CRC TO CHECKSUM 110H
- CONVBKSP: DB NO ;YES=CONVERT BACKSPACE TO RUB 111H
- TOGGLEBK: 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)
- TOGGLELF: DB YES ;YES=ALLOW TOGGLING OF LF AFTER CR 114H
- TRANLOGON: DB NO ;YES=ALLOW TRANSMISSION OF LOGON 115H
- ;WRITE LOGON SEQUENCE AT LOCATION LOGON
- SAVCCP: DB YES ;YES=DO NOT OVERWRITE CCP 116H
- LOCONEXTCHR: DB NO ;YES=LOCAL COMMAND IF EXTCHR PRECEDES 117H
- ;NO=EXTERNAL COMMAND IF EXTCHR PRECEDES
- TOGGLELOC: DB YES ;YES=ALLOW TOGGLING OF LOCONEXTCHR 118H
- LSTTST: DB YES ;YES=PRINTER AVAILABLE ON PRINTER PORT 119H
- XOFFTST: DB NO ;YES=CHECK FOR XOFF FROM REMOTE WHILE 11AH
- ;SENDING A FILE IN TERMINAL MODE
- XONWAIT: DB NO ;YES=WAIT FOR XON AFTER CR WHILE 11BH
- ;SENDING A FILE IN TERMINAL MODE
- TOGXOFF: DB YES ;YES=ALLOW TOGGLING OF XOFF CHECKING 11CH
- IGNORCTL: 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 '@'-40H ;^@ = SEND A 300 MS. BREAK TONE 120H
- NOCONNCT: 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
- UNSAVE: 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 ; 128H
- IN$MODCTL1: MVI A,10H ;CHANNEL 0, RESET INTERRUPTS 12AH
- OUT MODCTL1
- IN MODCTL1 ;GET THE STATUS BITS
- RET
- DS 3
- ;
- OUT$MODDATP: OUT MODDATP ! RET ;OUT MODEM DATA PORT 134H
- DS 7
- IN$MODDATP: IN MODDATP ! RET ;IN MODEM DATA PORT 13EH
- DS 7
- ANI$MODRCVB: ANI MODRCVB ! RET ;BIT TO TEST FOR RECEIVE READY 148H
- CPI$MODRCVR: CPI MODRCVR ! RET ;VALUE OF RECEIVE BIT WHEN RDY 14BH
- ANI$MODSNDB: ANI MODSNDB ! RET ;BIT TO TEST FOR SEND READY 14EH
- CPI$MODSNDR: CPI MODSNDR ! RET ;VALUE OF SEND BIT WHEN READY 151H
- DS 6 ; 154H
- OUT$MODCTL1: OUT MODCTL1 ! RET ;OUT MODEM CONTROL PORT 15AH
- OUT$MODCTL2: OUT MODCTL2 ! RET ;OUT MODEM STATUS PORT 15DH
- ;
- ;
- DS 2 ;NOT USED BY MEX 160H
- DS 6 ; 162H
- JMP$GOODBYE: JMP GOODBYE ; 168H
- JMP$INITMOD: JMP INITMOD ;GO TO USER WRITTEN ROUTINE 16BH
- JMP$NEWBAUD JMP NEWBAUD ;CHANGE BAUDRATE 16EH
- RET ! NOP ! NOP ;(BY-PASSES PMMI ROUTINE) 171H
- RET ! NOP ! NOP ;(BY-PASSES PMMI ROUTINE) 174H
- JMP$SETUPR: JMP SETUPR ; 177H
- DS 3 ; 17AH
- JMP$SYSVER: JMP SYSVER ; 17DH
- JMP$BREAK: JMP SENDBRK ; 180H
- ;
- ;
- ; DO NOT CHANGE THE FOLLOWING SIX LINES.
- ;
- JMP$ILPRT: DS 3 ; 183H
- JMP$INBUF DS 3 ; 186H
- JMP$INLNCOMP: DS 3 ; 189H
- JMP$INMODEM DS 3 ; 18CH
- JMP$NXTSCRN: DS 3 ; 18FH
- JMP$TIMER: DS 3 ; 192H
- ;
- ;
- ; CLEAR SEQUENCES -- CLREOS IS CLEAR TO END OF SCREEN, CLRSCRN IS CLEAR
- ; ENTIRE SCREEN.
- ;
- ;
- CLREOS: LXI D,EOSMSG
- MVI C,PRINT
- CALL MEX
- RET
- ;
- CLRSCRN: LXI D,CLSMSG
- MVI C,PRINT
- CALL MEX
- RET
- ;
- SYSVER: MVI C,ILP ; 1A7H
- CALL MEX
- DB 'TRS-80 VERSION (FOR SERIAL PORT A)',CR,LF
- DB CR,LF,0
- RET
- ;
- ;
- ; THIS ROUTINE ALLOWS A 300 MS. BREAK TONE TO BE SENT TO RESET SOME
- ; TIME-SHAR COMPUTERS.
- ;
- SENDBRK: MVI A,5
- OUT MODCTL1
- MVI A,0F8H ;SEND A BREAK TONE
- JMP GOODBYE1
- ;.....
- ;
- ;
- ; THIS ROUTINE SENDS A 300 MS. BREAK TONE AND SETS DTR LOW FOR THE SAME
- ; LENGTH OF TIME TO DISCONNECT SOME MODEMS SUCH AS THE BELL 212A, ETC.
- ;
- GOODBYE: MVI A,5
- OUT MODCTL1 ;SEND TO THE STATUS PORT
- MVI A,68H ;TURN OFF DTR
- ;
- GOODBYE1: OUT MODCTL1
- MVI B,3 ;WAIT FOR 300 MS.
- MVI C,TIMER
- CALL MEX
- MVI A,5
- OUT MODCTL1
- MVI A,0E8H ;RESTORE TO NORMAL, 8 BITS, DTR ON, ETC.
- OUT MODCTL1
- RET
- ;.....
- ;
- ;
- ; TRS-80 II INITIALIZATION -- SETS CTC TIMER F0H FOR SEND AND RECEIVE
- ; BAUDRATE.
- ;
- ;
- INITMOD1: MVI A,1 ;DEFAULT TRANSFER TIME TO 300 BAUD
- STA MSPEED
- CPI 6
- JNC G2400
- MVI A,07H ;USED IF <2400 BAUD
- JMP DOIT
- G2400: MVI A,47H ;IF >= 2400 BAUD
- DOIT: OUT 0F0H ;SEND TO 'CTC' TIMER
- OUT 0F1H
- ;
- INITMOD2: MVI A,34H ;INITIALIZE TO 300 BAUD
- OUT 0F0H
- OUT 0F1H
- ;.....
- INITMOD: MVI A,18H ;THROW OUT OF MODE
- OUT MODCTL1
- MVI A,04H ;SELECT REGISTER
- OUT MODCTL1
- MVI A,44H ;SET ASCII PARAMETERS
- OUT MODCTL1
- MVI A,01H
- OUT MODCTL1
- MVI A,00H
- OUT MODCTL1
- MVI A,03H ;SELECT REG.
- OUT MODCTL1
- MVI A,0C1H ;ENABLE RECEIVE
- OUT MODCTL1
- MVI A,05H ;SELECT REG.
- OUT MODCTL1
- ; MVI A,068H ;COMMENTED OUT BY BOB WILLIAMS
- ; NEXT LINE ADDED WAS DROPPING 'DTR'
- MVI A,0E8H ;ENABLE SEND, 'DTR', 'RTS'
- OUT MODCTL1
- RET
- ;
- ;
- ; SETUP ROUTINE TO ALLOW CHANGING MODEM SPEED WITH THE SET COMMAND.
- ;
- ;
- SETUPR: MVI C,SBLANK ;Any arguments?
- CALL MEX
- JC TELL ;If not, go display baud
- LXI D,CMDTBL
- MVI C,LOOKUP
- CALL MEX ;Parse argument
- PUSH H ;Save any parsed argument addrs on stack
- RNC ;If we have one, return to it
- POP H ;Oops, input not found in table
- MVI C,ILP
- CALL MEX ;Tell user input not valid
- DB CR,LF,'Only 300 or 1200 allowed on SET command',CR,LF,0
- RET
- ;
- CMDTBL: DB '30','0'+80H
- DW OK300
- DB '120','0'+80H
- DW OK1200
- DB 0
- ;
- TELL: MVI C,ILP
- CALL MEX ;Print current baud rate
- DB CR,LF,'Baud rate is now: ',0
- LDA MSPEED
- MVI C,PRBAUD
- CALL MEX
- RET
- ;
- ;
- OK110: MVI A,0
- LHLD BD110
- JMP LOADBD
- ;
- OK300: MVI A,1
- LHLD BD300
- JMP LOADBD
- ;
- OK600: MVI A,3
- LHLD BD600
- JMP LOADBD
- ;
- OK1200: MVI A,5
- LHLD BD1200
- JMP LOADBD
- ;
- OK2400: MVI A,6
- LHLD BD2400
- JMP LOADBD
- ;
- OK4800: MVI A,7
- LHLD BD4800
- JMP LOADBD
- ;
- OK9600: MVI A,8
- LHLD BD9600
- ;
- LOADBD: STA INITMOD1+1 ;CHANGE TIME-TO-SEND TO MATCH BAUDRATE
- MOV A,L ;GET BAUDRATE BYTE
- STA INITMOD2+1 ;SEND TO 'CTC' TIMER FOR NEW BAUDRATE
- JMP INITMOD1 ;REINITIALIZE TO NEW BAUDRATE, THEN DONE
- ;
- ;
- NEWBAUD: CPI 1
- JZ OK300
- CPI 5
- JZ OK1200
- RET
- ;
- ;
- ; TABLE OF BAUDRATE PARAMETERS
- ;
- BD110: DW 008EH ; THESE USE THE 07H COMMAND FIRST TO CTC
- BD300: DW 0034H
- BD600: DW 001AH
- BD1200: DW 000DH
- ;--------------------------------------------------------------------
- BD2400: DW 0034H ; THESE USE THE 47H COMMAND FIRST TO CTC
- BD4800: DW 001AH
- BD9600: DW 000DH
- ;
- BAUDBUF: DB 10,0
- DS 10
- ;
- EOSMSG: DB 0CH,0,0,0,'$'
- CLSMSG: DB 0CH,0,0,0,'$' ;1AH IF NOT P&T
- ;
- ; NOTE: MUST TERMINATE PRIOR TO 0B00H (WITH SMARTMODEM)
- ; 0D00H (WITHOUT SMARTMODEM)
- ;
- END
- ;
- ;1AH IF NOT P&T
- ;
- ; NOTE: MUST TERMINATE PRIOR TO 0B00H (WITH SMARTMODEM)
- ; 0D00H (WITHOUT SMA