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
/
ENTERPRS
/
CPM
/
UTILS
/
S
/
VDE267SC.LBR
/
VI.AZM
/
VI.ASM
Wrap
Assembly Source File
|
2000-06-30
|
42KB
|
2,308 lines
;*** VINSTALL.ASM - Installation Utility
;*** for VDE (Video Display Editor) v2.66
;*** (c)1988 E. Meyer - For nonprofit use only.
; Last modified 06/07/88
; ---------------------------
;USAGE: A>vinstall vde.com [instfil]
; ---------------------------
; Patch field 0106-010F:
;0106: version 0108: upat,len 010B: basic,esc,^O,^Q tables
; Version message 0113-012F
; User data field: 0130-015F
;BAKFlg,FMode,FDflt1/2(8),InsDfl,RulFlg,HCDflt,HypFlg,
;LfMarg,RtMarg,Ovlap,DirSys,FixDsk(2),NoTrap,Ring,Help,AltHdr,NoHdrF,
;MHz,Timer,TabCnt,VarTab(8),WildCd,BlkChr,TogTbl(4),NTgTbl(4)
; VDE terminal installation: 0160-01BF (TRMLEN)
;ID(16);View,AuWrap,Lines,UsrKys(DEL,u,d,r,l)
;ClL;TInit,TUInit;AltOn;AltOff;AltBit;Filter
;PosMod,PCu(4),PosDly;InsL,DelL,OddDel
; VDM terminal installation 0160-01BF
;ID(16);View,Extra,Lines,UsrKys(DEL,u,d,r,l)
;TInit,TUInit;CuOff;CuOn
;VidRAM;VidIN;VidOUT
; PRINTER installation 01C0-024F
;ID(16);UseLF,FormL,PTMarg,PrLMrg;PInit,PUInit
;PCodes (8*8); UCodes (4*8)
; USER PATCHES: 0250-027F
; MACRO KEYS: 0280-047F (VDESTRT)
;
OPTIONS EQU 0130H ;<---keep these updated!
INSTALL EQU 0160H
PRINTER EQU 01C0H
USERPAT EQU 0250H
MACKEYS EQU 0280H
VDESTRT EQU 0480H
;
StrSiz EQU 128 ;from VDE.ASM
Keys EQU BUF+(MACKEYS-100H) ;where the keys are (512 bytes)
;
; ---------------------------
;
VVERSN EQU 6602H ;VDE.COM compatibility version (options etc)
IVERSN EQU 6002H ;for inst files
KVERSN EQU 5002H ;for key files
PVERSN EQU 6602H ;for prt files
;
ORG 0100H
;
START: SUB A ;check for Z80
RET PE
LD (USTAK),SP
LD SP,STACK
LD HL,(0001H)
LD DE,3
ADD HL,DE
ADD HL,DE
LD (GETCH+1),HL
ADD HL,DE
LD (PUTCH+1),HL
LD HL,COMTYP
LD DE,FCB+9
LD BC,3
LDIR
CALL SPMSG
DB 'VDE(M) 2.66 INSTALL (06/88)',CR,LF
DB '(c)1988 E.Meyer',CR,LF,LF
DB '[Opening ',0
LD HL,FCB+1
LD B,11
CALL BHLMSG
LD HL,FCB2 ;set up install file fcb
LD DE,IFCB
LD BC,12
LDIR
LD DE,FCB ;open VDE.COM
LD C,FOPN
CALL BDOS
INC A
JP Z,NOFMSG
LD HL,BUF
LD DE,FCB
LD B,VDESTRT/80H-2
CALL READLP
JP C,RDERR
LD HL,(BUF+6) ;check version at 0106-7
RES 7,L
LD DE,VVERSN
SBC HL,DE
JP NZ,VERR
CALL ISVDE ;set up inst filetype
JR Z,IFIL1
LD A,'M'
LD (VDETYP+2),A
IFIL1: LD DE,IFCB+9 ;and use it if needed
LD A,(DE)
CP ' '
JR NZ,IFIL1B
LD HL,VDETYP
LD BC,3
LDIR
IFIL1B: LD HL,IBUF ;zero IBUF
LD DE,IBUF+1
LD BC,512-1
LD (HL),0
LDIR
LD A,(IFCB+1) ;is there an accessory file?
CP ' '
JP Z,BEGIN
;
CALL SPMSG
DB ', ',0
LD HL,IFCB+1
LD B,11
CALL BHLMSG
LD DE,IFCB+9
LD HL,VDETYP
LD A,(DE)
CP (HL)
JP NZ,RDERR
INC HL
INC DE
LD A,(DE)
CP (HL)
JP NZ,RDERR
INC HL
INC DE
LD A,(DE)
CP (HL)
JR Z,IFIL1C
CP 'K' ;not VDx, is it VDK?
JR Z,IFIL1C
CP 'P' ;or VDP?
JP NZ,RDERR
IFIL1C: LD DE,IFCB ;open it
LD C,FOPN
CALL BDOS
INC A
JP NZ,IFIL2 ;if it exists
LD DE,IFCB
LD C,FMAK
CALL BDOS ;else, make it
INC A
JP Z,WRERR
JP BEGIN
IFIL2: LD A,(IFCB+11)
LD HL,IBUF
LD DE,IFCB
CP 'P'
JR Z,IFIL4
CP 'K'
JR NZ,IFIL3
LD B,4 ;read 4 rec of VDK
CALL READLP
JP C,RDERR
LD HL,(IBUF) ;check version
LD DE,KVERSN
SBC HL,DE
JP NZ,VERR
LD HL,IBUF ;install it
LD DE,Keys
LD BC,512
LDIR
JR BEGIN
IFIL3: LD B,1 ;read 1 rec of VDx
CALL READLP
JP C,RDERR
LD HL,(IBUF)
LD DE,IVERSN ;check version
SBC HL,DE
JP NZ,VERR
LD HL,IBUF+10H ;install the data
LD DE,BUF+(INSTALL-100H)
LD BC,TRMLEN
LDIR
JR BEGIN
IFIL4: LD B,2 ;read 2 rec of VDP
CALL READLP
JP C,RDERR
LD HL,(IBUF)
LD DE,PVERSN ;check version
SBC HL,DE
JP NZ,VERR
ifil6: LD HL,IBUF+10H
LD DE,BUF+(PRINTER-100H)
LD BC,PRTLEN
LDIR
BEGIN: CALL SPMSG
DB ']',CR,LF,LF,'Installing: ',0
LD HL,BUF+13H ;show VDE version msg
LD B,27
CALL BHLMSG
JP MENU
;
LOOP: CALL SPMSG
DB CR,LF,LF,'...Press <ESC> to see Main Menu',0
MLP0: CALL INPCH
CP ESC
JR NZ,MLP0
MENU: CALL SPMSG
DB CR,LF,LF,LF
DB '--------------- VINSTALL MENU ---------------',CR,LF
DB '<O>ption configuration <K>ey definitions',CR,LF
DB '<T>erminal installation <F>urther patching',CR,LF
DB '<P>rinter installation <R>estore defaults',CR,LF
DB CR,LF,'Choose option, <S>ave, <Q>uit, or <H>elp: ',0
MNUI: CALL INPCH
CALL UCASE
CALL CASE
DB MNULEN/3
MNU: DW BADOPT
DB 'O'
DW USER
DB 'T'
DW TERM
DB 'P'
DW PRINT
DB 'K'
DW KEDIT
DB 'F'
DW PATCH
DB 'Q'
DW ABORT
DB 'R'
DW RESTOR
DB 'S'
DW SAVE
DB 'H'
DW HELPME
MNULEN EQU $-MNU
JP LOOP
BADOPT: POP HL
JP MNUI
;
;
HELPME: CALL SPMSG
DB CR,LF,LF
DB 'VINSTALL HELP -- press ^C at any time to abort VINSTALL',CR,LF,LF
DB ' VINSTALL is menu driven; however, there are several types',CR,LF
DB 'of data entry in use:',CR,LF
DB ' LOGICAL values: simply enter "Y" or "N" (Yes/No).',CR,LF
DB ' DECIMAL values: enter a number from 0-255.',CR,LF
DB ' HEX (byte) values: 2 digits 0-F (don''t omit lead zeros).',CR,LF
DB ' BYTE STRINGS: Fixed length - just enter the required',CR,LF
DB ' number of HEX bytes, 2 digits each.',CR,LF
DB ' Variable length - enter the HEX # of bytes',CR,LF
DB ' at the "(" prompt, up to the "[max]" value shown,',CR,LF
DB ' then the bytes themselves.',CR,LF
DB ' CHARACTERS: type the single character directly.',CR,LF
DB ' TEXT STRINGS: enter text, then <CR> to end.',CR,LF,LF
DB ' For all items you can either press <CR> immediately to',CR,LF
DB 'keep the current value, or enter a new value instead.',CR,LF
DB '(See VDE.DOC for further explanation of patches and values.)'
DB CR,LF,0
RET
;
;Restore default values
;
RESTOR: CALL SPMSG
DB CR,LF,LF,'RESTORE DEFAULTS:'
DB CR,LF,'This will restore VDE to its original distribution'
DB CR,LF,'state: default options, terminal, and printer;'
DB CR,LF,'no function keys, no user patches.'
DB CR,LF,LF,'Proceed? (Y/N) ',0
CALL INPCH
CALL UCASE
CP 'Y'
RET NZ
LD HL,DEFOPT
LD DE,BUF+(OPTIONS-100H)
LD BC,OPTLEN
LDIR
LD HL,NULPRT
LD DE,BUF+(PRINTER-100H)
LD BC,PRTLEN
LDIR
CALL VKwipe
LD HL,VDESTRT
LD (BUF+1),HL
LD HL,0
LD (BUF+4),HL
LD HL,BUF+(USERPAT-100H)
LD D,H
LD E,L
INC DE
LD (HL),0
LD BC,(MACKEYS-1)-(USERPAT-100H)
LDIR
CALL ISVDE
LD HL,DEFTRM
JR Z,RESTR1
LD HL,OSB2
RESTR1: LD DE,BUF+(INSTALL-100H)
LD BC,TRMLEN
LDIR
CALL SPMSG
DB ' Done.',0
RET
;
; User options
;
USER: CALL SPMSG
DB CR,LF,LF,'USER OPTIONS:'
DB CR,LF,'Create BAKup files: ',0
LD HL,BUF+(OPTIONS-100H)
CALL LVAL
CALL SPMSG
DB CR,LF,'Default file mode (W/A/N): ',0
CALL AVAL
CALL SPMSG
DB CR,LF,'Auto mode select filetype 1: ',0
LD B,3
CALL SVAL
CALL SPMSG
DB ' Mode: ',0
CALL AVAL
CALL SPMSG
DB CR,LF,'Auto mode select filetype 2: ',0
LD B,3
CALL SVAL
CALL SPMSG
DB ' Mode: ',0
CALL AVAL
CALL SPMSG
DB CR,LF,'Default insert on: ',0
CALL LVAL
CALL SPMSG
DB CR,LF,'Default ruler on: ',0
CALL LVAL
CALL SPMSG
DB CR,LF,'Default HCR display on: ',0
CALL LVAL
CALL SPMSG
DB CR,LF,'Enable hyphenation: ',0
CALL LVAL
CALL SPMSG
DB CR,LF,'Left margin col: ',0
CALL DVAL
CALL SPMSG
DB CR,LF,'Right margin col: ',0
CALL DVAL
CALL SPMSG
DB CR,LF,'Scroll overlap: ',0
CALL DVAL
CALL SPMSG
DB CR,LF,'Show system files: ',0
CALL LVAL
CALL SPMSG
DB CR,LF,'Fixed drives (A-P): ',0
LD B,2
CALL SVAL
CALL SPMSG
DB CR,LF,'Ring bell on error: ',0
CALL LVAL
CALL SPMSG
DB CR,LF,'Enable help menus: ',0
CALL LVAL
CALL SPMSG
DB CR,LF,'Use alt video in header: ',0
CALL LVAL
CALL SPMSG
DB CR,LF,'Suppress header by default: ',0
CALL LVAL
CALL SPMSG
DB CR,LF,'Clock speed in MHz: ',0
CALL HVAL
CALL SPMSG
DB CR,LF,'Horizontal scroll delay: ',0
CALL HVAL
CALL SPMSG
DB CR,LF,'Fixed tab display spacing: ',0
CALL ADJ1
CALL DVAL
CALL UNADJ1
CALL SPMSG
DB CR,LF,'Variable tab columns: ',CR,LF,0
LD B,4
CALL DBVAL
CALL CRLF
LD B,4
CALL DBVAL
CALL SPMSG
DB CR,LF,LF,'MODIFY DEFAULT CHARACTERS? (Y/N) ',0
PUSH HL
CALL INPCH
CALL UCASE
POP HL
CP 'Y'
RET NZ
CALL SPMSG
DB CR,LF,'Wildcard character: ',0
CALL AVAL
CALL SPMSG
DB CR,LF,'Code for block marker: ',0
CALL HVAL
CALL SPMSG
DB CR,LF,'Print toggles 1-4 (^B,D,S,Y): ',0
LD B,4
CALL BNVAL
CALL SPMSG
DB CR,LF,'Print switches 1-4 (^Q,W,E,R): ',0
LD B,4
CALL BNVAL
RET
;
ADJ1: INC (HL) ;adjust "-1" value up for display
RET
UNADJ1: DEC HL ;adjust "-1" value down after entry
DEC (HL)
INC HL
RET
;
; Terminal installation
;
TERM: CALL SPMSG
DB CR,LF,LF,'TERMINAL INSTALLATION: ',0
CALL ISVDE
JR NZ,TERM01
CALL SPMSG
DB 'Generic Terminal Version',0
JR TERM02
TERM01: CALL SPMSG
DB 'Memory Mapped Version',0
TERM02: CALL SPMSG
DB CR,LF,'Currently "',0
LD HL,BUF+(INSTALL-100H)
LD B,16
CALL BHLMSG
CALL SPMSG
DB '"',CR,LF,'Choose: <E>dit current or <L>ist terminals: ',0
TERM03: CALL INPCH
CALL UCASE
CP 'E'
JP Z,TERMED
CP 'L'
JR NZ,TERM03
CALL SPMSG
DB CR,LF,LF,'Terminals: press <Y> to select from list:',CR,LF,0
LD HL,VDEDAT
CALL ISVDE
JR Z,TERM04
LD HL,VDMDAT
TERM04: LD A,(HL) ;length of list
INC HL
LD B,A
TLIST: PUSH BC
PUSH HL
LD B,16
CALL BHLMSG
CALL SEPMSG
CALL INPCH
CALL UCASE
PUSH AF
CALL CRLF
POP AF
POP HL
POP BC
CP 'Y'
JR Z,TLISTY
LD DE,TRMLEN
ADD HL,DE
DJNZ TLIST
CALL SPMSG
DB '(End of list)',0
RET
TLISTY: LD DE,BUF+(INSTALL-100H) ;okay, install it
LD BC,TRMLEN
LDIR
CALL SPMSG
DB 'Selected',0
RET
;
TERMED: CALL SPMSG
DB CR,LF,LF,'Editing installation - ',0
CALL ISVDE
JP NZ,TERMM
CALL SPMSG
DB 'Generic Terminal Version'
DB CR,LF,'Terminal ID: ',0
LD HL,BUF+(INSTALL-100H)
LD B,16
CALL SVAL
CALL SPMSG
DB CR,LF,'Viewable columns: ',0
CALL DVAL
CALL SPMSG
DB CR,LF,'Auto wrap at line end: ',0
CALL LVAL
CALL SPMSG
DB CR,LF,'Viewable lines: ',0
CALL DVAL
CALL SPMSG
DB CR,LF,'Extra DELete key: ',0
CALL HVAL
CALL SPMSG
DB CR,LF,'Extra arrow keys u/d/r/l: ',0
LD B,4
CALL BNVAL
INC HL ;skip blank byte
CALL SPMSG
DB CR,LF,'Clear to end of line [06]: ',0
LD B,6
CALL BVAL
CALL SPMSG
DB CR,LF,'Terminal init [07]: ',0
LD B,7
CALL BVAL
CALL SPMSG
DB CR,LF,'Terminal deinit [07]: ',0
LD B,7
CALL BVAL
CALL SPMSG
DB CR,LF,'Alternate video on [06]: ',0
LD B,6
CALL BVAL
CALL SPMSG
DB CR,LF,'Alternate video off [06]: ',0
LD B,6
CALL BVAL
CALL SPMSG
DB CR,LF,'Alt video uses high bit: ',0
CALL LVAL
CALL SPMSG
DB CR,LF,'Output filter limit: ',0
CALL HVAL
CALL SPMSG
DB CR,LF,'Cursor position mode (Std/Rev/ANSI/None): ',0
CALL AVAL
CALL SPMSG
DB CR,LF,'[Non-ANSI] Cursor position sequence: ',0
LD B,4
CALL BNVAL
CALL SPMSG
DB CR,LF,'Delay after cursor positioning: ',0
CALL HVAL
CALL SPMSG
DB CR,LF,'Insert line [06]: ',0
LD B,6
CALL BVAL
CALL SPMSG
DB CR,LF,'Delete line [06]: ',0
LD B,6
CALL BVAL
CALL SPMSG
DB CR,LF,'Ins/del specific to line 1: ',0
CALL LVAL
RET
;
TERMM: CALL SPMSG
DB 'Memory Mapped Version'
DB CR,LF,'Terminal ID: ',0
LD HL,BUF+(INSTALL-100H)
LD B,16
CALL SVAL
CALL SPMSG
DB CR,LF,'Viewable columns: ',0
CALL DVAL
CALL SPMSG
DB CR,LF,'Unused columns in RAM: ',0
CALL DVAL
CALL SPMSG
DB CR,LF,'Viewable lines: ',0
CALL DVAL
CALL SPMSG
DB CR,LF,'Extra DELete key: ',0
CALL HVAL
CALL SPMSG
DB CR,LF,'Extra arrow keys u/d/r/l: ',0
LD B,4
CALL BNVAL
LD DE,8
ADD HL,DE ;skip 8 blank bytes
CALL SPMSG
DB CR,LF,'Terminal init [07]: ',0
LD B,7
CALL BVAL
CALL SPMSG
DB CR,LF,'Terminal deinit [07]: ',0
LD B,7
CALL BVAL
CALL SPMSG
DB CR,LF,'Turn cursor off [06]: ',0
LD B,6
CALL BVAL
CALL SPMSG
DB CR,LF,'Turn cursor on [06]: ',0
LD B,6
CALL BVAL
CALL SPMSG
DB CR,LF,'Video RAM start addr: ',0
CALL H2VAL
CALL SPMSG
DB CR,LF,'Z80 video in routine:',CR,LF,' ',0
LD B,16
CALL BNVAL
CALL SPMSG
DB CR,LF,'Z80 video out routine:',CR,LF,' ',0
LD B,16
CALL BNVAL
RET
;
; Printer installation
;
PRINT: CALL SPMSG
DB CR,LF,LF,'PRINTER INSTALLATION:'
DB CR,LF,'Printer ID: ',0
LD HL,BUF+(PRINTER-100H)
LD B,16
CALL SVAL
CALL SPMSG
DB CR,LF,'Send LF after CR: ',0
CALL LVAL
CALL SPMSG
DB CR,LF,'Page length, lines: ',0
CALL DVAL
CALL SPMSG
DB CR,LF,'Top margin, lines: ',0
CALL DVAL
CALL SPMSG
DB CR,LF,'Left margin, columns: ',0
CALL DVAL
CALL SPMSG
DB CR,LF,'Printer initialization [13]:',CR,LF,' ',0
LD B,19
CALL BVAL
CALL SPMSG
DB CR,LF,'Printer deinit [07]: ',0
LD B,7
CALL BVAL
CALL SPMSG
DB CR,LF,'^B toggle on [07]: ',0
LD B,7
CALL BVAL
CALL SPMSG
DB CR,LF,' ...and off [07]: ',0
LD B,7
CALL BVAL
CALL SPMSG
DB CR,LF,'^D toggle on [07]: ',0
LD B,7
CALL BVAL
CALL SPMSG
DB CR,LF,' ...and off [07]: ',0
LD B,7
CALL BVAL
CALL SPMSG
DB CR,LF,'^S toggle on [07]: ',0
LD B,7
CALL BVAL
CALL SPMSG
DB CR,LF,' ...and off [07]: ',0
LD B,7
CALL BVAL
CALL SPMSG
DB CR,LF,'^Y toggle on [07]: ',0
LD B,7
CALL BVAL
CALL SPMSG
DB CR,LF,' ...and off [07]: ',0
LD B,7
CALL BVAL
CALL SPMSG
DB CR,LF,'^Q switch [07]: ',0
LD B,7
CALL BVAL
CALL SPMSG
DB CR,LF,'^W switch [07]: ',0
LD B,7
CALL BVAL
CALL SPMSG
DB CR,LF,'^E switch [07]: ',0
LD B,7
CALL BVAL
CALL SPMSG
DB CR,LF,'^R switch [07]: ',0
LD B,7
CALL BVAL
RET
;
;
; Function keys
;
KEDIT: CALL DISPLA ;this is the big loop
CALL SPMSG
DB CR,LF,LF,'Select <0-9> or <Z>ap; or <CR> to exit: ',0
EDIT0: CALL INPCH
CALL UCASE
CP CR
RET Z ;all done?
CP 'Z'
JP Z,ZAP
LD (GSCHR),A ;put char in input prompt
SUB '0'
JP C,EDIT0
CP 9+1
JP NC,EDIT0
LD (KEYNUM),A
CALL SPMSG
DB CR,LF,'New definition: (<BS> edits, <CR> saves; use ^P to '
DB 'enter these)',CR,LF,0
CALL GETSTR
CALL NC,CHANGE
JP KEDIT
;
ZAP: CALL VKwipe
JP KEDIT
;
DISPLA: CALL SPMSG ;show the fnkeys (adapted from FNK.ASM)
DB CR,LF,LF,LF,'MACRO KEYS: (',0
CALL VerKey
LD HL,Keys+1
CALL HOUT
LD HL,Keys
CALL HOUT
CALL SPMSG
DB ' bytes free)',0
LD HL,Keys+2
LD B,10
DSPLP: LD A,10
SUB B
PUSH BC
PUSH HL
ADD '0'
LD (DSCHR),A
CALL SPMSG
DB CR,LF,'<'
DSCHR: DB '?>',0 ;<---- label goes here
POP HL
CALL CTLMSG ;show string
POP BC
DJNZ DSPLP
RET
;
GETSTR: CALL SPMSG ;get new string
DB '<'
GSCHR: DB '?>',0 ;<---- label goes here
LD HL,STRING+1
LD B,StrSiz ;max length
GSLP: PUSH BC
PUSH HL
CALL GETCH ;get char
POP HL
POP BC
CP CR
JR Z,GSCR ;CR ends
;CP ESC
;JR Z,GSESC ;ESC quits
CP BS
JR Z,GSBS ;BS corrects
CP 'P'-40H
JR Z,GSCTLP ;^P enters ^code
GSADD: LD (HL),A
INC HL
PUSH BC
PUSH HL
CALL TYPE ;show it
POP HL
POP BC
DJNZ GSLP ;count it (fall thru to BS if full)
GSBS: LD A,StrSiz-1
SUB B
JR C,GSLP ;erase one?
INC B
DEC HL ;back up
LD A,(HL)
CP ' '
CALL C,GSWIPE ;wipe "^" if present
CALL GSWIPE ;wipe out char
JR GSLP
GSCTLP: PUSH BC ;enter ^-code
PUSH HL
CALL GETCH
AND 1FH
POP HL
POP BC
JR GSADD
GSCR: LD HL,STRING ;done, point to result
LD A,StrSiz
SUB B
LD (HL),A ;install length
OR A
RET
GSESC: SCF ;return with Carry if ESC
RET
STRING: DS StrSiz+1
;
GSWIPE: PUSH BC ;wipe out a character
PUSH HL
CALL SPMSG
DB BS,' ',BS,0
POP HL
POP BC
RET
;
KEYNUM: DS 1 ;which key?
CHANGE: LD A,(KEYNUM) ;all set to change key (from VDE.ASM)
LD D,A
LD A,(STRING)
LD E,A
LD HL,Keys+2
LD A,D
OR A
JR Z,MKlp1F
MKlp1: LD C,(HL)
LD B,0 ;find key in list
ADD HL,BC
INC HL
DEC A
JR NZ,MKlp1
MKlp1F: LD A,(HL) ;old length
OR A
JR Z,MK1
PUSH DE
PUSH HL ;delete old one
LD E,(HL)
LD D,0
LD (HL),0
INC HL
EX DE,HL
ADD HL,DE
LD B,H
LD C,L
PUSH HL
LD HL,Keys+200H
OR A
SBC HL,BC ;bytes to move
LD B,H
LD C,L
POP HL
LDIR
CALL VerKey
POP HL
POP DE
MK1: LD A,E ;anything to add?
OR A
JP Z,MKDone
LD A,(Keys+1) ;will it fit
OR A
JR NZ,MK1a
LD A,(Keys)
SUB E
RET C ;sorry, NO
MK1a: LD (HL),E ;yes
INC HL
LD C,E
LD B,0
PUSH HL
LD HL,Keys+200H-1
LD D,H
LD E,L
OR A
SBC HL,BC ;from here
POP BC
PUSH HL
SBC HL,BC ;bytes to move
LD B,H
LD C,L
INC BC ;inclusive
POP HL
LDDR ;make room
LD C,(HL)
LD B,0
INC HL
EX DE,HL
LD HL,STRING+1
PUSH DE
LDIR ;insert new one
CALL SPMSG
DB CR,LF,'Choose <N>o-repeat or <Q>uiet if desired: ',0
CALL INPCH
CALL UCASE
PUSH AF
CALL TYPE
POP AF
POP HL
CP 'N' ;take care of N/Q request
JR Z,MK2
CP 'Q'
JR NZ,MKDone
DEC HL
LD A,(HL) ;Q only works if length >1
CP 2
INC HL
JR C,MK2
INC HL
SET 7,(HL) ;indicate quiet
DEC HL
MK2: SET 7,(HL) ;indicate no-rpt
MKDone: JP VerKey
;
VerKey: LD B,10 ;verify key area
LD HL,200H-12
LD D,0
LD IX,Keys+2
VKlp: LD A,StrSiz ;check size
CP (IX)
JR C,VKwipe
LD E,(IX)
SBC HL,DE ;decrement
JR C,VKwipe
ADD IX,DE ;move to next
INC IX
DJNZ VKlp
LD (Keys),HL ;free bytes
LD A,H
OR L
RET Z ;full?
VKlp2: LD (IX),0
INC IX ;zero fill
DEC HL
LD A,H
OR L
JR NZ,VKlp2
RET
VKwipe: LD HL,200H-12 ;oops, bad
LD (Keys),HL
LD IX,Keys+2
LD HL,200H-2
JR VKlp2
;
;
TYPE: CP ' ' ;put char in A to screen, with "^" filter
LD C,A
JP NC,PUTCH
ADD 40H
LD C,A
PUSH BC
LD C,'^'
CALL PUTCH
POP BC
JP PUTCH
CTLMSG: XOR A ;put ctlmsg at (HL) to screen
ADD (HL)
INC HL
JR Z,NULL
INC HL
BIT 7,(HL)
CALL NZ,QUIET
BIT 7,(HL)
DEC HL
JR NZ,CMSG1
BIT 7,(HL)
CALL NZ,NORPT
CMSG1: DEC HL
LD A,(HL)
INC HL
AND 7FH
LD B,A
CMSGLP: LD A,(HL)
AND 7FH
INC HL
PUSH BC
PUSH HL
CALL TYPE ;with filtering
POP HL
POP BC
DJNZ CMSGLP
RET
NULL: CALL SPMSG
DB '<>',0
RET
NORPT: CALL SPMSG
DB '<N>',0
RET
QUIET: CALL SPMSG
DB '<Q>',0
RET
;
;
;
; Patch areas
;
PATCH: CALL SPMSG
DB CR,LF,LF,'FURTHER PATCHING:',CR,LF
DB ' You will require DDT or a similar utility. Addresses',CR,LF
DB 'in this version of the program are:',CR,LF
DB ' User patch area: ',0
LD HL,(BUF+8)
PUSH HL
CALL H2OUTA
LD C,'-'
CALL PUTCH
POP HL
LD A,(BUF+10)
LD E,A
LD D,0
ADD HL,DE
DEC HL
CALL H2OUTA
CALL SPMSG
DB CR,LF,' Command tables:',CR,LF
DB ' Basic: ',0
LD HL,(BUF+11)
CALL H2OUTA
CALL SPMSG
DB ' ESC/^K: ',0
LD HL,(BUF+13)
CALL H2OUTA
CALL SPMSG
DB ' ^O: ',0
LD HL,(BUF+15)
CALL H2OUTA
CALL SPMSG
DB ' ^Q: ',0
LD HL,(BUF+17)
CALL H2OUTA
CALL CRLF
RET
;
;
; Save and exit
;
SAVE: CALL SPMSG
DB CR,LF,LF,'[Closing ',0
LD HL,FCB+1
LD B,11
CALL BHLMSG
XOR A
LD (FCB+12),A
LD (FCB+32),A
LD (IFCB+12),A
LD (IFCB+32),A
LD HL,BUF
LD DE,FCB
LD B,VDESTRT/80H-2
CALL WRITLP
JP C,WRERR
LD A,(IFCB+1) ;and to accessory file?
CP ' '
JP Z,DONE
CALL SPMSG
DB ', ',0
LD HL,IFCB+1
LD B,11
CALL BHLMSG
LD A,(IFCB+11)
CP 'K'
JR Z,IWRT2
CP 'P'
JR Z,IWRT1
LD HL,IVERSN ;write 1 rec of VDx
LD (IBUF),HL
LD HL,BUF+(INSTALL-100H)
LD DE,IBUF+10H
LD BC,TRMLEN
LDIR
LD B,1
JR WRITIT
IWRT1: LD HL,PVERSN ;write 2 rec of VDP
LD (IBUF),HL
LD HL,BUF+(PRINTER-100H)
LD DE,IBUF+10H
LD BC,PRTLEN
LDIR
LD B,2
JR WRITIT
IWRT2: LD HL,KVERSN ;write 4 rec of VDK
LD (IBUF),HL
LD HL,Keys+2
LD DE,IBUF+2
LD BC,512-2
LDIR
LD B,4
WRITIT: LD HL,IBUF ;write out B recs
LD DE,IFCB
CALL WRITLP
JP C,WRERR
;
DONE: CALL SPMSG
DB ']',CR,LF,LF,0
EXIT: LD SP,(USTAK)
RET
;
ABORT: CALL SPMSG
DB ' *Aborted*',CR,LF,0
JP EXIT
NOFMSG: CALL SPMSG
DB CR,LF,'*File',0
JR ERREX
RDERR: CALL SPMSG
DB CR,LF,'*Read',0
JR ERREX
VERR: CALL SPMSG
DB CR,LF,'*Version',0
JR ERREX
WRERR: CALL SPMSG
DB CR,LF,'*Write',0
ERREX: CALL SPMSG
DB ' error*',CR,LF,0
JP EXIT
;
;
;DISK I/O
;
READLP: PUSH HL ;READ in a file: DE=FCB
PUSH BC ;HL=buffer, B=records (exact)
PUSH DE
EX DE,HL
LD C,SDMA
CALL BDOS
POP DE
PUSH DE
LD C,RSEQ
CALL BDOS
POP DE
POP BC
POP HL
OR A
JR NZ,RDLBAD
PUSH DE
LD DE,128
ADD HL,DE
POP DE
DJNZ READLP
OR A
RET
RDLBAD: SCF ;error
RET
WRITLP: PUSH HL ;same, but write and close
PUSH BC
PUSH DE
EX DE,HL
LD C,SDMA
CALL BDOS
POP DE
PUSH DE
LD C,WSEQ
CALL BDOS
POP DE
POP BC
POP HL
OR A
JR NZ,RDLBAD
PUSH DE
LD DE,128
ADD HL,DE
POP DE
DJNZ WRITLP
LD C,FCLO
CALL BDOS
INC A
JR Z,RDLBAD
OR A
RET
;
;
;Value I/O functions
;
SVAL: PUSH HL ;Char string (length in B)
PUSH BC
CALL BHLMSG
JR SREDO1
SREDO: CALL OOPS
SREDO1: CALL SEPMSG
CALL UCHO
CP CR
JR Z,SVALX
LD HL,SBUF
LD (HL),A
INC HL
POP BC
PUSH BC
DEC B
SVALP: PUSH HL
PUSH BC
CALL UCHO
POP BC
POP HL
CP CR
JR Z,SVALPF
CP 20H
JR C,SREDO
LD (HL),A
INC HL
DJNZ SVALP
JR SVALD
SVALPF: LD (HL),' '
INC HL
DJNZ SVALPF
SVALD: LD HL,SBUF
POP BC
LD C,B
LD B,0
POP DE
LDIR
EX DE,HL
RET
SVALX: POP BC
POP HL
LD C,B
LD B,0
ADD HL,BC
RET
SBUF: DS 16
;
LVAL: PUSH HL
LD A,(HL)
LD C,'Y'
OR A
JR NZ,LVAL1
LD C,'N'
LVAL1: CALL PUTCH
JR LVALI1
LVALI: CALL OOPS
LVALI1: CALL SEPMSG
CALL INPCH
CALL UCASE
CP CR
JR Z,LVALX
LD C,0FFH
CP 'Y'
JR Z,LVAL2
CP 'N'
JR NZ,LVALI
LD C,0
LVAL2: PUSH BC
LD C,A
CALL PUTCH
POP BC
POP HL
LD (HL),C
INC HL
RET
LVALX: POP HL
INC HL
RET
;
AVAL: PUSH HL ;ASCII value
LD A,(HL)
CALL TYPE
CALL SEPMSG
CALL INPCH
CALL UCASE
CP CR
JR Z,AVALX
PUSH AF
CALL TYPE
POP AF
POP HL
LD (HL),A
INC HL
RET
AVALX: POP HL
INC HL
RET
;
H2VAL: PUSH HL
INC HL
CALL HOUT
POP HL
PUSH HL
CALL HOUT
JR H2RED1
H2REDO: CALL OOPS
H2RED1: CALL SEPMSG
CALL HIN
JR C,H2REDO
JR Z,H2VALX
LD (H2TMP),A
CALL HIN
JR C,H2REDO
JR Z,H2REDO
POP HL
LD (HL),A
INC HL
LD A,(H2TMP)
LD (HL),A
INC HL
RET
H2VALX: POP HL
INC HL
INC HL
RET
H2TMP: DS 1
H2OUTA: PUSH HL
LD A,H
CALL HOUTA
POP HL
LD A,L
JP HOUTA
;
HVAL: PUSH HL
CALL HOUT
JR HREDO1
HREDO: CALL OOPS
HREDO1: CALL SEPMSG
CALL HIN
JR C,HREDO
POP HL
JR Z,HVALX
LD (HL),A
HVALX: INC HL
RET
HIN: CALL UCHO
CP CR
SCF
CCF
RET Z ;Z, no C: CR typed
CALL UNHDIG
RET C ;C: entry error
ADD A
ADD A
ADD A
ADD A
LD (HTEMP),A
CALL UCHO
CALL UNHDIG
RET C
LD C,A
LD A,(HTEMP)
ADD C
SET 0,C ;kludge Z off
BIT 0,C
RET ;no C, no Z: OK
HTEMP: DS 1
HOUT: LD A,(HL)
HOUTA: PUSH AF
RRA
RRA
RRA
RRA
CALL HDIG
LD C,A
CALL PUTCH
POP AF
CALL HDIG
LD C,A
JP PUTCH
HDIG: AND 0FH ;make hex digit from 0-F
ADD '0'
CP ':'
RET C
ADD 'A'-':'
RET
UNHDIG: AND 7FH ;process hex digit to 0-F
SUB '0' ;return C if illegal
RET C
CP 10
CCF
RET NC ;nice, 0-9
CALL UCASE
SUB 'A'-':'
CP 16
CCF
RET
;
BNVAL: LD A,0FFH
LD (BFLAG),A
LD (BVBC),BC
LD (BVHL),HL
;LD C,'(' ;don't show (#) here, it's confusing
;CALL PUTCH
;LD BC,(BVBC)
;LD A,B
;CALL HOUTA
;LD C,')'
;CALL PUTCH
;LD HL,(BVHL)
;LD BC,(BVBC)
JR BVALP1
BVAL: XOR A
LD (BFLAG),A
LD (BVBC),BC
LD (BVHL),HL
LD C,'('
CALL PUTCH
LD HL,(BVHL)
CALL HOUT
LD C,')'
CALL PUTCH
LD HL,(BVHL)
LD B,(HL)
INC HL
XOR A
ADD B
JR Z,BREDO1
BVALP1: PUSH HL
PUSH BC
CALL HOUT
POP BC
POP HL
INC HL
DJNZ BVALP1
JR BREDO1
BREDO: CALL OOPS
BREDO1: CALL SEPMSG
LD HL,BTEMP
LD DE,BTEMP+1
LD BC,16
LD (HL),0
LDIR
LD BC,(BVBC)
LD A,(BFLAG)
OR A
LD A,B
JR Z,BRDO1
LD HL,BTEMP
LD (HL),A
OR A
JR Z,BVAL2
INC HL
PUSH BC
PUSH HL
CALL UCHO
POP HL
POP BC
CP CR
JR NZ,BVAL1
JP BVALX
BRDO1: PUSH BC
CALL BSUB
POP BC
JR C,BREDO
JP Z,BVALX
INC B ;A=chosen, B=max
CP B
JR NC,BREDO
LD HL,BTEMP
LD (HL),A
LD B,A
OR A ;null?
JR Z,BVAL2
INC HL
BVALP2: PUSH BC
PUSH HL
CALL UCHO
POP HL
POP BC
CP CR
JR NZ,BVAL1
LD A,(BFLAG)
OR A
JR NZ,BVAL2
JR BREDO
BVAL1: PUSH BC
PUSH HL
CALL UNHDIG
POP HL
POP BC
JR C,BREDO
ADD A
ADD A
ADD A
ADD A
LD (HL),A
PUSH BC
PUSH HL
CALL UCHO
CALL UNHDIG
POP HL
POP BC
JP C,BREDO
ADD (HL)
LD (HL),A
INC HL
DJNZ BVALP2
BVAL2: LD DE,(BVHL)
LD BC,(BVBC)
LD C,B
LD B,0
LD HL,BTEMP
LD A,(BFLAG)
OR A
JR NZ,BVAL3
INC BC
JR BVAL4
BVAL3: INC HL
BVAL4: LDIR
EX DE,HL
RET
BVALX: LD HL,(BVHL)
LD BC,(BVBC)
LD C,B
LD B,0
ADD HL,BC
LD A,(BFLAG)
OR A
RET NZ
INC HL
RET
BSUB: LD C,'('
CALL PUTCH
CALL HIN
PUSH AF
LD C,')'
CALL PUTCH
POP AF
RET
BTEMP: DS 32+1
BFLAG: DS 1
BVBC: DS 2
BVHL: DS 2
;
;
DBVAL: PUSH BC
CALL DVAL
CALL SPMSG
DB '... ',0
POP BC
DJNZ DBVAL
RET
;
DVAL: PUSH HL
CALL DOut
JR DRedo1
DRedo: CALL Oops
DRedo1: CALL SepMsg
CALL DIn
JR C,DRedo
POP HL
JR Z,DVALX
LD (HL),A
DVALX: INC HL
RET
DIn: CALL Ucho
CP CR
SCF
CCF
RET Z ;Z, no C: CR typed FIRST
CALL UnDDig
RET C ;C: entry error
LD (DTemp),A
CALL Ucho ;second digit?
CP CR
JR Z,DInX
CALL UnDDig
RET C
LD E,A
LD A,(DTemp)
LD D,A
ADD A
ADD A
ADD A
ADD D
ADD D ;*10
ADD A,E ;plus new value
LD (DTemp),A
CALL Ucho ;third digit?
CP CR
JR Z,DInX
CALL UnDDig
RET C
LD E,A
LD A,(DTemp)
LD D,A
ADD A
ADD A
RET C ;(over 255?)
ADD A
RET C
ADD D
RET C
ADD D ;*10
RET C
ADD A,E ;plus new value
RET C
LD (DTemp),A
DInX: OR 1 ;no C, no Z: OK
LD A,(DTemp)
RET
DOut: LD A,(HL)
DOutA: PUSH HL
LD L,A
LD H,0
LD DE,DOWork
CALL BCDCon
LD HL,DOWork
DOutLp: LD A,(HL)
CP ' '
JR Z,DOutLX
LD C,A
PUSH HL
CALL PutCh
POP HL
INC HL
JR DOutLp
DOutLX: POP HL
RET
UnDDig: AND 7Fh ;process dec digit in A to val 0-9
SUB '0' ;return C if illegal
RET C
CP 10
CCF
RET
DTemp: DS 1
DOWork: DS 5
;
;
;Convert 16-bit number in HL to a one to five
;digit decimal number in the area pointed to by DE
;
BCDCon: LD IX,P10Tab ;Point at table
PUSH DE ;Save output pointer
BCDlp1: LD B,(IX+1)
LD C,(IX)
LD A,C ;low byte
CP 1 ;Clear carry flag
JR Z,BCDend
SBC HL,BC ;Subtract from input
JR NC,BCDok ;Got one in range
ADD HL,BC ;Restore it
INC IX
INC IX
JR BCDlp1 ;Try next one
;
BCDok: LD A,'1'
LD (DE),A ;Set initial digit
BCDlp2: SBC HL,BC ;Subtract again
JR C,BCDsk1 ;Went negative
EX DE,HL
INC (HL) ;Increment digit
EX DE,HL
JR BCDlp2
;
BCDsk1: ADD HL,BC ;Restore it
INC DE ;Bump output
INC IX
INC IX
LD C,(IX)
LD B,(IX+1)
LD A,C
CP 1 ;Is this last entry
JR Z,BCDend
LD A,'0'
LD (DE),A
JR BCDlp2
;
BCDend: LD A,L
OR '0'
LD (DE),A
INC DE
EX DE,HL
POP BC
SBC HL,BC ;Number filled
LD A,5 ; needed
SUB L ; to do
RET Z
ADD HL,BC ;Restore pointer
BCDlp3: LD (HL),' ' ;Clear field
INC HL
DEC A
JR NZ,BCDlp3
RET
;
P10Tab: DW 10000,1000,100,10,1
;
;
;
CASE: POP HL
LD B,(HL) ;entries
INC HL
LD E,(HL) ;DE=default sbr
INC HL
LD D,(HL)
INC HL
LP1CA: CP (HL) ;Value matches?
INC HL
JR NZ,SK2CA
LD E,(HL) ;yes, get address
INC HL
LD D,(HL)
JR SK3CA ;finish up
SK2CA: INC HL ;No match, skip ahead
SK3CA: INC HL
DJNZ LP1CA ;Try again
EX DE,HL ;Swap sbr and return
PUSH DE ;Store return (end of list)
JP (HL) ;Go do sbr (LAST match)
;
SEPMSG: CALL SPMSG
DB ' :',0
RET
CRLF: CALL SPMSG
DB CR,LF,0
RET
OOPS: CALL SPMSG
DB BEL,'?',CR,LF,0
RET
;
;
SPMSG: EX (SP),HL ;must preserve HL
XOR A
ADD (HL)
INC HL
EX (SP),HL
RET Z
LD C,A
PUSH HL
CALL PUTCH
POP HL
JR SPMSG
;
BHLMSG: XOR A
ADD (HL)
INC HL
RET Z
LD C,A
PUSH HL
PUSH BC
CALL PUTCH
POP BC
POP HL
DJNZ BHLMSG
RET
;
UCHO: CALL INPCH
CALL UCASE
JR ECHO1
ECHO: CALL INPCH
ECHO1: CP CR
RET Z
PUSH AF
LD C,A
CALL PUTCH
POP AF
RET
INPCH: CALL GETCH
CP 03H
JP Z,ABORT
RET
GETCH: JP $ ;<---BIOS
PUTCH: JP $ ;<---
;
UCASE: CP 'a'
RET C
CP 'z'+1
RET NC
AND 5FH
RET
;
ISVDE: PUSH HL ;hi bit on 0103 means VDE-M
LD HL,BUF+6
BIT 7,(HL)
POP HL
RET ;Z set if VDE, clear if VDM
;
;
COMTYP: DB 'COM'
VDETYP: DB 'VDE' ;<---Changes to VDM or VDK (VDETYP+2)
;
IFCB: DS 36,0
;
;----- DATA -----
;
;Default option/printer data
;
DEFOPT: ;DEFAULT USER OPTIONS (0130-015F)
BAKFlg: DB 0FFH ;0130H - create BAK files (y/n)
FMode: DB 'A' ;default to ASCII document mode
FDflt1: DB 'ASMN' ;1st default type override
FDflt2: DB '....' ;2nd
InsDfl: DB 0 ;default insert on (y/n)
RulFlg: DB 0 ;default ruler on (y/n)
HCDflt: DB 0FFh ;default HCR disp on (y/n)
HypFlg: DB 0 ;enable hyphenation (y/n)
LfMarg: DB 1 ;default left margin column (1=margin OFF)
RtMarg: DB 1 ;default right margin column (1=wordwrap OFF)
Ovlap: DB 2 ;lines of overlap on scroll (^R/^C)
DirSys: DB 0 ;include SYS files in directory (y/n)
FixDsk: DB '@@' ;fixed drives
Ring: DB 0 ;ring bell for error messages (y/n)
Help: DB 0FFh ;enable help menus (y/n)
AltHdr: DB 0 ;use alt video in header (y/n)
NoHdrF: DB 0 ;suppress header (y/n)
MHz: DB 40h ;CPU clock speed (40h = 4.0 MHz, etc)
Timer: DB 40h ;delay for horiz scroll (01 min, FF max)
TabCnt: DB 8-1 ;tab stop interval minus 1 (1/3/7/15)
VTList: DB 5,15,35,55,0,0,0,0 ;varitab column settings
WildCd: DB '_' ;wildcard character
BlkChr: DB 00H ;block character (^@)
TogTbl: DB 02h,04h,13h,19h ;4 toggles ^B,^D,^S,^Y
NTgTbl: DB 11h,17h,05h,12h ;4 switches ^Q,^W,^E,^R (last 015C)
OPTLEN EQU $-DEFOPT
;
NULPRT: ;NULL PRINTER INSTALLATION (01C0-022F)
DB 'Teletype ' ;printer ID (16 chars)
UseLF: DB 0FFh ;send LF after CR? (y/n)
FormL: DB 58 ;lines per page (0=no pgn)
PTMarg: DB 0 ;top margin
PrLMrg: DB 0 ;left margin
PInit: DS 20,0 ;Printer init (19 bytes)
PUInit: DS 8,0 ;Printer deinit (7 bytes)
PCodes: DS 8*8,0 ;4 toggles on and off
UCodes: DS 4*8,0 ;4 switches (last 022F)
PRTLEN EQU $-NULPRT
;
;
;VDE terminal installations (60H, 0160-01BF)
;
VDEDAT: DB (VDEEND-VDEDAT)/TRMLEN ;number in list to date
;
DEFTRM: DB 'Generic CRT ' ;terminal ID
DB 80,0FFH,24 ;View,Wrap,Lines
DB 0FFH,0FFH,0FFH,0FFH,0FFH ;UsrKys
DS 1
DB 0, 0,0,0,0,0,0 ;ClL
DB 1, 1AH,0,0,0,0,0,0 ;TInit
DB 1, 1AH,0,0,0,0,0,0 ;TUInit
DB 0, 0,0,0,0,0,0 ;AltOn
DB 0, 0,0,0,0,0,0 ;AltOff
DB 0,7FH ;AltBit,Filter
DB 'N',1EH,0,0CH,0,0 ;CurMod,PCu,PosDly
DB 0, 0,0,0,0,0,0 ;InsL
DB 0, 0,0,0,0,0,0 ;DelL
DB 0 ;OddDel
DS 11
TRMLEN EQU $-DEFTRM
;
DB 'ADDS 25 ' ;terminal ID
DB 80,0FFH,24 ;View,Wrap,Lines
DB 0FFH,0BH,0AH,0CH,0FFH ;UsrKys
DS 1
DB 2, ESC,'K',0,0,0,0 ;ClL
DB 3, 01H,ESC,'k',0,0,0,0 ;TInit
DB 3, 01H,ESC,'k',0,0,0,0 ;TUInit
DB 3, ESC,'G4',0,0,0 ;AltOn
DB 3, ESC,'G0',0,0,0 ;AltOff
DB 0,7FH ;AltBit,Filter
DB 'S',ESC,'Y',20H,20H,0 ;PosMod,PCu,PosDly
DB 2, ESC,'L',0,0,0,0 ;InsL
DB 2, ESC,'M',0,0,0,0 ;DelL
DB 0 ;OddDel
DS 11
;
DB 'Amstrad / Heath ' ;terminal ID
DB 80,0FFH,24 ;View,Wrap,Lines
DB 0FFH,0BH,0AH,0CH,0FFH ;UsrKys
DS 1
DB 2, ESC,'K',0,0,0,0 ;ClL
DB 4, ESC,'H',ESC,'E',0,0,0 ;TInit
DB 4, ESC,'H',ESC,'E',0,0,0 ;TUInit
DB 2, ESC,'p',0,0,0,0 ;AltOn
DB 2, ESC,'q',0,0,0,0 ;AltOff
DB 0,7FH ;AltBit,Filter
DB 'S',ESC,'Y',20H,20H,0 ;PosMod,PCu,PosDly
DB 2, ESC,'L',0,0,0,0 ;InsL
DB 2, ESC,'M',0,0,0,0 ;DelL
DB 0 ;OddDel
DS 11
;
DB 'ANSI standard ' ;terminal ID
DB 80,0FFH,24 ;View,Wrap,Lines
DB 0FFH,0BH,0AH,0CH,0FFH ;UsrKys
DS 1
DB 3, ESC,'[','K',0,0,0 ;ClL
DB 6, ESC,'[H',ESC,'[J',0 ;TInit
DB 6, ESC,'[H',ESC,'[J',0 ;TUInit
DB 4, ESC,'[7m',0,0 ;AltOn
DB 3, ESC,'[m',0,0,0 ;AltOff
DB 0,7FH ;AltBit,Filter
DB 'A',0,0,0,0,0 ;PosMod,PCu,PosDly
DB 3, ESC,'[L',0,0,0 ;InsL
DB 3, ESC,'[M',0,0,0 ;DelL
DB 0 ;OddDel
DS 11
;
DB 'Bondwell 2 ' ;terminal ID
DB 80,0FFH,25 ;View,Wrap,Lines
DB 0FFH,0BH,0AH,0CH,0FFH ;UsrKys
DS 1
DB 2, ESC,'T',0,0,0,0 ;ClL
DB 1, 1AH,0,0,0,0,0,0 ;TInit
DB 1, 1AH,0,0,0,0,0,0 ;TUInit
DB 2, ESC,'I',0,0,0,0 ;AltOn
DB 2, ESC,'N',0,0,0,0 ;AltOff
DB 0,7FH ;AltBit,Filter
DB 'S',ESC,'=',20H,20H,0 ;PosMod,PCu,PosDly
DB 2, ESC,'E',0,0,0,0 ;InsL
DB 2, ESC,'R',0,0,0,0 ;DelL
DB 0 ;OddDel
DS 11
;
DB 'DEC VT52 ' ;terminal ID
DB 80,0FFH,24 ;View,Wrap,Lines
DB 0FFH,0BH,0AH,0CH,0FFH ;UsrKys
DS 1
DB 2, ESC,'K',0,0,0,0 ;ClL
DB 4, ESC,'H',ESC,'J',0,0,0 ;TInit
DB 4, ESC,'H',ESC,'J',0,0,0 ;TUInit
DB 0, 0,0,0,0,0,0 ;AltOn
DB 0, 0,0,0,0,0,0 ;AltOff
DB 0,7FH ;AltBit,Filter
DB 'S',ESC,'Y',20H,20H,0 ;PosMod,PCu,PosDly
DB 0, 0,0,0,0,0,0 ;InsL
DB 0, 0,0,0,0,0,0 ;DelL
DB 0 ;OddDel
DS 11
;
DB 'Commodore 128 ' ;terminal ID
DB 80,0FFH,24 ;View,Wrap,Lines
DB 0FFH,0BH,0AH,0CH,0FFH ;UsrKys
DS 1
DB 2, ESC,'T',0,0,0,0 ;ClL
DB 1, 1AH,0,0,0,0,0,0 ;TInit
DB 1, 1AH,0,0,0,0,0,0 ;TUInit
DB 2, ESC,')',0,0,0,0 ;AltOn
DB 2, ESC,'(',0,0,0,0 ;AltOff
DB 0,7FH ;AltBit,Filter
DB 'S',ESC,'=',20H,20H,0 ;PosMod,PCu,PosDly
DB 2, ESC,'E',0,0,0,0 ;InsL
DB 2, ESC,'R',0,0,0,0 ;DelL
DB 0 ;OddDel
DS 11
;
DB 'Epson Geneva PX8' ;terminal ID
DB 80,0FFH,8 ;View,Wrap,Lines
DB 0FFH,1EH,1FH,1CH,1DH ;UsrKys
DS 1
DB 2, ESC,'T',0,0,0,0 ;ClL
DB 1, 0CH,0,0,0,0,0,0 ;TInit
DB 1, 0CH,0,0,0,0,0,0 ;TUInit
DB 0, 0,0,0,0,0,0 ;AltOn
DB 0, 0,0,0,0,0,0 ;AltOff
DB 0,7FH ;AltBit,Filter
DB 'S',ESC,'=',20H,20H,0 ;PosMod,PCu,PosDly
DB 4, ESC,91H,01H,07H,0,0 ;InsL
DB 4, ESC,90H,01H,07H,0,0 ;DelL
DB 0FFH ;OddDel
DS 11
;
DB 'Kaypro II/IV ' ;terminal ID
DB 80,0FFH,24 ;View,Wrap,Lines
DB 0FFH,0BH,0AH,0CH,0FFH ;UsrKys
DS 1
DB 1, 18H,0,0,0,0,0 ;ClL
DB 1, 1AH,0,0,0,0,0,0 ;TInit
DB 1, 1AH,0,0,0,0,0,0 ;TUInit
DB 0, 0,0,0,0,0,0 ;AltOn
DB 0, 0,0,0,0,0,0 ;AltOff
DB 0,7FH ;AltBit,Filter
DB 'S',ESC,'=',20H,20H,0 ;PosMod,PCu,PosDly
DB 2, ESC,'E',0,0,0,0 ;InsL
DB 2, ESC,'R',0,0,0,0 ;DelL
DB 0 ;OddDel
DS 11
;
DB 'Kaypro 2/4/10 ' ;terminal ID
DB 80,0FFH,24 ;View,Wrap,Lines
DB 0FFH,0BH,0AH,0CH,0FFH ;UsrKys
DS 1
DB 1, 18H,0,0,0,0,0 ;ClL
DB 1, 1AH,0,0,0,0,0,0 ;TInit
DB 1, 1AH,0,0,0,0,0,0 ;TUInit
DB 3, 1BH,'B0',0,0,0 ;AltOn
DB 3, 1BH,'C0',0,0,0 ;AltOff
DB 0,7FH ;AltBit,Filter
DB 'S',ESC,'=',20H,20H,0 ;PosMod,PCu,PosDly
DB 2, ESC,'E',0,0,0,0 ;InsL
DB 2, ESC,'R',0,0,0,0 ;DelL
DB 0 ;OddDel
DS 11
;
DB 'LearSiegler ADM3' ;terminal ID
DB 80,0FFH,24 ;View,Wrap,Lines
DB 0FFH,0BH,0AH,0CH,0FFH ;UsrKys
DS 1
DB 2, ESC,'T',0,0,0,0 ;ClL
DB 1, 1AH,0,0,0,0,0,0 ;TInit
DB 1, 1AH,0,0,0,0,0,0 ;TUInit
DB 0, 0,0,0,0,0,0 ;AltOn
DB 0, 0,0,0,0,0,0 ;AltOff
DB 0,7FH ;AltBit,Filter
DB 'S',ESC,'=',20H,20H,0 ;PosMod,PCu,PosDly
DB 2, ESC,'E',0,0,0,0 ;InsL
DB 2, ESC,'R',0,0,0,0 ;DelL
DB 0 ;OddDel
DS 11
;
DB 'Morrow MDT-20 ' ;terminal ID
DB 80,0FFH,24 ;View,Wrap,Lines
DB 0FFH,0BH,0AH,0CH,0FFH ;UsrKys
DS 1
DB 2, ESC,'T',0,0,0,0 ;ClL
DB 1, 1AH,0,0,0,0,0,0 ;TInit
DB 1, 1AH,0,0,0,0,0,0 ;TUInit
DB 0, 0,0,0,0,0,0 ;AltOn
DB 0, 0,0,0,0,0,0 ;AltOff
DB 0,7FH ;AltBit,Filter
DB 'R',ESC,'=',20H,20H,0 ;PosMod,PCu,PosDly
DB 2, ESC,'E',0,0,0,0 ;InsL
DB 2, ESC,'R',0,0,0,0 ;DelL
DB 0 ;OddDel
DS 11
;
DB 'NEC Starlet 8401' ;terminal ID
DB 80,0FFH,16 ;View,Wrap,Lines
DB 7FH,1EH,1FH,1CH,1DH ;UsrKys
DS 1
DB 2, ESC,'T',0,0,0,0 ;ClL
DB 4, ESC,'g',ESC,'*',0,0,0 ;TInit
DB 2, ESC,'*',0,0,0,0,0 ;TUInit
DB 2, ESC,')',0,0,0,0 ;AltOn
DB 2, ESC,'(',0,0,0,0 ;AltOff
DB 0,7FH ;AltBit,Filter
DB 'S',ESC,'=',20H,20H,0 ;PosMod,PCu,PosDly
DB 2, ESC,'E',0,0,0,0 ;InsL
DB 2, ESC,'R',0,0,0,0 ;DelL
DB 0 ;OddDel
DS 11
;
DB 'Northstar Advtg.' ;terminal ID
DB 80,0FFH,24 ;View,Wrap,Lines
DB 0FFH,0BH,0AH,0CH,0FFH ;UsrKys
DS 1
DB 1, 0EH,0,0,0,0,0 ;ClL
DB 1, 04H,0,0,0,0,0,0 ;TInit
DB 1, 04H,0,0,0,0,0,0 ;TUInit
DB 1, 01H,0,0,0,0,0 ;AltOn
DB 1, 02H,0,0,0,0,0 ;AltOff
DB 0,7FH ;AltBit,Filter
DB 'S',ESC,'=',20H,20H,0 ;PosMod,PCu,PosDly
DB 2, ESC,'L',0,0,0,0 ;InsL
DB 2, ESC,'M',0,0,0,0 ;DelL
DB 0 ;OddDel
DS 11
;
DB 'Osborne 1/2/4 ' ;terminal ID
DB 80,0FFH,24 ;View,Wrap,Lines
DB 1FH,0BH,0AH,0CH,0FFH ;UsrKys
DS 1
DB 2, ESC,'T',0,0,0,0 ;ClL
DB 1, 1AH,0,0,0,0,0,0 ;TInit
DB 1, 1AH,0,0,0,0,0,0 ;TUInit
DB 2, ESC,')',0,0,0,0 ;AltOn
DB 2, ESC,'(',0,0,0,0 ;AltOff
DB 0,7FH ;AltBit,Filter
DB 'S',ESC,'=',20H,20H,0 ;PosMod,PCu,PosDly
DB 2, ESC,'E',0,0,0,0 ;InsL
DB 2, ESC,'R',0,0,0,0 ;DelL
DB 0 ;OddDel
DS 11
;
DB 'Otrona Attache ' ;terminal ID
DB 80,0FFH,24 ;View,Wrap,Lines
DB 0FFH,0BH,0AH,0CH,0FFH ;UsrKys
DS 1
DB 2, 1BH,'K',0,0,0,0 ;ClL
DB 1, 1AH,0,0,0,0,0,0 ;TInit
DB 1, 1AH,0,0,0,0,0,0 ;TUInit
DB 3, 1BH,'U&',0,0,0 ;AltOn
DB 3, 1BH,'U ',0,0,0 ;AltOff
DB 0,7FH ;AltBit,Filter
DB 'S',ESC,'=',20H,20H,0 ;PosMod,PCu,PosDly
DB 2, ESC,'L',0,0,0,0 ;InsL
DB 2, ESC,'M',0,0,0,0 ;DelL
DB 0 ;OddDel
DS 11
;
DB 'Televideo 910+ ' ;terminal ID
DB 80,0FFH,24 ;View,Wrap,Lines
DB 0FFH,0BH,0AH,0CH,0FFH ;UsrKys
DS 1
DB 2, ESC,'T',0,0,0,0 ;ClL
DB 1, 1AH,0,0,0,0,0,0 ;TInit
DB 1, 1AH,0,0,0,0,0,0 ;TUInit
DB 3, ESC,'G4',0,0,0 ;AltOn
DB 3, ESC,'G0',0,0,0 ;AltOff
DB 0,7FH ;AltBit,Filter
DB 'S',ESC,'=',20H,20H,0 ;PosMod,PCu,PosDly
DB 2, ESC,'E',0,0,0,0 ;InsL
DB 2, ESC,'R',0,0,0,0 ;DelL
DB 0 ;OddDel
DS 11
;
DB 'TRS-80 mod 2 P&T' ;terminal ID
DB 80,0,24 ;View,Wrap,Lines
DB 0FFH,1EH,1FH,1DH,1CH ;UsrKys
DS 1
DB 1, 01H,0,0,0,0,0 ;ClL
DB 5, 1AH,14H,0FH,17H,0CH,0,0 ;TInit
DB 5, 1AH,14H,0FH,16H,0CH,0,0 ;TUInit
DB 1, 0EH,0,0,0,0,0 ;AltOn
DB 1, 0FH,0,0,0,0,0 ;AltOff
DB 0,7FH ;AltBit,Filter
DB 'S',ESC,'Y',20H,20H,0 ;PosMod,PCu,PosDly
DB 1, 04H,0,0,0,0,0 ;InsL
DB 1, 0BH,0,0,0,0,0 ;DelL
DB 0 ;OddDel
DS 11
;
DB 'TRS-80 model 4P ' ;terminal ID
DB 80,0FFH,24 ;View,Wrap,Lines
DB 0FFH,0BH,0AH,0FFH,0FFH ;UsrKys
DS 1
DB 1, 15H,0,0,0,0,0 ;ClL
DB 1, 1AH,0,0,0,0,0,0 ;TInit
DB 1, 1AH,0,0,0,0,0,0 ;TUInit
DB 1, 16H,0,0,0,0,0 ;AltOn
DB 1, 16H,0,0,0,0,0 ;AltOff
DB 0,7FH ;AltBit,Filter
DB 'S',ESC,'=',20H,20H,0 ;PosMod,PCu,PosDly
DB 0, 0,0,0,0,0,0 ;InsL
DB 0, 0,0,0,0,0,0 ;DelL
DB 0 ;OddDel
DS 11
;
DB 'Zenith ZT10 ' ;terminal ID
DB 80,0FFH,24 ;View,Wrap,Lines
DB 0FFH,0BH,0AH,0CH,0FFH ;UsrKys
DS 1
DB 2, ESC,'T',0,0,0,0 ;ClL
DB 1, 1AH,0,0,0,0,0,0 ;TInit
DB 1, 1AH,0,0,0,0,0,0 ;TUInit
DB 3, ESC,'s1',0,0,0 ;AltOn
DB 3, ESC,'s0',0,0,0 ;AltOff
DB 0,7FH ;AltBit,Filter
DB 'S',ESC,'=',20H,20H,0 ;PosMod,PCu,PosDly
DB 2, ESC,'E',0,0,0,0 ;InsL
DB 2, ESC,'R',0,0,0,0 ;DelL
DB 0 ;OddDel
DS 11
;
VDEEND EQU $
;
;
;VDM terminal installations (60H, 0160-01BF)
;
VDMDAT: DB (VDMEND-VDMDAT)/TRMLEN ;number in list to date
;
DB 'Bondwell 14 ' ;terminal ID
DB 80,0,25 ;View,Extra,Lines
DB 0FFH,05H,18H,04H,13H ;UsrKys
DS 8
DB 0, 0,0,0,0,0,0,0 ;TInit
DB 0, 0,0,0,0,0,0,0 ;TUInit
DB 0, 0,0,0,0,0,0 ;CuOff
DB 0, 0,0,0,0,0,0 ;CuOn
DW 0F800H ;VidRAM
RET ;VidIN
DS 15,0
RET ;VidOUT
DS 15,0
;
;OLD KAYPROS WON'T WORK WITH VDM; BANK SWITCHING AFFECTS 0000-3FFF!
IF 0
DB 'Kaypro II/IV ' ;terminal ID
DB 80,48,24 ;View,Extra,Lines
DB 0FFH,0BH,0AH,0CH,0FFH ;UsrKys
DS 8
DB 1, 1AH,0,0,0,0,0,0 ;TInit
DB 1, 1AH,0,0,0,0,0,0 ;TUInit
DB 0, 0,0,0,0,0,0 ;CuOff
DB 0, 0,0,0,0,0,0 ;CuOn
DW 03000H ;VidRAM
PUSH AF ;VidIN
IN A,1CH
OR 80H
OUT 1CH,A
POP AF
RET
DS 7,0
PUSH AF ;VidOUT
IN A,1CH
AND 7FH
OUT 1CH,A
POP AF
RET
DS 7,0
ENDIF
;
DB 'Osborne 1/4 ' ;terminal ID
DB 80,48,24 ;View,Extra,Lines
DB 1FH,0BH,0AH,0CH,0FFH ;UsrKys
DS 8
DB 1, 1AH,0,0,0,0,0,0 ;TInit
DB 1, 1AH,0,0,0,0,0,0 ;TUInit
DB 0, 0,0,0,0,0,0 ;CuOff
DB 0, 0,0,0,0,0,0 ;CuOn
DW 0F000H ;VidRAM
RET ;VidIN
DS 15,0
RET ;VidOUT
DS 15,0
;
OSB2: DB 'Osborne Exec ' ;terminal ID
DB 80,48,24 ;View,Extra,Lines
DB 0FFH,0BH,0AH,0CH,0FFH ;UsrKys
DS 8
DB 1, 1AH,0,0,0,0,0,0 ;TInit
DB 1, 1AH,0,0,0,0,0,0 ;TUInit
DB 3, ESC,'.0',0,0,0 ;CuOff
DB 3, ESC,'.2',0,0,0 ;CuOn
DW 0C000H ;VidRAM
PUSH AF ;VidIN
IN A,0
SET 6,A
OUT 0,A
POP AF
RET
DS 7,0
PUSH AF ;VidOUT
IN A,0
RES 6,A
OUT 0,A
POP AF
RET
DS 7,0
;
DB 'TRS80-Holmes CPM' ;terminal ID
DB 80,0,24 ;View,Extra,Lines
DB 0FFH,0BH,0AH,0CH,0FFH ;UsrKys
DS 8
DB 1, 1AH,0,0,0,0,0,0 ;TInit
DB 1, 1AH,0,0,0,0,0,0 ;TUInit
DB 1, 01H,0,0,0,0,0 ;CuOff
DB 1, 04H,0,0,0,0,0 ;CuOn
DW 0F800H ;VidRAM
PUSH AF ;VidIN
IN A,3FH
AND 7BH ;bits 2,7 OFF
OUT 3FH,A
POP AF
RET
DS 7,0
PUSH AF ;VidOUT
IN A,3FH
OR 04H ;bit 2 ON
OUT 3FH,A
POP AF
RET
DS 7,0
;
DB 'TRS80-Mont.Micro' ;terminal ID
DB 80,0,24 ;View,Extra,Lines
DB 0FFH,0BH,0AH,0FFH,0FFH ;UsrKys
DS 8
DB 1, 1AH,0,0,0,0,0,0 ;TInit
DB 1, 1AH,0,0,0,0,0,0 ;TUInit
DB 2, 1BH,'0',0,0,0,0 ;CuOff
DB 2, 1BH,'1',0,0,0,0 ;CuOn
DW 0F800H ;VidRAM
PUSH AF ;VidIN
LD A,8EH
OUT 84H,A
POP AF
RET
DS 9,0
PUSH AF ;VidOUT
LD A,8FH
OUT 84H,A
POP AF
RET
DS 9,0
;
DB 'TRS-80 mod 2 P&T' ;terminal ID
DB 80,0,24 ;View,Extra,Lines
DB 0FFH,1EH,1FH,1DH,1CH ;UsrKys
DS 8
DB 5, 1AH,14H,0FH,17H,0CH,0,0 ;TInit
DB 5, 1AH,14H,0FH,16H,0CH,0,0 ;TUInit
DB 2, 19H,14H,0,0,0,0 ;CuOff
DB 1, 1AH,0,0,0,0,0 ;CuOn
DW 0F800H ;VidRAM
PUSH AF ;VidIN
PUSH BC
PUSH DE
PUSH HL
LD B,15H
CALL 40H
POP HL
POP DE
POP BC
POP AF
RET
DS 2,0
PUSH AF ;VidOUT
PUSH BC
PUSH DE
PUSH HL
LD B,16H
CALL 40H
POP HL
POP DE
POP BC
POP AF
RET
DS 2,0
;
VDMEND EQU $
;
;
;
DS 46
STACK: DS 2
USTAK: DS 2
;
IBUF: DS 512 ;for inst/key files
;
BUF EQU $ ;read VDE header here
;
;
CR EQU 0DH
LF EQU 0AH
BS EQU 08H
ESC EQU 1BH
BEL EQU 07H
;
BDOS EQU 0005H
FCB EQU 005CH
FCB2 EQU 006CH
;
FMAK EQU 22
FOPN EQU 15
RSEQ EQU 20
WSEQ EQU 21
FCLO EQU 16
SDMA EQU 26
;
END