home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
MEX
/
MXO-IN13.ASM
< prev
next >
Wrap
Assembly Source File
|
2000-06-30
|
9KB
|
281 lines
; 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
;