home *** CD-ROM | disk | FTP | other *** search
- ;
- ;
- ;
- ;
- REV EQU 10 ;overlay revision level
- ;
- ; MEX STARPLEX OVERLAY VERSION 1.0: written 07/16/84 by Bill Meahan
- ; 1951 S. Globe
- ; Westland, MI 48185
- ; I can also be contacted through MICROLINK-820 at:
- ; (313)487-0070 (24 hrs 300/1200 baud)
- ;
- ;
- ; This is a MEX overlay file for the National Semiconductor STARPLEX.
- ; Derived from the PMMI overlay by Ronald G. Fowler.
- ;
- ; This overlay should also work (except for the serial printer support) with
- ; systems based on the following single-board computers:
- ; Intel National
- ; SBC80/20 BLC80/204
- ; SBC80/20-4 BLC80/24
- ; SBC80/24 BLC80/316
- ; SBC80/30
- ;
- ; Intel development systems may have different addresses for the ports, but
- ; use the same arrangement of 8253 baud rate generators and 8251 USART's so
- ; this overlay should be EASILY adaptible to those systems as well.
- ;
- ;------------------------------------------------------------
- ;
- ; Misc equates
- ;
- NO EQU 0
- YES EQU 0FFH
- TPA EQU 100H
- CR EQU 13
- LF EQU 10
- TAB EQU 9
- XON EQU 011H
- XOFF EQU 013H
- ;
- ; STARPLEX port definitions (serial port 1)
- ;
- PORT EQU 0ECH ;STARPLEX base port (data or status)
- MODCT1 EQU PORT+1 ;modem control port
- MODDAT EQU PORT ;modem data port
- MODCT2 EQU PORT+1 ;modem status port
- BAUDRP EQU 0DDH ;modem baud rate port
- BAUDMD EQU 0DFH ;modem baud rate mode control port
- ;
- ; STARPLEX bit definitions
- ;
- MDRCVB EQU 02H ;modem receive bit (DAV)
- MDRCVR EQU 02H ;modem receive ready
- MDSNDB EQU 01H ;modem send bit
- MDSNDR EQU 01H ;modem send ready bit
- ;
- ;
- CTSMSK EQU 4 ;mask for CTS bit
- BRKMSK EQU 8 ;mask to set break
- PARMSK EQU 0CFH ;mask to remove parity bits
- OPARIT EQU 10H ;odd-parity bits
- EPARIT EQU 30H ;even-parity bits
- NPARIT EQU 00H ;no-parity bits
- PARTST EQU 10H ;mask to test parity enabled bit
- EVNTST EQU 20H ;mask to test even parity bit
- MODEMK EQU 06EH ;mode mask
- MODEGO EQU 027H ;default control command
- RSTCTL EQU 040H ;reset USART command
- BITS7 EQU 08H ;mask for 7 bit characters
- BITS8 EQU 0CH ;mask for 8 bit characters
- BITS8T EQU 04H ;mask to test for 8 bit characters
- STBIT1 EQU 040H ;mask to set 1 stop bit
- STBI15 EQU 080H ;mask to set 1.5 stop bits
- STBIT2 EQU 0C0H ;mask to set 2 stop bits
- ;
- ;
- ; MEX service processor stuff ... MEX supports an overlay service
- ; processor, located at 0D00H (and maintained at this address from
- ; version to version). If your overlay needs to call BDOS for any
- ; reason, it should call MEX instead; function calls below about
- ; 240 are simply passed on to the BDOS (console and list I/O calls
- ; are specially handled to allow modem port queueing, which is why
- ; you should call MEX instead of BDOS). MEX uses function calls
- ; above about 244 for special overlay services (described below).
- ;
- ; Some sophisticated overlays may need to do file I/O; if so, use
- ; the PARSFN MEX call with a pointer to the FCB in DE to parse out
- ; the name. This FCB should support a spare byte immediately pre-
- ; ceeding the actual FCB (to contain user # information). If you've
- ; used MEX-10 for input instead of BDOS-10 (or you're parsing part
- ; of a SET command line that's already been input), then MEX will
- ; take care of DU specs, and set up the FCB accordingly. There-
- ; after all file I/O calls done through the MEX service processor
- ; will handle drive and user with no further effort necessary on
- ; the part of the programmer.
- ;
- 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
- ;
- ;
- CONOUT EQU 2 ;simulated BDOS function 2: console char out
- PRINT EQU 9 ;simulated BDOS function 9: print string
- INBUF EQU 10 ;input buffer, same structure as BDOS 10
- ;
- ORG TPA ;we begin
- ;
- ;
- DS 3 ;MEX has a JMP START here
- ;
- ; The following variables are located at the beginning of the program
- ; to facilitate modification without the need of re-assembly. They will
- ; be moved in MEX 2.0.
- ;
- STRPLX: DB YES ;yes=STARPLEX modem \ / These 2 locations are not
- SMODEM: DB NO ;yes=Smartmodem / \ referenced by MEX
- DB 0 ;spare
- CLOCK: DB 38 ;clock speed x .1, up to 25.5 mhz.
- MSPEED: DB 1 ;sets display time for sending a file
- ;0=110 1=300 2=450 3=600 4=710
- ;5=1200 6=2400 7=4800 8=9600 9=19200
- BYTDLY: DB 5 ;default time to send character in
- ;terminal mode file transfer (0-9)
- ;0=0 delay, 1=10 ms, 5=50 ms, 9=90 ms
- CRDLY: DB 5 ;end-of-line delay after CRLF in terminal
- ;mode file transfer for slow BBS systems
- ;0=0 delay, 1=100 ms, 5=500 ms, 9=900 ms
- COLUMS: DB 5 ;number of directory columns
- SETFL: DB YES ;yes=user-defined SET command
- SCRTST: DB YES ;yes=if home cursor and clear screen
- ;routine at CLRSCRN
- DB 0 ;was once ACKNAK, now spare
- BAKFLG: DB NO ;yes=make .BAK file
- CRCDFL: DB YES ;yes=default to CRC checking
- ;no=default to Checksum checking
- TOGCRC: DB YES ;yes=allow toggling of Checksum to CRC
- CVTBS: DB NO ;yes=convert backspace to rub
- TOGLBK: DB YES ;yes=allow toggling of bksp to rub
- ADDLF: DB NO ;no=no LF after CR to send file in
- ;terminal mode (added by remote echo)
- TOGLF: DB YES ;yes=allow toggling of LF after CR
- TRNLOG: DB NO ;yes=allow transmission of logon
- ;write logon sequence at location LOGON
- SAVCCP: DB YES ;yes=do not overwrite CCP
- LOCNXT: DB NO ;yes=local cmd if EXTCHR precedes
- ;no=not local cmd if EXTCHR precedes
- TOGLOC: DB YES ;yes=allow toggling of LOCNXTCHR
- LSTTST: DB YES ;yes=allow toggling of printer on/off
- ;in terminal mode. Set to no if using
- ;the printer port for the modem
- XOFTST: DB NO ;yes=allow testing of XOFF from remote
- ;while sending a file in terminal mode
- XONWT: DB NO ;yes=wait for XON after sending CR while
- ;transmitting a file in terminal mode
- TOGXOF: DB YES ;yes=allow toggling of XOFF testing
- IGNCTL: DB NO ;yes=do not send control characters
- ;above CTL-M to CRT in terminal mode
- ;no=send any incoming CTL-char to CRT
- EXTRA1: DB 0 ;for future expansion
- EXTRA2: DB 0 ;for future expansion
- BRKCHR: DB '@'-40H ;^@ = Send a 300 ms. break tone
- NOCONN: DB 'N'-40H ;^N = Disconnect from phone line
- LOGCHR: DB 'L'-40H ;^L = Send logon
- LSTCHR: DB 'P'-40H ;^P = Toggle printer
- UNSVCH: DB 'R'-40H ;^R = Close input text buffer
- TRNCHR: DB 'T'-40H ;^T = Transmit file to remote
- SAVCHR: DB 'Y'-40H ;^Y = Open input text buffer
- EXTCHR: DB '^'-40H ;^^ = Send next character
- ;
- ; Equates used only by STARPLEX routines grouped together here.
- ;
- DB 0 ;not used
- DB 0 ;not used
- ;
- ; Low-level modem I/O routines: this will be replaced with
- ; a jump table in MEX 2.0 (you can insert jumps here to longer
- ; routines if you'd like ... I'd recommend NOT putting part of
- ; a routine in this area, then jumping to the rest of the routine
- ; in the non-fixed area; that will complicate the 2.0 conversion)
- ;
- INCTL1: IN MODCT1 ;in modem control port
- RET
- DB 0,0,0,0,0,0,0 ;spares if needed for non-STARPLEX
- ;
- OTDATA: OUT MODDAT ;out modem data port
- RET
- DB 0,0,0,0,0,0,0 ;spares if needed for non=STARPLEX
- ;
- INPORT: IN MODDAT ;in modem data port
- RET
- DB 0,0,0,0,0,0,0 ;spares if needed for non-STARPLEX
- ;
- ; Bit-test routines. These will be merged with the above
- ; routines in MEX 2.0 to provide a more reasonable format
- ;
- MASKR: ANI MDRCVB ! RET ;bit to test for receive ready
- TESTR: CPI MDRCVR ! RET ;value of receive bit when ready
- MASKS: ANI MDSNDB ! RET ;bit to test for send ready
- TESTS: CPI MDSNDR ! RET ;value of send bit when ready
- ;
- ;
- ; Unused area: was once used for special STARPLEX functions,
- ; Now used only to retain compatibility with MDM overlays.
- ; You may use this area for any miscellaneous storage you'd
- ; like but the length of the area *must* be 12 bytes.
- ;
- DS 12
- ;
- ; Special modem function jump table:
- ;
- LOGON: DS 2 ;needed for MDM compat, not ref'd by MEX
- DIALV: DS 3 ;dial digit in A (see info at PDIAL)
- DISCV: DS 3 ;disconnect the modem
- GOODBV: JMP DUMMY ;called before exit to CP/M
- INMODV: JMP NITMOD ;initialization. Called at cold-start
- NEWBDV: JMP PBAUD ;set baud rate
- NOPARV: JMP DUMMY ;set modem for no-parity
- PARITV: JMP DUMMY ;set modem parity
- SETUPV: JMP SETCMD ;SET cmd: jump to a RET if you don't write SET
- SPMENV: DS 3 ;not used with MEX
- VERSNV: JMP SYSVER ;Overlay's voice in the sign-on message
- BREAKV: JMP PBREAK ;send a break
- ;
- ; The following jump vector provides the overlay with access to special
- ; routines in the main program (retained and supported in the main pro-
- ; gram for MDM overlay compatibility). These should not be modified by
- ; the overlay.
- ;
- ; Note that for MEX 2.0 compatibility, you should not try to use these
- ; routines, since this table will go away with MEX 2.0 (use the MEX
- ; service call processor instead).
- ;
- ILPRTV: DS 3 ;replace with MEX function 9
- INBUFV: DS 3 ;replace with MEX function 10
- ILCMPV: DS 3 ;replace with table lookup funct. 247
- INMDMV: DS 3 ;replace with MEX function 255
- NXSCRV: DS 3 ;not supported by MEX (returns w/no action)
- TIMERV: DS 3 ;replace with MEX function 254
- ;
- ;
- ; Clear/screen and clear/end-of-screen. Each routine must use the
- ; full 9 bytes alloted (may be padded with nulls).
- ;
- ; These routines (and other screen routines that MEX 2.0 will sup-
- ; port) will be accessed through a jump table in 2.0, and will be
- ; located in an area that won't tie the screen functions to the
- ; modem overlay (as the MDM format does).
- ;
- CLREOS: LXI D,EOSMSG
- MVI C,PRINT
- CALL MEX
- RET
- ;
- ;
- CLS: LXI D,CLSMSG ;null unless patched
- MVI C,PRINT
- CALL MEX
- RET
- ;
- ;------------------------------------------------------------
- ;
- ; *** END OF FIXED FORMAT AREA ***
- ;
- ;------------------------------------------------------------
- ;
- ; Modem initialization.
- ;
- NITMOD:
- MVI A,1 ;default to 300 baud on start-up
- CALL PBAUD
- LDA MODMOD ;default mode command in A
- ALTINI: ;alternate entry point for mode change routines
- PUSH PSW ;save mode command on stack
- XRA A ;force 8251 USART to look for reset command
- OUT MODCT2
- OUT MODCT2
- OUT MODCT2
- MVI A,RSTCTL ;reset USART
- OUT MODCT2
- POP PSW ;retreive mode command
- STA MODMOD ;save copy for future use
- OUT MODCT2 ;set USART mode
- MVI A,MODEGO ;enable transmitter and receiver
- OUT MODCT2
- RET
- ;
- ; STARPLEX send-break routine
- ;
- PBREAK: LDA MODCTB ;get the last modem control byte
- ORI BRKMSK ;set the transmit break bit low
- OUT MODCT2 ;send it to the modem
- LXI B,02FEH ;B=2, C=254
- CALL MEX ;send a space tone for 200 ms.
- LDA MODCTB ;get the last modem control byte
- OUT MODCT2 ;restore to normal
- ;
- ; exit routine
- ;
- DUMMY: RET ;we don't need one
- ;
- ;
- ;
- ; Set baud-rate code in A
- ;
- PBAUD: PUSH H ;don't alter anybody
- PUSH D
- PUSH B
- STA MSPEED
- ADD A ;double value to get word address
- MOV E,A ;code to DE
- MVI D,0
- LXI H,BAUDTB ;offset into table
- DAD D
- MOV C,M ;fetch code
- INX H
- MOV B,M
- MVI A,076H
- OUT BAUDMD ;control counter
- MOV A,C
- OUT BAUDRP
- MOV A,B
- OUT BAUDRP ;good rate, set it
- PBEXIT: POP B ;all done
- POP D
- POP H
- RET
- ;
- ; table of baud rate divisors for supported rates
- ;
- BAUDTB: DW 1048,384,256,192,162 ;110,300,450,610,710
- DW 96,48,24,12,6 ;1200,2400,4800,9600,19200
- ;
- ; Sign-on message
- ;
- SYSVER: LXI D,SOMESG
- MVI C,PRINT
- CALL MEX
- RET
- ;
- SOMESG: DB 'STARPLEX overlay By Bill Meahan V. '
- DB REV/10+'0'
- DB '.'
- DB REV MOD 10+'0'
- DB ': $'
- ;
- ;
- ;
- ;
- ; Newline on console
- ;
- CRLF: MVI A,CR
- CALL TYPE
- MVI A,LF ;fall into TYPE
- ;
- ; type char in A on console
- ;
- TYPE: PUSH H ;save 'em
- PUSH D
- PUSH B
- MOV E,A ;align output character
- MVI C,CONOUT ;print via MEX
- CALL MEX
- POP B
- POP D
- POP H
- RET
- ;
- ; strings to clear-to-end-of-screen, and clear-screen
- ;
- EOSMSG: DB 09BH,'$' ;clear to end-of-screen
- CLSMSG: DB 09AH,'$' ;clear whole screen
- ;
- ; Data area
- ;
- ERRFLG: DB 0 ;connection error code
- MODMOD DB MODEMK ;uart-control byte image
- BAUDSV: DB 01 ;current baud rate (dflt 300)
- MODCTB: DB MODEGO ;modem control byte
- ;
- ;------------------------------------------------------------
- ;
- ; The remainder of this overlay implements a very versatile
- ; SET command --
- ;
- ;
- ; Control is passed here after MEX parses a SET command.
- ;
- SETCMD: MVI C,SBLANK ;any arguments?
- CALL MEX
- JC SETSHO ;if not, go print out values
- LXI D,CMDTBL ;parse command
- CALL TSRCH ;from table
- PUSH H ;any address on stack
- RNC ;if we have one, execute it
- POP H ;nope, fix stack
- SETERR: LXI D,SETEMS ;print error
- MVI C,PRINT
- CALL MEX
- RET
- ;
- SETEMS: DB CR,LF,'SET command error',CR,LF,'$'
- ;
- ; SET command table ... note that tables are constructed of command-
- ; name (terminated by high bit=1) followed by word-data-value returned
- ; in HL by MEX service processor LOOKUP. Table must be terminated by
- ; a binary zero.
- ;
- ; Note that LOOKUP attempts to find the next item in the input stream
- ; in the table passed to it in HL ... if found, the table data item is
- ; returned in HL; if not found, LOOKUP returns carry set.
- ;
- CMDTBL: DB '?'+80H ;"set ?"
- DW STHELP
- DB 'BAU','D'+80H ;"set baud"
- DW STBAUD
- DB 'PARIT','Y'+80H ;"set parity"
- DW SETPAR
- DB 'BIT','S'+80H ;"set bits"
- DW SETBIT
- DB 'STO','P'+80H ;"set stop"
- DW SETSTO
- ;
- DB 0 ;<<=== table terminator
- ;
- ; SET <no-args>: print current statistics
- ;
- SETSHO:
- LXI H,SHOTBL ;get table of SHOW subroutines
- SETSLP: MOV E,M ;get table address
- INX H
- MOV D,M
- INX H
- MOV A,D ;end of table?
- ORA E
- RZ ;exit if so
- PUSH H ;save table pointer
- XCHG ;adrs to HL
- CALL GOHL ;do it
- CALL CRLF ;print newline
- MVI C,CHEKCC ;check for console abort
- CALL MEX
- POP H ;it's done
- JNZ SETSLP ;continue if no abort
- RET
- ;
- GOHL: PCHL
- ;
- ; table of SHOW subroutines
- ;
- SHOTBL: DW BDSHOW
- DW PARSHO
- DW BITSHO
- DW STOSHO
- DW 0 ;<<== table terminator
- ;
- ; SET ? processor
- ;
- STHELP: LXI D,HLPMSG
- MVI C,PRINT
- CALL MEX
- RET
- ;
- ; The help message
- ;
- HLPMSG: DB CR,LF,'SET command, STARPLEX version:',CR,LF,LF
- DB CR,LF,'SET BAUD 150 <or> 300 <or> 600 <or> 1200 <or> 2400'
- DB CR,LF,' <or> 4800 <or> 9600'
- DB CR,LF,'SET PARITY ODD <or> EVEN <or> OFF'
- DB CR,LF,'SET BITS 7 <or> 8'
- DB CR,LF,'SET STOP 1 <or> 1.5 <or> 2'
- DB CR,LF,'$'
- ;
- ; SET BAUD processor
- ;
- STBAUD: MVI C,BDPARS ;function code
- CALL MEX ;let MEX look up code
- JC SETERR ;invalid code
- CALL PBAUD ;no, try to set it
- JC SETERR ;not-supported code
- BDSHOW: CALL ILPRT ;display baud
- DB 'Baud rate:',TAB,' ',0
- LDA MSPEED
- MVI C,PRBAUD ;use MEX routine
- CALL MEX
- RET
- ;
- ; SET PARITY processor
- ;
- SETPAR:
- LXI D,PARTBL ;point to argument table
- CALL TSRCH ;look for match with allowed arguments
- JC SETERR ;process error if found
- LDA MODMOD ;get current mode byte
- ANI PARMSK ;mask away current parity bits
- ORA L ;add new parity bits
- CALL ALTINI
- PARSHO:
- CALL ILPRT ;show current status
- DB 'Parity:',TAB,' ',0
- LDA MODMOD ;get current mode word
- ANI PARTST ;test for parity enabled
- JNZ PAR ;skip if it is
- CALL ILPRT
- DB 'Off',0
- RET
- PAR:
- LDA MODMOD
- ANI EVNTST ;test mode byte for even parity
- JNZ PAREVN ;skip if it is
- CALL ILPRT
- DB 'Odd',0
- RET
- PAREVN:
- CALL ILPRT
- DB 'Even',0
- RET
- ;
- ;PARITY argument table
- ;
- PARTBL: DB 'OD','D'+80H
- DB OPARIT,0
- DB 'EVE','N'+80H
- DB EPARIT,0
- DB 'OF','F'+80H
- DB NPARIT,0
- DB 0
- ;
- ;SET BITS processor
- ;
- SETBIT:
- LXI D,BITTBL ;point to argument table
- CALL TSRCH ;look for match with allowed arguments
- JC SETERR ;process error if found
- LDA MODMOD ;get current mode command
- ANI (NOT BITS8) AND 255 ;mask away current bits
- ORA L ;set new bits
- CALL ALTINI ;change mode
- BITSHO:
- CALL ILPRT ;show current status
- DB 'Bits:',TAB,' ',0
- LDA MODMOD ;get current mode word
- ANI BITS8 ;test for number of bits
- JZ SETERR
- ANI BITS8T
- JNZ B8 ;skip if it is
- CALL ILPRT
- DB '7',0
- RET
- B8:
- CALL ILPRT
- DB '8',0
- RET
- ;
- ;BITS argument table
- ;
- BITTBL: DB '8'+80H
- DB BITS8,0
- DB '7'+80H
- DB BITS7,0
- DB 0
- ;
- ;SET STOP processor
- ;
- SETSTO:
- LXI D,STPTBL ;point to argument table
- CALL TSRCH ;look for match with allowed arguments
- JC SETERR ;process error if found
- LDA MODMOD ;get current mode command
- ANI (NOT STBIT2) AND 255 ;mask away current bits
- ORA L ;set new bits
- CALL ALTINI ;change mode
- STOSHO:
- CALL ILPRT ;show current status
- DB 'Stop Bits:',TAB,' ',0
- LDA MODMOD ;get current mode word
- ANI STBIT2 ;test for number of bits
- JZ SETERR
- RLC
- RLC
- ADD A ;form word table index
- LXI H,STJTBL ;get address of jump table
- ADD L ;point to address of proper routine
- MOV L,A
- MVI A,0
- ADC H
- MOV H,A
- MOV A,M ;get address of proper routine
- INX H
- MOV H,M
- MOV L,A
- PCHL ;branch to proper routine
- PRT1:
- CALL ILPRT
- DB '1',0
- RET
- PRT2:
- CALL ILPRT
- DB '2',0
- RET
- PRT15:
- CALL ILPRT
- DB '1.5',0
- RET
- ;
- STJTBL: ;jump table for stop bit show routines
- DW SETERR
- DW PRT1
- DW PRT15
- DW PRT2
- ;
- ;STOP argument table
- ;
- STPTBL: DB '1'+80H
- DB STBIT1,0
- DB '1.','5'+80H
- DB STBI15,0
- DB '2'+80H
- DB STBIT2,0
- DB 0
- ;
- ; Compare next input-stream item in table @DE; CY=1
- ; if not found, else HL=matched data item
- ;
- TSRCH: MVI C,LOOKUP ;get function code
- JMP MEX ;pass to MEX processor
- ;
- ; Print in-line message ... blows away C register
- ;
- ILPRT: MVI C,ILP ;get function code
- JMP MEX ;go do it
- ;------------------------------------------------------------------------------
- ;
- ;The following routines are provided to support a printer
- ;on the second serial port of the STARPLEX II which is not
- ;supported (except for USART initialization at 1200 baud)
- ;by the STARPLEX CP/M BIOS. The routine here also implements
- ;XON-XOFF support which is provided by many printers.
- ;(e.g. LA100, TI820, etc.)
- ;
- ;At my installation, there is no need to change baud rates, parity, etc
- ;but if you need to do so, just duplicate the appropriate routines
- ;from the SET command. I'd suggest then using SET PRINTER BAUD or equal
- ;to go to the proper routines. The baud rate counter for port 2 is
- ;counter 2 of the 8253 rather than counter 1. (Code 0B6H instead of 076H
- ;in PBAUD). Port addresses shown below.
- ;
- ;You do not need anything from here to the END statement UNLESS you DO want
- ;to support a serial printer on port 2 of a STARPLEX II. For systems other
- ;than STARPLEX II, (i.e. one built upon one of the SBC or BLC series boards)
- ;delete this stuff!
- ;
- PTRSTP EQU 0EFH ;USART status port address
- PTRDTP EQU 0EEH ; " data " "
- PTROKP EQU 001H ;mask for transmit busy status bit
- PTRINC EQU 002H ;mask for receiver ready status bit
- ;
- OKPRNT: DB 0FFH ;OK to PRiNT flag. OK=0FFH Hold=0
- ;
- PTRTST: ;printer status routine
- PUSH B ;save b-c registers for MEX
- IN PTRSTP ;get USART status
- MOV B,A ;save a copy in b register
- ANI PTRINC ;character in?
- JZ TSTPST ;just skip and test status if not
- IN PTRDTP ;get character
- CPI XON ;XON character
- JNZ ISXOFF ;skip if not
- MVI A,0FFH ;set OK flag
- STA OKPRNT
- JMP PSTTST ;skip to status test
- ISXOFF: CPI XOFF ;XOFF character?
- JNZ TSTPST ;skip to status test if not (ignore)
- XRA A ;reset flag
- STA OKPRNT
- JMP PSEXIT ;then exit- a is already zero indicating hold
- TSTPST:
- LDA OKPRNT ;get hold flag
- PSTTST:
- ORA A ;test for hold
- JZ PSEXIT ;exit if OK flag false (0)
- MOV A,B ;test actual USART transmitter status
- ANI PTROKP
- JZ PSEXIT ;exit if not ready
- MVI A,0FFH ;MEX wants to see an FF if ok to print
- PSEXIT: POP B ;restore saved registers
- RET ;return to MEX
- ;
- PTROUT: OUT PTRDTP ;shove character out to printer
- RET
- ;
- ;
- ; Patches to MEX for STARPLEX system. (primarily adds vectors for serial
- ; printer support)
- ;
- ORG 0D00H ;location of patch variables
- ;
- ;
- ;
- ; The following line defines the MEX service call entry point, and
- ; is not meant to be changed by the user
- ;
- DS 3 ;MEX service call processor
- DS 3 ;reserved
- DS 1 ;reserved
- ;
- ; The following line contains the initial free-memory pointer for
- ; MEX. Sophisticated modem overlays requiring additional space may change
- ; this pointer (ie, move it higher), and thus "protect" an area of RAM.
- ;
- DS 2 ;first free memory pointer
- ;
- ; Following are the lowest-level vectors for console and list I/O used
- ; by MEX. These normally point to routines that save the registers and
- ; vector to the appropriate BIOS routines. Complex applications may
- ; need to intercept (or even replace) these routines. If you do this,
- ; be sure to preserve DE, HL and BC.
- ;
- DS 2 ;console status vector
- DS 2 ;console input vector
- DS 2 ;console output vector
- DW PTROUT ;list output vector (points to local routine)
- DW PTRTST ;list status vector (points to local routine)
- ;
- ; The following line defines the location of the default MEX prompt.
- ; If you'd like to provide your own initial prompt, add a DW statement
- ; pointing to a prompt buffer structured as follows:
- ;
- ; DB <max size of buffer>
- ; DB <length of actual prompt>
- ; DB <prompt string>
- ;
- ; <maxsize> and <length> may be equal (especially if you disable the
- ; ID command by setting CHGPMT, below to 0); the ID command will, if
- ; left enabled, be limited to the <max size> value.
- ;
- DS 2 ;prompt location
- DS 1 ;reserved
- DB 24 ;for TYPE command: # lines/screen
- DB 1 ;for TYPE cmd: 1=pause 0=no pause
- DB ';' ;multiple command-line separator
- ;
- ; following five for SENDOUT command
- ;
- DB 4 ;# seconds waiting for a sendout echo
- DB 8 ;# seconds waiting for initial reply
- DB '>' ;sendout trigger char from remote
- DB 'U'-64 ;sendout char to cancel line to remote
- DB 6 ;sendout # retries
- ;
- ;
- DB 0 ;hex/decimal mode
- DB 01BH ;terminal mode escape char (01BH = ESC)
- DB 0 ;set to 1 to disable bell
- ;
- ; Buffer variables. See BUFFERS.DOC for setup information
- ;
- DB 2 ;default=2k
- DB 255 ;"big" capture buffer
- DB 16 ;16K transfer buffer
- DB 1 ;1k for 85 batch files
- DB 40 ;maximum length of PREFIX string
- DB 40 ;maximum length of SUFFIX string
- ;
- ; Misc. stuff
- ;
- DB 0 ;non-zero for CDOS
- DB 0 ;non-zero sets "wait-for-echo"
- DW 400 ;size of keystring area, in bytes
- DB 1 ;non-zero allows CIS file transfers
- DB 1 ;non zero allows STAT CIS ON or OFF
- DB 1 ;non-zero allows ID (prompt chg) command
- DB 1 ;non-zero prints ID msg in err msgs
- ;
- ; by setting the following DB to 0, you can disable the HELP
- ; command, freeing up space used by the help file index.
- ;
- DB 1 ;non-zero allows HELP command
- DB 0 ;user \/ alternate area for READ,LOAD,INI.MEX
- DB 0 ;drive/\ & HELP.MEX (if SEARCH <>0)
- DB 0 ;debugging in term-mode if non-zero
- DB 1 ;non-0 excludes $SYS from batchsend, dir
- DB 0 ;non-zero runs INI.MEX (if present) at startup
- DB 1 ;receiver wait: # seconds [Plouff patch]
- DW 150 ;size of the modem-port queue
- DB 30 ;phone library size (# entries)
- DB 0FFH ;0=silence multi-line & READ cmd echo
- DB 255 ;alert-bell count on CALL complete
- DB 0 ;non-zero: unknown commands goto READ processor
- DB 0 ;non-zero: splits phonelib printout, shows baud
- DB 0 ;search mode 0,1,2,3
- ;
- ; Following is the GLOBAL secondary options table. To
- ; set an option to global, change its ASCII character to a 0.
- ;
- DB 'BDLQRSTVX'
- ;
- ;
- ;
- ;------------------------------------------------------------
- ;
- ; End of STARPLEX MEX modem overlay and patches
- ;
- ;------------------------------------------------------------
- ;
- END