; MXH-EP14.Z80 -- Epson QX-10 overlay file for MEX+ 10/15/86 ; ; This overlay will allow the user to have a loadable MEX+ remote ; system via the "LOAD REMOTE" command. This overlay was modified to ; default to 1200 baud, if you need 300 baud you must changed it. ; you will find this in "MSPEED", part of user setup options. ; This overlay has been modified to allow a baudrate "19200" if needed ; for hardwired transfers. ; ; This overlay will assemble with the public domain ZASM Z80 assembler. ; ; Syntax: ZASM MXH-EP14.BBZ HEX assuming the source is on drive B: ; ; Updated / Upgraded 10/15/86 -- Mel Berg / Kent Mason (Rev. 1.0) ; Z-NODE # 58, Oklahoma City, Okla. 1-405-943-8638 (board number). ; ; Updated to incorporate MEXNEWS.001,001,003 06/13/84 (Rev. JLB-2) ; ; This overlay is used to adapt the MEX+.COM program to the Epson ; QX-10 computer using an external Hayes Smartmodem (tm) or compatible ; modem attached to the QX-10's serial port. It will NOT work with ; the internal Comrex Communicator modems. AND will not work with plain ; MEX, Must be MEX+. ; ; For this overlay to work properly, the DIP switches behind ; the front panel on the Hayes should be set as follows: ; ; Switch: ; #1 #2 #3 #4 #5 #6 #7 #8 ; UP UP DN UP DN UP DN DN ; ; It is especially important that Switch #1 be set UP to enable ; disconnect by DTR. In general, these switch settings are ; compatible with Valdocs usage. ; ; 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 QX-10 computer to the modem program. ; ; 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 1200 baud when the program is first called up, this can be change. ; Also, this revision has been set to start out in the CHECKSUM mode ; to be compatible with TBBS, some RBBS, and other older BBS software ; which does not support the CRC mode. If you desire the CRC mode ; default, simply change the CRCDFLT to TRUE below and reassemble, ; or, within MEX, use the STAT command to set CRC ON and CLONE your ; copy of MEX. ; ; ; 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. ; ; = = = = = = = = = = = = = = = = = = ; 11/03/86 - Added 19200 baud, converted to Z80 - Mel Berg ; 10/25/86 - Converted for MEX+ "loadable" - Mel Berg ; 06/13/84 - Customized Biff Bueffel's overlay - Jim Bewley ; 05/24/84 - MEXified the overlay - Biff Bueffel ; 11/11/83 - Renamed to M7EP-1.ASM, no changes - Irv Hoff ; 08/27/83 - Revised to work with MDM712 - Irv Hoff ; 07/25/83 - Changed M710XE.ASM forEpson QX-10 - Phil Becker ; ; = = = = = = = = = = = = = = = = = ; BELL EQU 07H ; Bell CR EQU 0DH ; Carriage return ESC EQU 1BH ; Escape LF EQU 0AH ; Linefeed CLS EQU 1AH ; Clear screen ; 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 11H ; Epson QX-10 serial output port MODCTL1 EQU PORT+2 ; Modem control port MODDATP EQU PORT ; Modem data port MODCTL2 EQU PORT+2 ; Modem control port MODRCVB EQU 01H ; Your bit to test for receive MODRCVR EQU 01H ; Your value when receive ready MODSNDB EQU 04H ; Your bit to test for send MODSNDR EQU 04H ; Your value when send ready ; ; ORG 100H ; ; ; Change the clock speed as needed for your system. ; DEFB 0C3H DEFS 2 ; PMMIMODEM: DEFB NO ; Yes=PMMI S-100 Modem 103H SMARTMODEM: DEFB YES ; Yes=HAYES Smartmodem, no=non-PMMI 104H TOUCHPULSE: DEFB 'T' ; T=touch, P=pulse (Smartmodem-only) 105H CLOCK: DEFB 40 ; Clock speed in MHz x10, 25.5 MHz max. 106H ; 20=2 MHh, 37=3.68 MHz, 40=4 MHz, etc. MSPEED: DEFB 5 ; 0=110 1=300 2=450 3=600 4=710 5=1200 107H ; 6=2400 7=4800 8=9600 9=19200 default BYTDLY: DEFB 5 ; 0=0 delay 1=10ms 5=50ms - 9=90ms 108H ; Default time to send character in term- ; Inal mode file transfer for slow BBS. CRDLY: DEFB 5 ; 0=0 delay 1=100ms 5=500ms - 9=900ms 109H ; Default time for extra wait after CRLF ; In terminal mode file transfer NOOFCOL:DEFB 5 ; Number of DIR columns shown 10AH SETUPTST: DEFB YES ; Yes=user-added Setup routine 10BH SCRNTEST: DEFB YES ; Cursor control routine 10CH ACKNAK: DEFB YES ; Yes=resend a record after any non-ACK 10DH ; No=resend a record after a valid NAK BAKUPBYTE: DEFB NO ; Yes=change any file same name to .BAK 10EH CRCDFLT:DEFB NO ; No=default to CHECKSUM checking 10FH TOGGLECRC: DEFB YES ; Yes=allow toggling of CRC to Checksum 110H CONVBKSP: DEFB NO ; Yes=convert backspace to rub 111H TOGGLEBK: DEFB NO ; Yes=allow toggling of bksp to rub 112H ADDLF: DEFB NO ; No=no LF after CR to send file in 113H ; Terminal mode (added by remote echo) TOGGLELF: DEFB YES ; Yes=allow toggling of LF after CR 114H TRANLOGON: DEFB NO ; Not supported by MEX+ 115H ; Write logon sequence at location LOGON SAVCCP: DEFB YES ; Yes=do not overwrite CCP 116H LOCONEXTCHR: DEFB NO ; Yes=local command if EXTCHR precedes 117H ; No=external command if EXTCHR precedes TOGGLELOC: DEFB YES ; Yes=allow toggling of LOCONEXTCHR 118H LSTTST: DEFB YES ; Yes=allow toggling of printer on/off 119H XOFFTST:DEFB YES ; Yes=chcks for XOFF from remote while 11AH ; Sending a file in terminal mode XONWAIT:DEFB NO ; Yes=wait for XON after CR while 11BH ; Sending a file in terminal mode TOGXOFF:DEFB YES ; Yes=allow toggling of XOFF checking 11CH IGNORCTL: DEFB YES ; Yes=CTL-chars above ^M not displayed 11DH EXTRA1: DEFB 0 ; For future expansion 11EH EXTRA2: DEFB 0 ; For future expansion 11FH BRKCHR: DEFB 'D'-40H ; ^D = Send a 300 ms. break tone 120H NOCXNNCT: DEFB 'N'-40H ; ^N = Disconnect from the phone line 121H LOGCHR: DEFB 'O'-40H ; ^O = Send Log-On Message 122H LSTCHR: DEFB 'P'-40H ; ^P = Toggle printer 123H UNSAVE: DEFB 'R'-40H ; ^R = Close input text buffer 124H TRANCHR:DEFB 'T'-40H ; ^T = Transmit file to remote 125H SAVECHR:DEFB 'Y'-40H ; ^Y = Open input text buffer 126H EXTCHR: DEFB 'F'-40H ; ^F = Send Next Character 127H ; ; DEFS 2 ; 128H ; IN$MODCTL1: LD A,10H ; Channel 0, reset interrupts. 12AH OUT (MODCTL1),A IN A,(MODCTL1) ; Get the status bits RET DEFS 3 ; OUT$MODDATP: OUT (MODDATP),A RET ; Out modem data port 134H DEFS 7 IN$MODDATP: IN A,(MODDATP) RET ; In modem data port 13EH DEFS 7 ANI$MODRCVB: AND MODRCVB RET ; Bit to test for receive ready 148H CPI$MODRCVR: CP MODRCVR RET ; Value of receive bit when rdy 14BH ANI$MODSNDB: AND MODSNDB RET ; Bit to test for send ready 14EH CPI$MODSNDR: CP MODSNDR RET ; Value of send bit when ready 151H ; DCDTST: JP DCDVEC RNGDET: JP RNGVEC ; OUT$CTL1: OUT (MODCTL1),A RET ; Out modem control port 15AH OUT$CTL2: OUT (MODCTL2),A RET ; Out modem status port 15DH ; LOGONPTR: DEFW LOGON ; For MDM7xx Log-On Message 160H DEFS 6 ; 162H JMP$GOODBYE: RET ; MEX patch to prevent DSC 168H DEFS 2 ; From BYE command. JMP$INITMOD: JP INITMOD ; Go to user written routine 16BH JMP$NEWBAUD: JP NEWBAUD ; Change baudrate 66EH RET NOP NOP ; (by-passes PMMI routine) 171H RET NOP NOP ; (by-passes PMMI routine) 174H JMP$SETUPR: JP SETUPR ; 177H DEFS 3 ; 17AH JMP$SYSVER: JP SYSVER ; 17DH JMP$BREAK: JP SENDBRK ; 180H ; ; ; Do not change the following six lines. ; ; JMP$ILPRT: DEFS 3 ; 183H JMP$INBUF: DEFS 3 ; 186H JMP$INLNCOMP: DEFS 3 ; 189H JMP$INMODEM: DEFS 3 ; 18CH JMP$NXTSCRN: DEFS 3 ; 18FH JMP$TIMER: DEFS 3 ; 192H ; ; ; Clear sequences -- CLREOS is clear to end of screen, CLRSCRN is clear ; entire screen. ; ; CLREOS: LD DE,EOSMSG ; 195H LD C,PRINT CALL MEX RET ; CLRSCRN:LD DE,CLSMSG ; 19EH LD C,PRINT CALL MEX RET ; ORG 200H ; SYSVER: LD C,ILP ; 1A7H CALL MEX DEFB CLS DEFB CR,LF DEFB 'Version for Epson QX-10 Computer',CR,LF DEFB 'With HAYES external Smartmodem',CR,LF DEFB '(Rev. 1 - MJB - MEX+ Loadable Remote)',CR,LF DEFB CR,LF,0 RET ; ;---------------------------------------------------------- ; ; You can put in a message at this location which can be called up with ; CTRL-O (^-O) if TRANLOGON has been set TRUE. You can put in several ; lines if desired. End with a 0. ; Note: Only works with MDM7xx -- Not MEX ; LOGON: DEFB 'Epson QX-10 Computer Only',CR,LF,0 ; ;------------------------------------------------------------ ; ; ; This routine allows a 300 ms. break tone to be sent to reset some ; time-share computers. ; SENDBRK:LD A,5 OUT (MODCTL1),A LD A,0FAH ; Send a BREAK TONE JP GOODBYE1 ; DCDVEC: LD A,0FEH RET ; RNGVEC: LD A,0FEH RET ; ; ; ; 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:LD A,5 OUT (MODCTL1),A ; SEND TO THE STATUS PORT LD A,07AH ; TURN OFF DTR, SEND BREAK ; GOODBYE1: OUT (MODCTL1),A LD B,3 ; DELAY 300 MS. LD C,TIMER CALL MEX LD A,5 OUT (MODCTL1),A LD A,0EAH ; RESTORE TO NORMAL, 8 BITS, DTR ON, ETC. OUT (MODCTL1),A RET ;..... ; ; ; Epson QX-10 initialization -- sets CTC timer 00H for send and receive ; baudrate. ; ; INITMOD:LD A,00H ; SELECT REG. OUT (MODCTL1),A LD A,18H ; THROW OUT OF MODE OUT (MODCTL1),A LD A,04H ; SELECT REG. OUT (MODCTL1),A LD A,44H ; SET ASCII PARAMETERS OUT (MODCTL1),A LD A,03H ; SELECT REG. OUT (MODCTL1),A LD A,0C1H ; ENABLE RECEIVE OUT (MODCTL1),A LD A,05H ; SELECT REG. OUT (MODCTL1),A LD A,0EAH ; ENABLE SEND, DTR, RTS OUT (MODCTL1),A ; INITMOD1: LD A,5 ; SET FILE TRANSFER TIME LD (MSPEED),A LD A,0B6H OUT (07H),A ; SEND TO 'CTC' TIMER INITMOD2: LD A,68H ; DEFAULT TO 1200 BAUD, LSP PORTION OUT (06H),A ; SEND TO 'CTC' TIMER ; INITMOD3: LD A,05H ; 300 BAUD, MSP PORTION OUT (06H),A ; TO TIMER RET ;..... ; ; ; Sets the modem speed via the SET command. ; ; SETUPR: LD C,SBLANK ; Any arguments? CALL MEX CALL C,TELL ; If not, go display baud rate LD DE,CMDTBL LD C,LOOKUP CALL MEX ; Parse argument PUSH HL ; Save any parsed argument addrs on stack RET NC ; If we have one, return to it POP HL ; Input not found in table LD C,ILP CALL MEX ; Tell user input not valid DEFB CR,LF,'Only 300, 600, 1200, 2400, 4800, 9600 or' DEFB ' 19200 allowed on SET command line',BELL,CR,LF,0 RET ; CMDTBL: DEFB '30','0'+80H DEFW OK300 DEFB '60','0'+80H DEFW OK600 DEFB '120','0'+80H DEFW OK1200 DEFB '240','0'+80H DEFW OK2400 DEFB '480','0'+80H DEFW OK4800 DEFB '960','0'+80H DEFW OK9600 DEFB '1920','0'+80H DEFW OK19200 DEFB 0 ; TELL: LD C,ILP CALL MEX ; Print current baud rate DEFB CR,LF,'Baud rate is now: ',0 LD A,(MSPEED) LD C,PRBAUD CALL MEX RET ; ; OK300: LD A,1 LD HL,(BD300) JP LOADBD ; OK600: LD A,3 LD HL,(BD600) JP LOADBD ; OK1200: LD A,5 LD HL,(BD1200) JP LOADBD ; OK2400: LD A,6 LD HL,(BD2400) JP LOADBD ; OK4800: LD A,7 LD HL,(BD4800) JP LOADBD ; OK9600: LD A,8 LD HL,(BD9600) JP LOADBD ; OK19200:LD A,9 LD HL,(BD19200) ; LOADBD: LD (INITMOD1+1),A ; CHANGE TIME-TO-SEND TO MATCH BAUDRATE LD A,L ; GET BAUDRATE BYTE LD (INITMOD2+1),A ; SEND TO 'CTC' FOR NEW BAUDRATE LD A,H ; 2ND 1/2 OF BAUDRATE LD (INITMOD3+1),A JP INITMOD1 ; REINITIALIZE TO NEW BAUDRATE, THEN DONE ; ; NEWBAUD:CP 1 JP Z,OK300 CP 3 JP Z,OK600 CP 5 JP Z,OK1200 CP 6 JP Z,OK2400 CP 7 JP Z,OK4800 CP 8 JP Z,OK9600 CP 9 JP Z,OK19200 RET ; ; ; TABLE OF BAUDRATE PARAMETERS ; BD300: DEFW 01A0H BD600: DEFW 00D0H BD1200: DEFW 0068H BD2400: DEFW 0034H BD4800: DEFW 001AH BD9600: DEFW 000DH BD19200:DEFW 0006H ; BAUDBUF:DEFB 10,0 DEFS 10 ; EOSMSG: DEFB 01BH,059H,0,0,0,'$' CLSMSG: DEFB 01AH,0,0,0,0,'$' ; ; NOTE: Must Terminate Prior to 0B00H (with Smartmodem) ; 0D00H (without Smartmodem) ; END ;