;PATVLU version 1.0 01/11/88 ;This file patches VLU101-D.COM so that it will run on a non-ZCPR3 system. ;It was put together from Z3BASE2.LIB and SYSENV.LIB. What it does is to ;tack the environment descriptor onto the end of VLU and patch a couple of ;addresses to keep VLU happy. The file is currently set up for an Osborne I ;so unless that's the computer that you're using you will want to change the ;terminal stuff starting at the label 'envorg2'. Make sure that you don't ;change the size of the code before CL string. The code can be variable ;length after that, with a 0 terminator on each string. You may also want ;to change things like the maximum disk and screen size. After you've made ;the necessary changes, just ASM and MLOAD. ;Thanks to Steve Greenberg and Ben Grey for their help. ; enjoy ; Bob Schultz ;================================================================ ; Update 1/17/88 v. blade false equ 0 true equ not false ; Now capable of patching dim- or reverse-video version of VLU for ; Osborne I, Kaypro II, Kaypro 4/10/2X, Epson QX-10, Commodore 128 ; or TVI955. Though these are the only equates provided, notice ; that many terminals share the same video commands. For example, ; the Osborne I, Epson QX-10, Qume QVT-102, TVI912, TVI920, and ; C-128 are exactly the same as far as VLU is concerned. The TVI955 ; (and TVI905) differ only in the clear screen sequence. vb dimvideo equ false OsborneI equ false ;elect only one KayproII equ false Kaypro2X equ true ;4/10/2X EpsonQX equ false C128 equ false TVI955 equ false ; EXTERNAL PATH ; ; The following equates define the address of the ZCPR3 External ; Path and the number of two-byte elements contained in this path (maximum). ; If there is no ZCPR3 External Path, both of these values should be set to 0. ; EXPATH EQU 0 ; EXTERNAL PATH EXPATHS EQU 0 ; (PATH SIZE = EXPATHS*2 + 1) ; WHEEL BYTE ; ; The following equate defines the address of the ZCPR3 Wheel Byte. ; If there is no ZCPR3 Wheel Byte, this value should be set to 0. ; Z3WHL EQU 0 ; WHEEL BYTE ADDRESS ; RCP LOCATION ; ; The following equates define the address of the ZCPR3 Resident ; Command Package and its size in 128-byte blocks. If there is no ; ZCPR3 Resident Command Package, both of these values should be 0. ; RCP EQU 00000H ; RESIDENT COMMAND PACKAGE RCPS EQU 00 ; 00 128-byte Blocks (0K bytes) ; IOP LOCATION ; ; The following equates define the address of the ZCPR3 Input/Output ; Package and its size in 128-byte blocks. If there is no ZCPR3 Input/Output ; Package, both of these values should be 0. ; IOP EQU 00000H ; REDIRECTABLE I/O PACKAGE IOPS EQU 00 ; 00 128-byte Blocks (0K bytes) ; FCP LOCATION ; ; The following equates define the address of the ZCPR3 Flow Command ; Package and its size in 128-byte blocks. If there is no ZCPR3 Flow Command ; Package, both of these values should be 0. ; FCP EQU 00000H ; FLOW COMMAND PACKAGE FCPS EQU 0 ; 0 128-byte Blocks (0K bytes) ; ENV LOCATION ; ; The following equates define the address of the ZCPR3 Environment ; Descriptor and its size in 128-byte blocks. If there is no ZCPR3 Environment ; Descriptor, both of these values should be 0. ; ;************************************************** ;*** DON'T change this *** ;************************************************** if dimvideo z3env equ 03e19h ; environment descriptor else z3env equ 03dcbh endif z3envs equ 2 ; size of environment descriptor in 128-byte blocks ; SHELL STACK ; ; The following equates define the address of the ZCPR3 Shell Stack, ; the number of entries permitted in the ZCPR3 Shell Stack, and the size ; of each entry in the Shell Stack in terms of bytes. If there is no ZCPR3 ; Shell Stack, all three values should be 0. ; SHSTK EQU 0 ; ZCPR3 SHELL STACK SHSTKS EQU 0 ; NUMBER OF SHSIZE-BYTE SHELL STACK ENTRIES SHSIZE EQU 0 ; SIZE OF A SHELL STACK ENTRY ; (STACK SIZE = SHSTKS * SHSIZE) ; ZCPR3 MESSAGES ; ; The following equate defines the address of the ZCPR3 Message Buffer. ; This buffer is always 80 bytes long. If there is no ZCPR3 Message Buffer, ; this address should be 0. ; Z3MSG EQU 0 ; ZCPR3 MESSAGE BUFFER ; EXTERNAL FCB ; ; The following equate defines the address of the ZCPR3 External FCB. ; This buffer is always 36 bytes long. If there is no ZCPR3 External FCB, ; this address should be 0. ; EXTFCB EQU 0 ; ZCPR3 EXTERNAL FCB ; NAMED DIRECTORY BUFFER ; ; The following equates define the address and size (in terms of 18-byte ; entries) of the ZCPR3 Named Directory Buffer. If there is no such buffer, ; both of these values should be 0. ; Z3NDIR EQU 0 ; ZCPR3 NAMED DIRECTORY AREA Z3NDIRS EQU 0 ; 14 18-byte Named Directory Elements permitted ; (NDIR SIZE = Z3NDIRS*18 + 1 for trailing 0) ; COMMAND LINE ; ; The following equates define the address and size (in terms of bytes) ; of the ZCPR3 Command Line Buffer (formerly called the Multiple Command Line ; Buffer under ZCPR2). If there is no such buffer, both of these values should ; be 0. ; Z3CL EQU 0 ; ZCPR3 COMMAND LINE BUFFER Z3CLS EQU 0 ; SIZE OF COMMAND LINE BUFFER ; EXTERNAL STACK ; ; The following equate defines the address of the ZCPR3 External Stack. ; This stack is always 48 bytes in size. If there is no such stack, this ; value should be 0. ; EXTSTK EQU 0 ; ZCPR3 EXTERNAL STACK org 109h dw z3env ;patch envptr if dimvideo org 0127ch ;patch free memory pointer else org 01244h endif dw z3env+z3envs*80h ; ; Environment Descriptor ; If inline, there is a leading JMP just before this ; org z3env ds 3 envorg1: db 'Z3ENV' ; Environment ID db 2 ; class 2 environment (internal) dw expath ; external path address db expaths ; number of 2-byte elements in path dw rcp ; RCP address db rcps ; number of 128-byte blocks in RCP dw iop ; IOP address db iops ; number of 128-byte blocks in IOP dw fcp ; FCP address db fcps ; number of 128-byte blocks in FCP dw z3ndir ; NDR address db z3ndirs ; number of 18-byte entries in NDR dw z3cl ; ZCPR3 Command Line db z3cls ; number of bytes in Command Line dw z3env ; ZCPR3 Environment Descriptor db z3envs ; number of 128-byte blocks in Descriptor dw shstk ; Shell Stack address db shstks ; number of shsize-byte entires in Shell Stack db shsize ; size of a Shell Stack entry dw z3msg ; ZCPR3 Message buffer dw extfcb ; ZCPR3 External FCB dw extstk ; ZCPR3 External Stack db 0 ; quiet flag (1=quiet, 0=not quiet) dw z3whl ; address of Wheel Byte db 4 ; Processor Speed in MHz db 'C'-'@' ; maximum disk db 31 ; maximum user db 1 ; 1=OK to accept DU, 0=not OK db 0 ; CRT selection (0=CRT 0, 1=CRT 1) db 0 ; Printer selection (n=Printer n) db 80 ; width of CRT 0 db 24 ; number of lines on CRT 0 db 24 ; number of lines of text on CRT 0 db 128 ; width of CRT 1 db 24 ; number of lines on CRT 1 db 24 ; number of lines of text on CRT 1 db 80 ; width of Printer 0 db 66 ; number of lines on Printer 0 db 58 ; number of lines of text on Printer 0 db 1 ; form feed flag (0=can't formfeed, 1=can) db 102 ; width of Printer 1 db 66 ; number of lines on Printer 1 db 58 ; number of lines of text on Printer 1 db 1 ; form feed flag (0=can't formfeed, 1=can) db 80 ; width of Printer 2 db 66 ; number of lines on Printer 2 db 58 ; number of lines of text on Printer 2 db 0 ; form feed flag (0=can't formfeed, 1=can) db 102 ; width of Printer 3 db 66 ; number of lines on Printer 3 db 58 ; number of lines of text on Printer 3 db 0 ; form feed flag (0=can't formfeed, 1=can) db 'SH ' ; shell variable filename db 'VAR' ; shell variable filetype db ' ' ; filename 1 db ' ' ; filetype 1 db ' ' ; filename 2 db ' ' ; filetype 2 db ' ' ; filename 3 db ' ' ; filetype 3 db ' ' ; filename 4 db ' ' ; filetype 4 ds 80H-($-envorg1+3) ; make exactly 80H bytes long ; (+3 compensates for leading JMP) ; ; Terminal Capabilities Data ; envorg2: if OsborneI or EpsonQX or TVI955 or C128 if OsborneI DB 'Osborne I ' ;Name of Terminal endif if EpsonQX DB 'QX-10 Epson ' endif if TVI955 DB 'TVI955 ' endif if C128 DB 'C128 Commodore ' endif DB 'K'-'@' ;Cursor UP DB 'J'-'@' ;Cursor DOWN DB 'L'-'@' ;Cursor RIGHT DB 'H'-'@' ;Cursor LEFT DB 00 ;CL Delay DB 00 ;CM Delay DB 00 ;CE Delay if TVI955 DB 1bh,'+',0 else DB 1ah,0 ;CL String clear screen endif ;TVI955 DB 1bh,'=%+ %+ ',0 ;CM String cursor addressing DB 1bh,'T',0 ;CE String clear to end of line DB 1bh,')',0 ;SO String into highlighting DB 1bh,'(',0 ;SE String exit highlighting DB 0 ;TI String terminal initialization DB 0 ;TE String terminal deinitialization endif ;OsborneI or EpsonQX or TVI955 or C128 if KayproII or Kaypro2X if Kaypro2X DB 'KP-10 Kaypro 10 ' else DB 'KP-2 Kaypro II ' ;Name of Terminal endif ;Kaypro2X DB 'K'-'@' ;Cursor UP DB 'J'-'@' ;Cursor DOWN DB 'L'-'@' ;Cursor RIGHT DB 'H'-'@' ;Cursor LEFT DB 00 ;CL Delay DB 00 ;CM Delay DB 00 ;CE Delay DB 1ah,0 ;CL String clear screen DB 1bh,'=%+ %+ ',0 ;CM String cursor addressing DB 18h,0 ;CE String clear to end of line if Kaypro2X if dimvideo DB 1bh,'B1',0 ;SO String into highlighting DB 1bh,'C1',0 ;SE String exit highlighting else DB 1bh,'B0',0 ;you don't really like inverse-video DB 1bh,'C0',0 ;do you? endif ;dimvideo else DB 0 ;SO String into highlighting DB 0 ;SE String exit highlighting endif ;Kaypro2X DB 0 ;TI String terminal initialization DB 0 ;TE String terminal deinitialization endif ;KayproII of Kaypro2X if 0 ;model tcap for those who still need to build their own DB 'Terminal name ' ;16 characters ;arrow keys, one byte each DB 'K'-'@' ;Cursor UP DB 'J'-'@' ;Cursor DOWN DB 'L'-'@' ;Cursor RIGHT DB 'H'-'@' ;Cursor LEFT ;delays for cursor routines DB 00 ;CL Delay DB 00 ;CM Delay DB 00 ;CE Delay ;cursor routines, 0 terminated DB 1ah,0 ;CL String clear screen DB 1bh,'=%+ %+ ',0 ;CM String cursor addressing DB 18h,0 ;CE String clear to end of line DB 1bh,'B1',0 ;SO String into highlighting DB 1bh,'C1',0 ;SE String exit highlighting DB 0 ;TI String terminal initialization DB 0 ;TE String terminal deinitialization ; cursor addressing sequence: ; % represents the row and column coordinates (first one is row) ; %+c add offset c to coordinate ('%+ ' adds a space, 20h, to coordinate) ; %d output coordinate as decimal characters (as many as needed) ; %2 output coordinate as two decimal characters ; %3 output coordinate as three decimal characters ; ; the following codes affect interpretation of the entire string and ; may appear anytime before the first coordinate ; %i increment, home position is (1,1) instead of (0,0) ; %r reverse, send column figure first ; ; %% send '%' character ; ; example: 1bh,'[%i%d;%dH' translates as esc [ 1 ; 1 H ; 1bh 5bh 31h 3bh 31h 48h ; 1bh,'=%+ %+ ' translates as esc = ; 1bh 3dh 20h 20h ; ; Of course, you could get Z3TCAP26.LBR and look in the source code, ; but what fun would that be? endif ;0 ds 80H-($-envorg2) ; make exactly 80H bytes long ; ; End of Environment Descriptor ; ; The following code change corrects an intermittent bug that could ; inhibit constructing libraries under ZCPR3 and standard CP/M. ; It sacrifices nothing under ZCPR33. ; vb if dimvideo org 00d44h call 02776h else org 00d17h call 02728h endif end