; MXO-IN13.ASM -- INTEL 8251 I/O mapped overlay for MEX10-12. 12/31/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 places particular emphasis on using the Intel 8251 I/O chip. ; Much of the information contained here is not in the main file. ; ; Edit this file for your preferences then follow the "TO USE:" example ; shown below. ; ; Use the MEX "SET" command to change the baudrate when desired. When ; the program is first called up the baud rate is set to 300. The ; initial baud rate can be changed by setting to the desired baud rate ; and "CLONEing". ; ; The baud rate switch for the modem port must be set to 1200 baud, even ; if the port will only be used at 300 baud. ; ; 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. ; ; ; = = = = = = = = = = = = = = = = = = ; 12/31/84 - Adapted for Intel 8251 from - David Miles ; MXO-HZ13 ; 05/22/84 - Rewritten for MEX10 - Biff Bueffel ; 07/27/83 - Renamed to work with MDM712 - Irv Hoff ; 07/01/83 - Revised to work with MDM711 - Irv Hoff ; 06/22/83 - Revised to work with MDM710 - Irv Hoff ; 05/27/83 - Revised to work with MDM709 - Irv Hoff ; 05/15/83 - Revised to work with MDM708 - Irv Hoff ; 04/11/83 - Updated to work with MDM707 - Irv Hoff ; 04/04/83 - Updated to work with MDM706 - Irv Hoff ; 02/27/83 - Updated to work with MDM705 - Irv Hoff ; ; = = = = = = = = = = = = = = = = = ; ; 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 ; BELL EQU 07H ; bell CR EQU 0DH ; carriage return ESC EQU 1BH ; escape LF EQU 0AH ; linefeed ; YES EQU 0FFH NO EQU 0 ; ; MODDATP EQU 12H ; data port for 8251 MODCTL1 EQU MODDATP+1 ; status port for 8251 MODRCVB EQU 2 ; bit to test for received data MODRCVR EQU 2 ; modem receive ready MODSNDB EQU 1 ; bit to test for ready to send MODSNDR EQU 1 ; modem send ready bit ; ORG 100H ; DS 3 ; (for "JMP START" instruction) ; PMMIMODEM: DB NO ; yes=PMMI S-100 Modem 103H SMARTMODEM: DB NO ; yes=HAYES Smartmodem, no=non-Hayes 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 5 ; 0=110 1=300 2=450 3=600 4=710 5=1200 107H ; 6=2400 7=4800 8=9600 9=19200 default BYTDLY: DB 5 ; 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 5 ; 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 NO ; 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 NO ; 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=checks 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 125H EXTCHR: DB '^'-40H ; ^^ = Send next character 126H ; DS 2 ; 128H ; IN$MODCTL1: IN MODCTL1 ! RET ; in modem control port 12AH DS 7 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 rec ready CPI$MODRCVR: CPI MODRCVR ! RET ; value when ready ANI$MODSNDB: ANI MODSNDB ! RET ; bit to test snd ready CPI$MODSNDR: CPI MODSNDR ! RET ; value when ready DS 12 ; DS 2 ; for user message. 160H DS 6 ; 162H JMP$GOODBYE: JMP GOODBYE ; 168H JMP$INITMOD: JMP INITMOD ; go to user written routine 16BH JMP$NEWBAUD JMP NEWBAUD ; Reset 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 ; ..... ; ; CLREOS: LXI D,EOSMSG MVI C,PRINT CALL MEX RET ; CLRSCRN: LXI D,CLSMSG MVI C,PRINT CALL MEX RET ; EOSMSG: DB '$' CLSMSG: DB '$' ;..... ; ; SYSVER: MVI C,ILP CALL MEX DB 'Version for 8251 I/O port' DB CR,LF,0 RET ; ..... ; ; ; This routine allows a 300 ms. break tone to be send to reset some ; time-share computers. ; SENDBRK: 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: RET ; ..... ; ; ; The following is used in setting up the 8251 I/O port. ; INITMOD: LDA MSPEED ; initialize port using old rate code ; NEWBAUD: CPI 1 ; 300 baud code? LXI H,CTL300 ; load pointer to 300 baud ctl byte JZ SETBAUD ; do it to it. CPI 5 ; check for 1200 baud LXI H,CTL1200 RNZ ; return now if none of above ; SETBAUD: STA MSPEED ; save new baud rate MVI A,0AAH ; dummy command OUT MODCTL1 ; send to port to get attention NOP ! NOP ; wait for slow ports MVI A,40H ; reset command OUT MODCTL1 NOP ! NOP MOV A,M ; get command byte OUT MODCTL1 NOP ! NOP MVI A,37H ; reset RTS, ERR, DTR. enable XMT and REC OUT MODCTL1 NOP ! NOP IN MODDATP ; wake up port ; 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 MVI C,ILP CALL MEX DB CR,LF,0 XRA A RET ; ; The following changes the baud rate 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 MOV A,L ; put baud code in accum JNC NEWBAUD ; set baud if argument good MVI C,ILP ; Tell user input not valid CALL MEX DB CR,LF,'Only 300 and 1200 allowed on SET command',CR,LF,0 RET ; CMDTBL: DB '30','0'+80H DW 0001 ; 300 baud code DB '120','0'+80H DW 0005 ; 1200 baud code DB 0 ; ; TABLE OF BAUDRATE PARAMETERS FOR 8251 ; CTL300: DB 0CFH ; control byte for 300 baud CTL1200: DB 0CEH ; control byte for 1200 baud ; BAUDBUF: DB 10,0 DS 10 ;..... ; ; ; NOTE: MUST TERMINATE PRIOR TO 0B00H (with Smartmodem) ; END ;