MaxZ80 - Chapter 5

I mentioned in a previous Chapter that you could type either SUBMIT
CMD or CMD.SUB to run the command contained in the file CMD.SUB. This
remark will be our opening to a few of the many powerful features of
Z-System.

One of the modules in Z-System is the CCP, the Console Command
Processor. "ZCPR 3.4" stands for "Z80 Command Processor Replacement
version 3.4" and is the CCP we are using. The Z80 microprocessor chip
differs from the 8080 chip in that it implements some operation codes
that the 8080 leaves undefined. This allowed people like Richard Conn
to rewrite the command processor part of CP/M and make it more
powerful but still compatible with CP/M and still small enough to fit
in a 2K package. The main thing a command processor does is gather
what you type at the prompt and, if there is a file in user area 0 on
the logged drive with the same name as what you typed (but with a .COM
on its end), it copies the machine code contents of this .COM into
memory starting at hexadecimal location 100 and then executes the
instruction at hexadecimal location 100. If no such .COM is found and
what you type is not a resident command, like DIR, some error message
is issued.

Under Z-System, a more powerful algorithm for resolving what to do
after you hit the Enter key takes place. One of the steps is this: if
there is no .COM file and there is something called an "Extended
Command Processor" installed, this processor runs. The one we use here
is CMDRUN.COM, which is actually ARUNZ.COM, renamed. Here's what ARUNZ
displays when you run it on its own.

8:35 A1:COMS>CMDRUN //
 ARUNZ, Version 1.1   (Type 3 at 8000H)
  Syntax:  ARUNZ NAME [PARAMETERS]
  Runs alias script NAME from text file ALIAS.CMD

So, we need to look at the text file ALIAS.CMD. The lines in it that
are important right now are

>sub zex $tn0 $*
>zex zex $tn0 $*

ARUNZ pays attention to the filetype of the command and if there is a
line in ALIAS.CMD that starts with > followed by this filetype it will
run the command that follows. It replaces any clauses that start with
$ with something which depends on what follows the $. In our case,
$tn0 means "the filename of the 0th command token." There is only one
token in our case and since programmers often count things starting
with 0, "the filename of the 0th command token" would be CMD.

So, typing CMD.SUB will cause the command

ZEX CMD

to run. $* gets replaced by an empty string because it means "the rest
of the command you issued" and in our case there was nothing following
CMD.SUB.

ZEX.COM is another transient command. It's like SUBMIT.COM, the job
control processor of CP/M. ZEX will look for a .SUB file (or a .ZEX
file) with a filename of CMD.

Now you know why SUBMIT CMD and CMD.SUB both do the same thing!