home *** CD-ROM | disk | FTP | other *** search
- ;MXO-VT10.ASM - Overlay file for MEXxx
- ;
- REV EQU 11 ;V 1.0
- ;
- ;This overlay file supports the DEC Micro VT180 running CP/M or
- ;Bernie Eiben's implementation of ZCPR2.
- ;
- ;We use the COMM Port of the VT180. Baud rates are set from the
- ;VT100 keyboard and stored in the VT100's nonvolatile RAM. There
- ;is no need for a "special" baud-rate routine. Since the
- ;COMM port is referred to RDR: and PUN:, we use MEX calls (which
- ;in turn calls the BDOS).
- ;
- ;To test for COMM status, we use IObyte redirection in conjunction
- ;with direct BIOS CONSTAT call.
- ;
- ;This technique, although slower than direct handling of the
- ;hardware, takes advantage of the BIOS routines already built in,
- ;thereby making our code smaller.
- ;
- ;***********************************************************************
- ;
- ; 6-JUN-1985 Fixed problem with INDP routine that prevented
- ; SENDOUT from working (Ron Fowler)
- ;
- ; 5-Jun-1984 Adapted from M7VT-2.ASM by Bernie Eiben. Removed
- ; Rev 1.0 the Rainbow conditionals. This overlay won't
- ; Stuart Fuller work on a Rainbow in file transfer mode without
- ; some bit twiddling on the 8088 side. Added tests
- ; for running under ZCPR2 and bit twiddle
- ; accordingly.
- ;
- ; = = = = = = = = = = = = = = = = =
- ;
- BELL: EQU 07H ;bell
- CR: EQU 0DH ;carriage return
- ESC: EQU 1BH ;escape
- LF: EQU 0AH ;linefeed
- ;
- TRUE: EQU 0FFH
- FALSE: EQU 0
- 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=none 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
- ;
- PUNCH: EQU 4 ;BDOS/MEX punch function
- READER: EQU 3 ;BDOS/MEX reader function
- PRINT EQU 9 ;BDOS/MEX print-string function call
- ;
- ; Miscellanea for VT180
- ;
- IOBYTE EQU 3 ; for I/O redirection
- BATIO EQU 56H ;
- AALOAD EQU 0EA39H ; ZCPR2 Bios sub-version
- CALOAD EQU AALOAD + 1 ; Safety check location
- LODNUM EQU 28 ; Current version - should be in AALOAD
- CLDNUM EQU NOT LODNUM AND 0FFH ; This should be in CALOAD
- CRTCB EQU 0EA3BH ; CRT control block addr - flags are at +1
- PTRCB EQU 0EA59H ; Likewise for PTR
- QMRCVFL EQU 01H ; Mask to allow me to send XON/XOFF
- QMXOFFD EQU 02H ; Mask indicating I sent an XOFF
- QMXMTFL EQU 04H ; Mask to allow other end to stop me
- QMSUSP EQU 08H ; Mask indicating I got an XOFF
- QMARROW EQU 10H ; Mask for arrow xlate bit
- QMBIT7 EQU 20H ; Mask for "use only 7 bits"
- QMCCFLS EQU 40H ; Mask for "flush buffer if 2 ^C's seen"
- QM1STCC EQU 80H ; Mask for "first ^C seen"
- ;
- BELL EQU 7 ;bell
- TAB EQU 9
- CR EQU 13 ;carriage return
- LF EQU 10 ;linefeed
- ESC EQU 1BH ;escape
- YES EQU 0FFH
- NO EQU 0
- ;
- DAV EQU 0FFH ;bit(s) to test for ready
- TBMT EQU 0FFH ;
- ;
- ORG 100H
- ;
- ; Change the clock speed to suit your system
- ;
- DS 3 ;(for "JMP START" instruction)
-
- DB NO ;yes=PMMI S-100 Modem 103H
- DB YES ;yes=HAYES Smartmodem, no=non-PMMI 104H
- 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
- COLUMS: DB 5 ;number of DIR columns shown 10AH
- SETFLG: DB NO ;yes=user-added Setup routine 10BH
- SCRTST: DB YES ;Cursor control routine 10CH
- DB YES ;yes=resend a record after any non-ACK 10DH
- ;no=resend a record after a valid-NAK
- BAKFLG: DB YES ;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
- CVTBS: 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)
- TOGLF: DB YES ;yes=allow toggling of LF after CR 114H
- DB YES ;yes=allow transmission of logon 115H
- ;write logon sequence at location LOGON
- SAVCCP: DB YES ;yes=do not overwrite CCP 116H
- DB NO ;yes=local command if EXTCHR precedes 117H
- ;no=external command if EXTCHR precedes
- DB YES ;yes=allow toggling of LOCONEXTCHR 118H
- LSTTST: DB YES ;yes=printer available on printer port 119H
- XOFTST: DB NO ;yes=checks 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 NO ;yes=CTL-chars above ^M not displayed 11DH
- EXTRA1: DB 0 ;for future expansion 11EH
- EXITCHR DB 'E'-40H ;^E = Exit to main menu 11FH
- BRKCHR: DB '@'-40H ;^@ = Send 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
- UNSAVE: 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 ;unused by MEX 128H
- ;
- INCTL1: JMP INSP ;go input status port 12AH
- DS 7
- ;
- OTDATA: JMP OUTDP ;go output data port 134H
- DS 7
- ;
- INPORT: JMP INDP ;go input data port 13EH
- DS 7
- ;
- MASKR: ANI DAV ! RET ;bit to test for receive ready 148H
- TESTR: CPI DAV ! RET ;value of rcv. bit when ready 14BH
- ; Note: most overlays will use ANI TBMT at MASKS.
- ; However, we don't bother with it here. TESTS: will always return ready
- MASKS: MVI A,TBMT ! RET ;bit to test for send ready 14EH
- TESTS: CPI TBMT ! RET ;value of send bit when ready 151H
- DS 14 ; 156H
- ;
- ;
- DIALV: DS 3 ;DIALV not done here (maybe MXO-SM) 162H
- DISCV: DS 3 ;DISCV likewise
- GOODBV: JMP GOODBY ; 168H
- INMODV: JMP NITMOD ;go to user written routine 16BH
- RET ! NOP ! NOP ;NEWBDV 16EH
- RET ! NOP ! NOP ;NOPARV 171H
- RET ! NOP ! NOP ;PARITV 174H
- SETUPV: JMP SETCMD ; 177H
- DS 3 ;not used by MEX 17AH
- VERSNV: JMP SYSVER ; 17DH
- BREAKV: JMP SBREAK ; 180H
- ;
- ; Do not change the following six lines (they provide access to routines
- ; in MEX that are present to support MDM7 overlays -- they will likely
- ; be gone by MEX v2.0).
- ;
- ILPRTV: DS 3 ; 183H
- INBUFV DS 3 ; 186H
- ILCMPV: DS 3 ; 189H
- INMDMV: DS 3 ; 18CH
- DS 3 ; 18FH
- TIMERV DS 3 ; 192H
- ;
- ; Routine to clear to end of screen. If using CLREOS and CLRSCRN, set
- ; SCRTEST to YES at 010AH (above).
- ;
- ;
- CLREOS: LXI D,EOSMSG ; 195H
- MVI C,PRINT
- CALL MEX
- RET
- ;
- CLS: LXI D,CLSMSG ; 19EH
- MVI C,PRINT
- CALL MEX
- RET
- ;
- ; End of fixed areas
- ;
- ;.....
- ;
- ;
- ; Modem I/O primitive
- ;
- ; Subroutine to output a character to the modem.
- ; This routine does it's own status checking.
- ;
- OUTDP: PUSH B ;save...
- PUSH D ;...the...
- PUSH H ;...registers.
- MOV E,A ;move output byte into E
- MVI C,PUNCH ;use the BDOS function
- CALL MEX ;go
- POP H ;restore...
- POP D ;...the...
- POP B ;...registers.
- RET
- ;.....
- ;
- ;
- ; Subroutine to input a character from the modem.
- ; This routine will wait until one becomes available.
- ;
- INDP: CALL INSP
- ORA A
- JZ INDPNR ;if no char, go return last
- PUSH B ;save...
- PUSH D ;...the...
- PUSH H ;...regesters.
- MVI C,READER ;use the BDOS function
- CALL MEX ;go
- POP H ;restore...
- POP D ;...the...
- POP B ;...registers.
- STA LASTCH ;always save most recent char
- RET
- INDPNR: LDA LASTCH ;return old char
- RET
- ;
- ; The Check for characters at COMM Port using I/O redirection
- ;
- INSP: PUSH B
- PUSH D
- PUSH H ; save the environment
- LDA IOBYTE ; Including the IOByte
- STA SAVEIO ;
- MVI A,BATIO ; change I/O byte
- STA IOBYTE
- CALL BCONST ; call BIOS direct - see INITMOD
- PUSH A
- LDA SAVEIO ; change I/O byte back
- STA IOBYTE
- POP A
- POP H ; restore environment
- POP D
- POP B
- RET
- ;
- NITMOD: LHLD 1 ; Get BIOS Jump-table adress
- LXI D,3
- DAD D ; CONSTAT routine in BIOS
- SHLD BCONST+1 ; modify our "routine"
- RET
- ;
- BCONST: JMP $-$ ; address "filled in" by above code
- ;
- SBREAK: RET
- ;
- GOODBY: LDA ZCPR2
- ORA A
- RZ ; If running CP/M, then just return
- LDA CRTSAV ; Else, we gotta put things back again.
- STA CRTCB+1
- LDA PTRSAV
- STA PTRCB+1
- RET
- ;
- SETCMD: RET
- ;
- SYSVER: PUSH B
- PUSH D
- PUSH H
- LXI D,DECMSG
- MVI C,PRINT
- CALL MEX
- ; Gotta do the check for ZCPR2 here, SYSVER gets called before INMODV
- MVI A,NO ; zero A
- STA ZCPR2 ; assume CP/M
- LDA AALOAD ; get "load number" from BIOS
- CPI LODNUM ; and see if it's right
- JNZ NOTZCP ; nope, go
- LDA CALOAD ; next check its complement
- CPI CLDNUM
- JNZ NOTZCP
- MVI A,YES ; must be ZCPR2
- STA ZCPR2
- LXI H,CRTCB+1 ; get CRT's flag byte
- MOV A,M
- STA CRTSAV ; save it
- ANI 0FFH XOR QMARROW ; and zap the arrow xlate flag
- MOV M,A
- LXI H,PTRCB+1 ; do the same for the PTR
- MOV A,M
- STA PTRSAV
- MVI M,QMRCVFL ; keep only RCVFLOW bit
- ; Finished with check for ZCPR2
- NOTZCP: LDA ZCPR2
- ORA A
- JZ SYSVE1
- LXI D,ZCPMSG
- MVI C,PRINT
- CALL MEX
- SYSVE1: LXI D,CRLF
- MVI C,PRINT
- CALL MEX
- POP H
- POP D
- POP B
- RET
- ;
- ; Miscellaneous storage
- ;
- SAVEIO: DB 0 ; Save the original IObyte here
- CRTSAV: DB 0 ; Save the CRT flags from ZCPR2's Bios
- PTRSAV: DB 0 ; Likewise for the PTR flags
- ZCPR2: DB 0 ; Indicates running ZCPR2
- ;
- ; Various text messages
- ;
- XSO EQU 14 ;"shift out" character
- XSI EQU 15 ;"shift in" character
- ;
- DECMSG: DB 'Version for: ',ESC,'[7m',ESC,')0'
- DB 'd',XSO,'x',XSI
- DB 'i',XSO,'x',XSI
- DB 'g',XSO,'x',XSI
- DB 'i',XSO,'x',XSI
- DB 't',XSO,'x',XSI
- DB 'a',XSO,'x',XSI
- DB 'l',ESC,'[m '
- DB 'DEC VT180'
- DB ' Overlay V'
- DB REV/10+'0'
- DB '.'
- DB REV MOD 10+'0'
- DB '$'
- ;
- ZCPMSG: DB ' running ZCPR2.','$'
- CRLF: DB CR,LF,'$'
- ;
- CLSMSG: DB ESC,'[2J',ESC,'[H','$'
- EOSMSG: DB ESC,'[0J','$'
- ;
- ;
- OVREND: EQU $ ; See if it'll fit
- IF OVREND / 0B00H
- +++ VT180 OVERLAY TOO LARGE - OVREND >= 0B00H +++
- ENDIF
- ;
- LASTCH: DB 0
- ;
- END
- ;
-
-