home *** CD-ROM | disk | FTP | other *** search
- ; MXO-NE11.ASM - NEC PC-8001A OVERLAY FILE FOR MEX10. 25 MAY 1984
- ;
- REV EQU 11 ;overlay revision level
- ;
- ; This file adapts the NEC PC-8001A/Smartmodem 1200 to the MEX modem program.
- ; You must use Chan 1 RS232 port and set the port internally for 1200 baud.
- ; This overlay converts to MEX and no longer fits all features of MDMxx as
- ; rewritten.
- ;
- ; TO USE: Edit this overlay file as you prefer - then assemble it.
- ; ASM MXO-NE10 ;use ASM
- ; Patch MEX with the resulting hex file using MLOAD.
- ; MLOAD YOURNAME.COM=MEX10.COM,MXO-NE11
- ; Patch YOURNAME with the Smartmodem hex file if needed.
- ; MLOAD YOURNAME.COM=YOURNAME.COM,MXO-SM1x
- ;
- ; = = = = = = = = = = = = = = = = = =
- ;
- ; 05/25/84 - Converted from MDM7xx to MEX10 - David Poskie
- ; 11/11/83 - Renamed to M7NE-1.ASM, no changes - Irv Hoff
- ; 07/27/83 - Renamed for use with MDM712 - Irv Hoff
- ; 07/01/83 - Revised for use with MDM711 - Irv Hoff
- ; 06/22/83 - Revised for use with MDM710 - Irv Hoff
- ; 06/22/83 - Altered for use with MDM710 - Irv Hoff
- ; 06/22/83 - Altered MDM708DP for the NEC 8001
- ; computer using an external modem - Irv Hoff
- ;
- ; = = = = = = = = = = = = = = = = = =
- ;
- BELL: EQU 07H ;bell
- CR: EQU 0DH ;carriage return
- ESC: EQU 1BH ;escape
- LF: EQU 0AH ;linefeed
- TAB: EQU 09H ;horizontal tab
- TPA: EQU 100H ;start of RAM
- ;
- YES: EQU 0FFH
- NO: EQU 0
- ;
- PORT: EQU 0C0H ;NEC PC-8001 serial port
- MODCTL1: EQU PORT+1 ;Modem status port
- MODCTL2: EQU PORT+1 ;Modem control port
- MODDATP: EQU PORT ;Modem data port
- MODRCVB: EQU 02H ;Modem receive bit
- MODRCVR: EQU 02H ;Modem receive ready bit
- MODSNDB: EQU 01H ;Modem send bit
- MODSNDR: EQU 01H ;Modem send ready bit
- ;
- ; MEX service call processor equates
- ;
- MEX EQU 0D00H ;MEX service call processor address
- INMDM EQU 255 ;get char from port to A,
- ;CY=no more in 100ms
- 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 frm kybd,Z=present
- SNDRDY EQU 251 ;test modem-send ready
- RCVRDY EQU 250 ;test modem-receive ready
- SNDCHR EQU 249 ;send char to modem (after SNDRDY)
- RCVCHR EQU 248 ;rcv a char from modem (after RCVRDY)
- LOOKUP EQU 247 ;table search (see CMDTBL comments)
- 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 next 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
- ;
- CONOUT EQU 2 ;simulated BDOS function 2:con char out
- PRINT EQU 9 ;simulated BDOS function 9:print string
- INBUF EQU 10 ;input buffer,same structure as BDOS 10
- ;
- ORG TPA ;here we go
- ;
- DS 3 ;(for "JMP START" instruction)
- ;
- PMODEM: DB NO ;yes=PMMI S-100 Modem 103H
- SMODEM: DB YES ;yes=HAYES Smartmodem 104H
- TPULSE: DB 'P' ;T=touch, P=pulse (Smartmodem-only) 105H
- CLOCK: DB 40 ;clock speed in MHz *10, 25.5 MHz max. 106H
- 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 BB's
- CRDLY: DB 5 ;0=0 delay 1=100 ms 5=500 ms - 9=900 ms 109H
- ;default extra wait after CRLF in terminal
- ; mode file transfer for slow BB's
- COLUMS DB 5 ;number of DIR columns shown 10AH
- SETFL: DB YES ;yes=user-defined SET Command 10BH
- SCRTEST: DB YES ;cursor control routine 10CH
- RETRY: DB YES ;reset error count after 10 consec.errors
- BAKFLG: DB NO ;yes=change any file same name to .BAK 10EH
- CRCDFL: DB YES ;yes=default to CRC checking 10FH
- TOGCRC: DB YES ;yes=allow toggling of CRC to Checksum 110H
- CVTBK: DB NO ;yes=convert backspace to rub 111H
- TOGLBK: 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)
- TOGLLF: DB YES ;yes=allow toggling LF after CR 114H
- TRNLOG: DB YES ;yes=allow logon transmission 115H
- ;write logon sequence at location LOGON
- SAVCCP: DB YES ;yes=do not overwrite CCP 116H
- LOCNXT: DB YES ;yes=local command if EXTCHR precedes 117H
- ;no=external command if EXTCHR precedes
- TOGLOC: DB YES ;yes=allow toggling LOCONEXTCHR 118H
- LSTTST: DB NO ;no=using modem on printer port 119H
- XOFTST: DB YES ;yes=chcks for XOFF from remote while 11AH
- ;sending a file in terminal mode
- XONWT: DB NO ;yes=wait for XON after CR while 11BH
- ;sending a file in terminal mode
- TOGXOF: DB YES ;yes=allow toggling of XOFF checking 11CH
- IGNCTL: 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
- NOCONN: 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
- UNSVCH: DB 'R'-40H ;^R = Close input text buffer 124H
- TRNCHR: DB 'T'-40H ;^T = Transmit file to remote 125H
- SAVCHR: DB 'Y'-40H ;^Y = Open input text buffer 126H
- EXTCHR: DB '^'-40H ;^^ = Send next character 127H
- ;
- DS 2 ;not used by MEX 128H
- ;
- ;low level modem I/O routines.
- ;
- IN$MODCTL1: IN MODCTL1 ! RET ;in modem control port
- DS 7
- OUT$MODDATP: OUT MODDATP ! RET ;out modem data port
- DS 7
- IN$MODDATP: IN MODDATP ! RET ;in modem data port
- DS 7
- ANI$MODRCVB ANI MODRCVB ! RET ;test bit for receive ready
- ANI$MODRCVR CPI MODRCVR ! RET ;receive bit value when ready
- ANI$MODSNDB ANI MODSNDB ! RET ;test bit for send ready
- ANI$MODSNDR CPI MODSNDR ! RET ;send bit value when ready
- DS 12
- ;
- LOGON DS 2 ;req for MDM compat, not ref by MEX
- DIALV: DS 3
- DISCV: JMP DISCON
- GOODBYV: JMP GOODBY ;called before exit to CP/M
- INMODV: JMP NITMOD ;cold-st user-written routine 16BH
- NEWBAUDV: JMP NEWBAUD ;sets baud-rate
- RET ! NOP ! NOP ;bypasses PMMI routine
- RET ! NOP ! NOP ;bypasses PMMI routine
- SETUPV: JMP SETCMD ;SET command 177H
- SPMENV: DS 3 ;not used with MEX 17AH
- VERSNV: JMP VERSN ;shows overlay version in sign-on
- BREAKV: JMP SBREAK ;send a break 180H
- ;
- ; NOTE: For MEX compatibility, don't use these next 6 routines.
- ; Use the MEX service call processor routines instead.
- ; Do not change the following six routines.
- ; vv REPLACE WITH: vv
- ILPRTV: DS 3 ;MEX funct 9 183H
- INBUFV: DS 3 ;MEX funct 10 186H
- INCMPV: DS 3 ;table lookup funct 247 189H
- INMDMV: DS 3 ;MEX funct 255 18CH
- NXSCRV: DS 3 ;not supported (returns NOP) 18FH
- TIMERV: DS 3 ;MEX funct 254 192H
- ;
- CLREOS: MVI C,ILP
- CALL MEX
- DB ESC,59H,0,0,0
- RET
- ;
- CLS: MVI C,ILP
- CALL MEX
- DB 1EH,ESC,59H,0,0
- RET
- ;
- ; end of fixed area
- ;.....
- ;
- VERSN: MVI C,ILP
- CALL MEX
- DB 'NEC PC-8001A <+> SMARTMODEM 1200 '
- DB REV/10+'0'
- DB '.'
- DB REV MOD 10+'0'
- DB CR,LF,0
- RET
- ;
- ;-----------------------------------------------------------------------
- ;
- ; NOTE: You can change the VERSN message to be longer or shorter. The
- ; point is to be done with this overlay by 0B00H if using a
- ; Smartmodem or by 0D00H otherwise.
- ;
- ;=======================================================================
- ;
- ; This routine allows sending a 300 ms. break tone to reset some
- ; time-share computers.
- ;
- SBREAK: MVI A,5
- OUT MODCTL1
- MVI A,1FH ;send a break tone
- JMP GOODBY1
- ;.....
- ;
- ; This routine sets DTR low and sends a 300 ms. break tone
- ; to disconnect some modems (e.g. Bell 212A)
- ;
- DISCON: MVI A,5
- OUT MODCTL1 ;send break
- MVI A,15H ;turn off DTR
-
- GOODBY1: OUT MODCTL1 ;send to status port
- MVI B,3 ;wait 300 ms
- MVI C,TIMER
- CALL MEX
- GOODBY: MVI A,5
- OUT MODCTL1
- MVI A,07H ;normal send/receive with DTR
- OUT MODCTL1 ;send to status port
- RET
- ;.....
- ;
- ; NEC PC-8001 initialization -- sets the 8251A for 8 bits, 1 stop pulse,
- ; DTR high. Requires dip switche be set internally to 1200 baud then
- ; divides by 64 for 300, or by 16 for 1200 baud via "SET" command. Set
- ; now to default at 1200 baud.
- ;
- NITMOD: MVI A,5 ;1200 baud transfer time
- STA MSPEED
- MVI A,087H ;insure out of mode
- OUT MODCTL1 ;modem status port
- OUT MODCTL1 ;slight delay
- MVI A,4EH ;initialize USART
- OUT MODCTL1
- ;
- NITMOD1: MVI A,4EH ;default - divide by 16 for 1200 baud
- OUT MODCTL1 ;modem status port
- MVI A,17H ;DTR, RCV, XMT, ERROR reset
- OUT MODCTL1
- IN PORT ;clear data port
- RET
- ;.....
- ;
- SETCMD MVI C,SBLANK ;any argument?
- CALL MEX
- JC TELL ;if not, display baud-rate
- LXI D,CMDTBL
- MVI C,LOOKUP
- CALL MEX ;parse argument
- PUSH H ;save any parsed argument adr on stack
- RNC ;if argument, return to it
- POP H ;OOPS, argument not found in table
- SETERR: MVI C,ILP ;inline print
- CALL MEX ;say input not valid
- DB CR,LF,'++ Invalid SET Command ++',CR,LF,BELL,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
- ;
- OK300: MVI A,1
- MVI B,4FH ;divide by 64 for 300 baud
- JMP LOADBD ;go load it
- ;
- OK1200: MVI A,5
- MVI B,4EH ;divide by 16 for 1200 baud
- ;
- ;
- LOADBD: STA NITMOD+1 ;change time-to-send to match baud-rate
- MOV A,B ;get baud-rate byte
- STA NITMOD1+1 ;store in NITMOD
- JMP NITMOD ;reinitialize to new baud-rate and done
- ;
- ;
- BAUDBUF: DB 10,0
- DS 10
- ;
- NEWBAUD: CPI 1
- JZ OK300
- CPI 5
- JZ OK1200
- RET
- ;.....
- ; (END OF NITMOD AND SETUP ROUTINES)
- ;=======================================================================
- ;
- ;
- ; NOTE: ABOVE WHEN ASSEMBLED MUST TERMINATE BEFORE 0B00H WITH A
- ; SMARTMODEM & BEFORE 0D00H WITHOUT.
- ;
- ;=======================================================================
- ;
- END
- ;