forked from MirrorRepos/RomWBW
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
367 lines
14 KiB
367 lines
14 KiB
Summary of the New Features of ZCPR
|
|
The ZCPR Command Hierarchy Search
|
|
ZCPR-Resident Command DIR
|
|
ZCPR-Resident Command ERA
|
|
ZCPR-Resident Command LIST
|
|
ZCPR-Resident Command TYPE
|
|
ZCPR-Resident Command SAVE
|
|
ZCPR-Resident Command REN
|
|
ZCPR-Resident Command USER
|
|
ZCPR-Resident Command DFU
|
|
ZCPR-Resident Command JUMP
|
|
ZCPR-Resident Command GO
|
|
ZCPR-Resident Command GET
|
|
ZCPR Error Messages
|
|
:Summary of the New Features of ZCPR
|
|
ZCPR (Z80 Command Processor Replacement) is a replacement of
|
|
the CP/M CCP which is designed to run as part of CP/M on Z80-
|
|
based microcomputers. In most cases it is upward-compatible to
|
|
the original CP/M Version 2.2 CCP.
|
|
|
|
ZCPR, however, provides many extensions over the CP/M CCP.
|
|
Included in these extensions are:
|
|
|
|
. The TYPE function can be made to page or not page its
|
|
output at the user's discretion
|
|
|
|
. A LIST function is available which sends its output
|
|
to the CP/M LST: Device and does NOT page
|
|
|
|
. The DIR command has been extended to allow the dis-
|
|
play of the system files or all files
|
|
|
|
. The ERA command now prints out the names of the files
|
|
it is erasing
|
|
|
|
|
|
. The current user number may be included as part of
|
|
the command prompt; if the user is under a number other than 0,
|
|
the prompt is of the form 'du>' (like 'A2>' or 'B10>'), and, if
|
|
the user is under 0, the prompt may be 'd>' or 'd0>' as per his
|
|
choice
|
|
|
|
. The SUBMIT facility has been changed in two basic
|
|
ways:
|
|
- the prompt changes to 'du$' or 'd$' when the
|
|
SUBMIT command is printed
|
|
- the $$$.SUB is executed from drive A: only (note
|
|
that the original SUBMIT problem now exists, but the new SUB.COM
|
|
facility corrects it); Indirect Command Files now perform
|
|
according to the basic philosophy that any command sequence that
|
|
can be input from the console may be used in an Indirect Command
|
|
File as well; the ZCPR.DOC file also gives details as to how to
|
|
patch SUBMIT.COM if SUB.COM is not available
|
|
|
|
|
|
. A command-search hierarchy is now implemented which
|
|
is executed as follows:
|
|
- the user's command is checked against the CPR-
|
|
resident commands and executed immediately if a match is found
|
|
- failing that, the current user number on the
|
|
current disk is scanned for the COM file; the COM file is loaded
|
|
and executed if found
|
|
- failing that, a default user number (initially 0
|
|
but can be reset with the DFU CPR-resident command) on the cur-
|
|
rent disk is scanned for the COM file; the COM file is loaded and
|
|
executed if found
|
|
- finally, failing that, the default user number
|
|
on disk A: is scanned for the COM file; the COM file is loaded
|
|
and executed if found or an error message (COMMAND?, when COMMAND
|
|
was the user's command name) is printed
|
|
|
|
|
|
. The numeric argument for the SAVE CPR-resident com-
|
|
mand (viz the number of 256-byte pages to save) can be input in
|
|
HEX rather than decimal
|
|
|
|
. A GET command which loads a file at a specified
|
|
memory address and a JUMP command which "calls" the subroutine at
|
|
a specified memory address have been added; a GO command which
|
|
"calls" the subroutine starting at 100H is also added (this is
|
|
redundant with JUMP 100H)
|
|
|
|
|
|
:The ZCPR Command Hierarchy Search
|
|
The first, and most basic thing, to learn about ZCPR is the
|
|
order in which it searches for a COM file for execution or a file
|
|
specified by the GET command. Under the CP/M 2.2 CCP, if the
|
|
specified COM file command was not found on the current drive in
|
|
the current user area, the CCP aborted with an error message.
|
|
ZCPR, however, continues searching from this point a maximum of
|
|
two more levels. This command hierarchy search was outlined
|
|
above and is described here in further detail.
|
|
|
|
1. If the command is of the form 'COMMAND' and NOT
|
|
'd:COMMAND', the CPR-resident command list is searched for a
|
|
match. If the match is found, the CPR-resident command is
|
|
immediately processed. If the match is not found or the command
|
|
is of the form 'd:COMMAND', the next step is taken. Note that
|
|
the 'd:COMMAND' form is good for executing a COM file which has
|
|
the same name as a CPR-resident command (such as SAVE or DIR).
|
|
|
|
|
|
2. If the command is of the form 'd:COMMAND', disk
|
|
drive 'd:' is temporarily logged in for the purpose of the
|
|
command search. Otherwise, the currently logged-in drive is
|
|
used.
|
|
|
|
3. Now the file named COMMAND.COM is searched for. If
|
|
found, it is loaded into memory starting at 100H and executed.
|
|
If not, proceed to step 4.
|
|
|
|
4. Now that the first search for COMMAND.COM has
|
|
failed, the CPR checks to see if the user is under the current
|
|
Default User Number. The Default User Number may be that set by
|
|
the DEFUSR equate in the CPR or that set by the user via the DFU
|
|
command. DEFUSR is in effect if DFU has not been issued since
|
|
the last Warm or Cold Boot, and DFU is in effect if it was issued
|
|
since the last Warm or Cold Boot. If the user is NOT under the
|
|
current Default User Number, ZCPR temporarily logs him into it
|
|
and searches the directory. If COMMAND.COM is found, it is
|
|
loaded as described above and executed. If not, ZCPR proceeds to
|
|
the next step.
|
|
|
|
5. The user is now in the Default User Number, and at
|
|
this point, ZCPR checks to see if the user is on disk drive A:.
|
|
If not, it temporarily logs into A: and searches the default user
|
|
number of A: for COMMAND.COM. If found, it is loaded as
|
|
described above and executed. If not, ZCPR prints the command
|
|
name as an error message and returns to command input mode,
|
|
aborting the SUBMIT file if COMMAND came from it.
|
|
|
|
In all cases of the search above, if COMMAND.COM is found,
|
|
after it is loaded into memory, ZCPR resets the user to his
|
|
original disk drive and user number. Hence, the files referenced
|
|
by the user by default are obtained from this environment.
|
|
|
|
|
|
To illustrate this command hierarchy search, consider the
|
|
following examples:
|
|
|
|
Example 1: DEFUSR equ 0 {default user number is 0}
|
|
|
|
B10> <-- User is on Drive B:, User Number 10
|
|
B10>ASM TEST.BBZ <-- User wishes to assemble TEST.ASM in
|
|
Drive B:, User 10
|
|
<-- At this point, ZCPR looks on B:/10 for ASM.COM, fails,
|
|
looks on B:/0, fails, and finally looks on A:/0; it
|
|
finds ASM.COM here and goes back to B:/10 for the file
|
|
|
|
|
|
|
|
|
|
Example 2: DEFUSR equ 0 and DFU issued
|
|
|
|
B10> <-- User is on Drive B:, User Number 10
|
|
B10>DFU 5 <-- User Selects User 5 as default
|
|
B10>ASM TEST.BBZ <-- As above
|
|
<-- At this point, ZCPR looks on B:/10 for ASM.COM, fails,
|
|
look on B:/5, fails, and finally looks on A:/5; it
|
|
fails here also and prints ASM? as an error message
|
|
|
|
Example 3: DEFUSR equ 0
|
|
|
|
B> <-- User is on Drive B:, User Number 0
|
|
B>ASM TEST.BBZ <-- As above
|
|
<-- At this point, ZCPR looks on B:/0 for ASM.COM, fails,
|
|
looks on A:/0, fails, and prints error message
|
|
|
|
|
|
|
|
Example 4: DEFUSR equ 0
|
|
|
|
A10> <-- User is on Drive A:, User Number 10
|
|
A10>ASM TEST.AAZ <-- As above, but file on A:
|
|
<-- At this point, ZCPR looks on A:/10 for ASM.COM, fails,
|
|
looks on A:/0, fails, and prints error message
|
|
|
|
:ZCPR-Resident Command DIR
|
|
Command: DIR
|
|
Function: To Display a listing of the names of the files on disk
|
|
Forms:
|
|
DIR <afn> <-- Displays $DIR files
|
|
DIR <afn> S <-- Displays $SYS files
|
|
DIR <afn> A <-- Displays both $DIR and $SYS files
|
|
Examples:
|
|
DIR *.ASM <-- All $DIR .ASM files
|
|
DIR *.COM S <-- All $SYS .COM files
|
|
DIR *.COM A <-- All .COM files
|
|
Notes:
|
|
If a file is scanned for and no such name exists on disk,
|
|
the 'No Files' message will appear. However, if a file is
|
|
scanned for and the name exists as a $SYS file and $DIR files are
|
|
being scanned for, no file name is displayed but the 'No Files'
|
|
message does NOT appear. For example, if TEST.COM is a $SYS file
|
|
and 'DIR TEST.COM' is issued, no message appears. If 'DIR
|
|
TEXT.COM' is issued and TEXT.COM does not exist on disk, the 'No
|
|
Files' message is displayed.
|
|
:ZCPR-Resident Command ERA
|
|
Command: ERA
|
|
Function: To Erase the specified $R/W files from disk
|
|
Forms:
|
|
ERA <afn> <-- Erase both $DIR and $SYS files
|
|
Examples:
|
|
ERA *.ASM <-- Erase all .ASM files
|
|
ERA *.* <-- Erase all files
|
|
Notes:
|
|
If a $R/O file is encountered, a BDOS error message will be
|
|
displayed and the procedure is stopped. The user is unsure at
|
|
this time as to which files have been erased and which have not
|
|
and should check. Sorry for this problem! The ERASE command (to
|
|
be given to SIG/M by RLC in the near future) is a solution to
|
|
this problem.
|
|
:ZCPR-Resident Command LIST
|
|
Command: LIST
|
|
Function: To Print the specified file on the CP/M LST: device
|
|
Forms:
|
|
LIST <ufn> <-- Print the file (no paging)
|
|
Examples:
|
|
LIST TEST.TXT <-- Print TEST.TXT on LST:
|
|
Notes:
|
|
If the file has a $SYS attribute, it will be found as well
|
|
as those with $DIR attributes.
|
|
:ZCPR-Resident Command TYPE
|
|
Command: TYPE
|
|
Function: To Print the specified file on the CP/M CON: device
|
|
Forms:
|
|
TYPE <ufn> <-- Print the file with the paging deflt
|
|
TYPE <ufn> P <-- Print the file with the paging deflt
|
|
negated
|
|
Examples:
|
|
TYPE TEST.TXT
|
|
TYPE TEST.TXT P
|
|
Notes:
|
|
When the display pauses during paging, type any char to
|
|
continue or ^C to abort. ^S also works.
|
|
:ZCPR-Resident Command SAVE
|
|
Command: SAVE
|
|
Function: To Copy the TPA starting at 100H to disk
|
|
Forms:
|
|
SAVE <Number of Pages> <ufn> <-- <Number of Pages> in DEC
|
|
SAVE <Number of Pages>H <ufn> <-- <Number of Pages> in HEX
|
|
SAVE <Number of Sectors> <ufn> S <-- <Number of Sectors>
|
|
in DEC
|
|
SAVE <Number of Sectors>H <ufn> S <-- <Number of Sectors>
|
|
in HEX
|
|
Examples:
|
|
SAVE FH MYFILE.TXT <-- 15 pages saved
|
|
SAVE 15 MYFILE.TXT <-- 15 pages saved
|
|
SAVE 10H MYFILE.TXT S <-- 16 sectors (8 pages) saved
|
|
Notes:
|
|
The error message 'Delete File?' is printed if <ufn> already
|
|
exists. To go ahead and SAVE, type Y or y to erase the file and
|
|
proceed with the SAVE.
|
|
|
|
:ZCPR-Resident Command REN
|
|
Command: REN
|
|
Function: To Change the name of a disk file
|
|
Forms:
|
|
REN <ufn new>=<ufn old>
|
|
Examples:
|
|
REN NEWFILE.TXT=OLDFILE.TXT
|
|
Notes:
|
|
The error message 'Delete File?' is printed if the <ufn new>
|
|
already exists. To go ahead and complete the REN, type Y or y to
|
|
erase the current <ufn new> file and then <ufn old> will be
|
|
renamed to <ufn new>.
|
|
|
|
:ZCPR-Resident Command USER
|
|
Command: USER
|
|
Function: To Change the current user number
|
|
Forms:
|
|
USER <User Number> <-- <User Number> in DEC
|
|
USER <User Number>H <-- <User Number> in HEX
|
|
Examples:
|
|
USER 15
|
|
USER FH
|
|
USER 0
|
|
USER <-- Same as USER 0
|
|
Notes:
|
|
-None-
|
|
:ZCPR-Resident Command DFU
|
|
Command: DFU
|
|
Function: To Temporarily Change the default user number for the
|
|
command hierarchy search
|
|
Forms:
|
|
DFU <User Number> <-- <User Number> in DEC
|
|
DFU <User Number>H <-- <User Number> in HEX
|
|
Examples:
|
|
DFU 15
|
|
DFU 0
|
|
DFU FH
|
|
DFU <-- Same as DFU 0
|
|
Notes:
|
|
-None-
|
|
:ZCPR-Resident Command JUMP
|
|
Command: JUMP
|
|
Function: To "call" the subroutine at the specified page address
|
|
Forms:
|
|
JUMP <Address> <Cmd Parms> <-- <Address> in HEX
|
|
Examples:
|
|
JUMP E000 or JUMP E000H <-- Jump to E000H
|
|
JUMP 100 <-- Jump to 100H
|
|
JUMP 0 <-- Jump to 000H
|
|
JUMP <-- Same as JUMP 0
|
|
Notes:
|
|
JUMP performs a subroutine "call", so the called routine may
|
|
return to the ZCPR by either a RET or a Warm Boot.
|
|
:ZCPR-Resident Command GO
|
|
Command: GO
|
|
Function: To "call" the subroutine at address 100H
|
|
Forms:
|
|
GO <Cmd Parms> <-- Routine at 100H
|
|
Examples:
|
|
GO *.ASM <-- Execute TPA-resident prog
|
|
with *.ASM passed
|
|
Notes:
|
|
This is identical in function to JUMP 100H.
|
|
:ZCPR-Resident Command GET
|
|
Command: GET
|
|
Function: To load a file from disk into memory starting at the
|
|
specified page
|
|
Forms:
|
|
GET <Address> <ufn> <-- <Address> in HEX
|
|
Examples:
|
|
GET 8000 TEST.80 <-- Load TEST.80 starting at 8000H
|
|
GET 100 TEST.80 or GET 100H TEST.80 <-- Load TEST.80 start-
|
|
ing at 100H
|
|
GET 0 TEST.80 <-- Load TEST.80 starting at 000H
|
|
Notes:
|
|
GET searches for the specified file according to the same
|
|
command hierarchy search employed by the ZCPR command scanner.
|
|
Hence, if the user is on B:/10 and the file is on A:/0 with the
|
|
current default user number at 0, GET will search from B:/10 to
|
|
B:/0 to A:/0 in looking for the file.
|
|
:ZCPR Error Messages
|
|
The following are the error messages issued by ZCPR and
|
|
their meanings.
|
|
|
|
Message Meaning
|
|
|
|
? Printed after a command or an argument means that such
|
|
was invalid
|
|
|
|
No File From DIR, this means that DIR did not locate any files
|
|
Also from ERA with the same meaning
|
|
|
|
All? Issued in response ERA *.*, asks the user is he really
|
|
wants to erase all the files. Unlike under the
|
|
original CP/M 2.2 CCP, single character input is
|
|
required (Y or y for yes and anything else for no)
|
|
with NO <CR> to end the line
|
|
|
|
|
|
Message Meaning
|
|
|
|
Full From SAVE, means that there is not enough space on
|
|
disk
|
|
From GET or command load by CPR, means that there
|
|
is not enough space in memory
|
|
|
|
Delete File?
|
|
From REN or SAVE, means that the file specified already
|
|
exists on disk and the user may type Y or y to erase
|
|
it and continue with the procedure or any other
|
|
character to abort
|
|
|
|
|