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 reference 
the last Warm or Cold Boot, and DFU is in effect if it was issued 