On Fri, 29 Oct 1999, Tony Duell wrote:
some extra video RAM, etc. It allows you to have
24 rows of 132
characters, extra text attributes, etc.
A second guess is that if you remove the PCB from this edge connector,
the thing goes back to being a normal VT100.
I'm going to give it a try. AT
least until I get that boot disk
and cable. Because right now when I turn it on it tells me that I have a
boot floppy error (Of Course I do, I don't have a drive cable or a disk as
of yet.)
> think it could drive a Tekky 4000 (since most things can...), but I doubt
Actually, if the machine didn't have the boot failure typing "t" would
turn it into a straight VT100 terminal mode of operation
A - Boot From A
B - Boot From B
C - Boot From C
D - Boot From D
T - Terminal mode
> > While we are on the issue of DEC stuff. Who
has the full list
> > of the Control Codes for the Rainbow 100's terminal mode? How come
> > when I fire up CP/M Modem7 or 8? I can use the Previous Screen/Next
> > Screen keys and yet in the ROM Vt100 emulation Neither key works? Is
>
> PResumably the Modem7 program is rather more user-friendlt than the one
> in ROM... Next/Prev screen were not VT100 features, AFAIK, so I guess DEC
> didn't see any need to make them work with the built-in VT100 emulator.
Actually, Modem7 is pretty stupid. I did the final version of the Mex
overlays...
I'm appending them below. The Mex overlay works pretty well with
both Kermit and
Mex114.COM
The original VT180 bios did some interesting things like interrupt
driven keyboard handling and ring buffers on the I/O.
It is still one of the slickest CP/M machines around for word
processing.
Of course WordStar's Control-S took some hacking (since it Xoff-ed the
VT... ZCPR2/3's replacemnet CP/M bios Bernie Eiben did let
you turn on and off Control-S auto replacement for <ESC>[D by poking a
bit.
>
> -tony
>
Bill
; Title - Overlay file for MEXxx
;
REV EQU 36 ; V 3.6
;
;
;This Overlay File supports the DEC Micro VT180 with CP/M.
;
;We use the COMM-Port of the Micro's. Baud-rates are "parallel"
;to the console Baud-rates - no need for a "special" baud-rate
;routine. Since the COMM-port is I/O-wise Reader/Punch, we use
;the BDOS calls.
;
;To test for COMM-status , we use I/O byte redirection in
;conjunction with direct BIOS-CONSTAT call.
;
;This technique although a little bit slower than direct I/O
;using Interrupt on INPUT is general enough to be system
;independent.
;
; - B. Eiben DEC Large System Marketing Marlboro Mass
;
; And more or less bios version independant.--Bill Pechter
;
;***********************************************************************
;
; 5-Jun-1984 Adapted from M7VT-2.ASM by Bernie Eiben.
; Rev 1.0
; Stu Fuller
;
; 17-Mar-86 Version 3.4 removed ZCPR2/3 bit manipulation. That will
; Bill Pechter now be done by poke commands in Mex/Mexplus Ini.Mex.
;
; 22-Aug-86 Version 3.5 test to fix sendout. Added test for status
; Bill Pechter and RETJNK to avoid hanging.
;
; 29-Aug-86 Final Version 3.6 supports full Remote operation.
; Bill Pechter Support for future versions from me not available
; as they will be made specifically for my modified Robin.
;
;______________________________________________________________________________
;
; ZCPR2 ZCPR3 ZCPR3 with RCP
;______________________________________________________________________________
;
; change contents EA3CH EAFEH E240H
; at this address
; to 64H from 74H to
; disable wordstar
; ^x^s cursor key
; translation.
;______________________________________________________________________________
;
; change contents EA60H EB1CH E31CH
; at this address to
; 01 from 05H to
; disable the
; automatic xoff-xon
; transmission.
;
;------------------------------------------------------------------------------
;
;bios code looks like this--example using ZCPR3 without RCP
;
; Port# Port control data
; block
;
;contents: 41H 74H 00
;address eafdH eafeH eaff
;
; 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"
;
;NOTE: DO NOT poke any bits with CP/M80 (STANDARD DEC DISTRIBUTION) or
; MultiSystem 180 (by Ken Heyda)...poking of random bits would
; be disasterous.
;
;****************************************************************************
;
;
TRUE: EQU 0FFH
FALSE: EQU 0
YES: EQU 0FFH
NO: EQU 0
;
BELL EQU 07H ;bell
TAB EQU 9
CR EQU 13 ;carriage return
LF EQU 10 ;linefeed
ESC EQU 1BH ;escape
;
;
;
I8080 equ yes
I8086 equ no
CPM equ yes
PCDOS equ no
;
;
;
; SET ONE (and only one) OF EACH SET OF THE FOLLOWING CONDITIONALS
; DEPENDING ON VERSION OF SOFTWARE and CPU TYPE
;
;
; Mex Type
;
MEXONE EQU FALSE ; version 1.10 through 1.14
MEXTWO EQU TRUE ; version 1.24 through 1.63 (MexPlus)
;
;
;
DAV EQU 0FFH ;bit(s) to test for ready
TBMT EQU 0FFH ;
;*****************************************************************************; = = =
= = = = = = = = = = = = = =
;
;
; The Check for characters at COMM-Port using I/O redirection
;
IOBYTE EQU 3 ; some definitions
;
;
DEFIO EQU 95H ;
BATIO EQU 56H ;
;
; 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
;
;
;
ORG 100H
;
IF MEXTWO
;
; LINE BELOW ADDED FOR MEX V1.24 TO MAKE LOADABLE OVERLAY
;
DB 0C3H
;
;
;
;
DS 2 ;(for "JMP START" instruction)
ENDIF;MEXTWO
;
IF MEXONE
;
DS 3
;
;
ENDIF;MEXONE
;
; Change the clock speed to suit your system
;
PMMIMODEM: DB NO ;yes=PMMI S-100 Modem 103H
SMARTMODEM: DB YES ;yes=HAYES Smartmodem, no=non-PMMI 104H
TONE DB 'P' ;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
;set to 300 baud...
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 YES ;yes=user-added Setup routine 10BH
SCRTST: 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
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
TRANLOGON: DB YES ;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
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 'B'-40H ;^B = 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
;
;
;
IF MEXTWO
;
DCDTST: JMP DCDVEC ;DATA CARIER DETECT 154H
RNGDET: JMP RNGVEC ;RING DETECT VECTOR 157H
DS 5
ENDIF;MEXTWO
;
;
IF MEXONE
;
DS 11
ENDIF;MEXONE
;
DIALV: DS 3 ;DIALV not done here (maybe MXO-SM) 162H
SMDISC: DS 3 ; smartmodem overlay DISCV likewise
; (dumb modem...now we do discon below)
DISCV: JMP DISCON ;here's where we goto on DSC cmd.
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
;
;.....
;
; LINE BELOW ADDED FOR MEX V1.24
;
IF MEXTWO
;
ORG 200H
;
;
ENDIF;MEXTWO
;
;
TELL: MVI C,ILP
CALL MEX ;Print current baud rate
DB CR,LF,'Actual baud rate from [7mSet-up B[m ',0
MVI C,ILP
CALL MEX
DB CR,LF,'Apparent Baud rate is now: ',0
LDA MSPEED
MVI C,PRBAUD
CALL MEX
RET
;
;
;
; 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 not wait until one becomes available.
;
INDP: CALL INSP
JZ RETJNK
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.
RET
;
;
RETJNK: MVI A,0 ;Return junk if not ready
RET ; so we don't hang
;
;
; The Check for characters at COMM Port using I/O redirection
;
INSP: PUSH B
PUSH D
PUSH H ; save the environment
MVI A,BATIO ; change I/O byte
STA IOBYTE
CALL BCONST ; call BIOS direct - see NITMOD
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"
LDA IOBYTE ; Save I/O byte
STA SAVEIO ;
;
;
SETCMD: MVI C,SBLANK ;Any arguments?
CALL MEX
JC TELL ;If not, go display baud
LXI D,CMDTBL
MVI C,LOOKUP
CALL MEX ;Parse argument
PUSH H ;Save any parsed argument addrs on stack
RNC ;If we have one, return to it
POP H ;Oops, input not found in table
MVI C,ILP
CALL MEX ;Tell user input not valid
DB '++(Only 110,300,600,1200,2400,9600,19200 supported)++',CR,LF,0
RET
;
CMDTBL: DB '11','0'+80H
DW OK110
;
DB '30','0'+80H
DW OK300
;
DB '60','0'+80H
DW OK600
;
DB '120','0'+80H
DW OK1200
;
DB '240','0'+80H
DW OK2400
;
DB '480','0'+80H
DW OK4800
;
DB '960','0'+80H
DW OK9600
;
DB '1920','0'+80H
DW OK19200
;
DB 0
;
;
;
;
OK110 MVI A,0
JMP LOADBD
;
OK300: MVI A,1
JMP LOADBD
;
OK600 MVI A,3
JMP LOADBD
;
OK1200: MVI A,5
JMP LOADBD
;
OK2400: MVI A,6
JMP LOADBD
;
OK4800: MVI A,7
JMP LOADBD
;
OK9600: MVI A,8
JMP LOADBD
;
OK19200: MVI A,9
;
LOADBD: STA MSPEED
RET ; area for code to set actual baud rate
; if overlay can be hacked to use
; programmable port such as general purpose
; port
;
NEWBAUD: CPI 1
JZ OK300
CPI 5
JZ OK1200
CPI 6
JZ OK2400
CPI 7
JZ OK4800
CPI 8
JZ OK9600
CPI 9
JZ OK19200
RET
;
;
BCONST: JMP $-$ ; address "filled in" by above code
;
;
IF MEXTWO
;
;
DCDVEC: IN 059H
;BIT 7,A --Z80 only instruction
DB 0CBH,07FH
JNZ RETYES ; THIS USES DSR TO DETECT CARRIER
MVI A,0
RET ; RETURN 0FFH IF CARRIER
; RETURN 0 NO CARRIER
; RETURN 0FFE IF OVERLAY DOESN'T KNOW
RNGVEC: IN 088H
;BIT 3,A --Z80 only instruction
DB 0CBH,05FH
JNZ RETYES ;
MVI A,0
RET ; RETURN 0FFH IF RING DETECTED
; RETURN 0 NO RING
; RETURN 0FFE IF OVERLAY DOESN'T KNOW
RETYES: MVI A,0FFH ; YES YOU HAVE IT...
RET
;
;
ENDIF;MEXTWO
;
SBREAK:
;pbausl EQU 90H ;The Baud-Rate register.
prntst EQU 49H ;Printer
;prndat EQU 48H
contst EQU 41H ;Console
;condat EQU 40H
gentst EQU 51H ;General port.
;gendat EQU 50H
comtst EQU 59H ;COMM-Port
;comdat EQU 58H
;output EQU 01H ;Output ready bit.
;input EQU 02H ;Input ready bit.
comctl equ 59h ;VT180 communications port
crtctl equ 41h ;VT180 crt port
;VT180 serial port command bits
txe equ 1 ;transmit enable
dtr equ 2 ;dtr on
rxe equ 4 ;rx enable
sndbrk equ 0Ah ;dtr and break...
rerr equ 10h ;reset error
rts equ 20h ;RTS on
reset equ 40h ;port reset
NODTR EQU 14H
;
;send break to comm port
;
lxi h,38500 ;250 ms(?)
mvi a,comctl ;Get address of selected port
mov c,a ;Into C
mvi a,sndbrk
; OUT C,A ;Want to send to port addressed by C
db 0EDH,079H ;Op code for above instruction
sndbrk1:dcx h ;timing loop...
mov a,l
ora h
jnz sndbrk1 ;...until over
mvi a,comctl ;Get the address for the port
mov c,a ;Into C
mvi a,txe+dtr+rxe+rerr+rts ;enable tr/rc, dtr, reset error
; out c,a ;Z-80 only instruction
db 0EDH,079H ;Op code for above instruction
out contst ;reset ports
ret
;
; DISCONNECT ROUTINE
;
DISCON: lxi h,38500 ;250 ms(?)
mvi a,comctl ;Get address of selected port
mov c,a ;Into C
mvi a,NODTR
; OUT C,A ;Want to send to port addressed by C
db 0EDH,079H ;Op code for above instruction
DISCON1:dcx h ;timing loop...
mov a,l
ora h
jnz DISCON1 ;...until over
mvi a,comctl ;Get the address for the port
mov c,a ;Into C
mvi a,txe+dtr+rxe+rerr+rts ;enable tr/rc, dtr, reset error
; out c,a ;Z-80 only instruction
db 0EDH,079H ;Op code for above instruction
out contst ;reset ports
RET
;
;
;
GOODBY: RET
;
;
SYSVER: PUSH B
PUSH D
PUSH H
LXI D,DECMSG
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
;
; Various text messages
CLSMSG: DB ESC,'[2J',ESC,'[H','$'
EOSMSG: DB ESC,'[0J','$'
;
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 'Robin--VT180'
DB ' Overlay V'
DB REV/10+'0'
DB '.'
DB REV MOD 10+'0'
DB '$'
;
CRLF: DB CR,LF,'$'
;
;
;
OVREND: EQU $ ; See if it'll fit
IF OVREND / 0B00H
+++ VT180 OVERLAY TOO LARGE - OVREND >= 0B00H +++
ENDIF
;
;
END
---
bpechter@shell.monmouth.com|pechter@pechter.dyndns.org
Three things never anger: First, the one who runs your DEC,
The one who does Field Service and the one who signs your check.