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.
 
 
 
 
 
 

429 lines
20 KiB

ZCPR Version 3.4 Resident Command Package
Source Code
Revised Documentation for Version 1.1
October 7, 1989 by Carson Wilson
Version 1.0 Documentation
June 17, 1988 by Carson Wilson
Contents
--------
1. Files in this Library.
2. Purpose of the Resident Command Package.
2.1. "Resident" vs. "Transient" Commands.
2.2. The Z-System Resident Command Package.
2.2.1. Design Philosophy of the Z34 RCP.
3. Structure and Operation of the RCP Segment.
4. Generating an RCP for your System.
4.1. The Z-Relocatable Approach.
4.1.1. NZCOM and JetLDR.
4.1.2. Z-Relocatable (ZRL) Code
4.2. The Assembly Approach.
4.2.1. Note on Assemblers.
4.2.2. Assembly to Absolute Code.
4.2.3. Assembly to Z-Relocatable Code.
4.2.4. Adding Custom Commands to Z34RCP.
5. Legal Use of These Files.
1. Files in this Library.
This library of files contains the assembler source code and
accompanying documentation for the Z-System Resident Command
Package (RCP). To use Z34RCP you must be running ZCPR versions
3.3 or above. For pre-assembled Z-Relocatable (ZRL) RCPs, see
RCPZRL11.LBR. Z34RCP11.LBR consists of the following files
(uncompress with UNCR.COM, QL.COM or LBRE.COM):
CLEDINST.CZM - Installer for CLED command.
CLEDSAVE.CZM - Command file utility for CLED.
RCPCLED .DZC - Documentation on CLED.
RCPBASE .LZB - Used to assemble an absolute address RCP.
RCPCMD .LZB - Used to include custom commands in the RCP.
RCP?????.LZB - Code modules for the standard RCP commands.
SYSDEF .LZB - Commonly used equates.
Z34CMN .LZB - Used to assemble Z-Relocatable RCP's.
Z34DEFN .LZB - Offsets in the ZCPR 3.4 code.
Z34MAC .LZB - Assembler macros.
Z34RCP11.DZC - This file.
Z34RCP11.FOR - Short description of the library.
Z34RCP11.HZP - Help file for the RCP, gives command syntax and
examples.
Z34RCP .LZB - Used to select features when assembling the RCP.
Z34RCP11.NZW - Changes since Z34RCP10.LBR. Intended for former
RCP users, this will be only of passing interest
to new users.
Z34RCP11.ZZ0 - Main file for assembling the RCP.
ZSYSTEM .AZ - General information about Z System.
2. Purpose of the Resident Command Package.
2.1. "Resident" vs. "Transient" Commands.
Most of the commands used under CP/M and Z-System are "transient"
commands. The machine code for these commands (or "programs") is
stored in "command files," whose file type is normally .COM.
Thus, the machine code for WordStar is stored in a file called
"WS.COM".
To run WordStar, the user issues the command "WS" at the command
line, the operating system loads WS.COM from the disk drive to
memory, and WS.COM takes over control of the computer. If the
user then exits WordStar and issues another command, the
operating system can load another command file from the disk,
reusing the area of memory previously occupied by WordStar.
Recycling memory in this way makes personal computers quite
versatile, as the number of commands available to the user is
only limited to the number of command files stored on disk.
There are some drawbacks to this approach, however. Although
disk-based commands conserve memory by recycling it, they must be
loaded from disk each time they operate. This creates its own
costs in terms of speed of execution, disk storage space, and
memory reallocation.
The most obvious disadvantage of loading a file from disk each
time a command is issued is that it takes time to find and load
disk files. Especially with floppy diskettes, the amount of time
which elapses after the command is issued and before the command
executes is significant. A second drawback to disk-based
commands is that commands will not execute unless their machine
code is available on the disk system. This means that the user
must know what command files are available on disk before issuing
commands. The final disadvantage of disk file based commands is
that some commands (e.g., SAVE) require that the area of memory
normally overwritten by command files (known as the "Transient
Program Area" or TPA) be preserved.
In answer to these difficulties, the creators of CP/M designed
some of its commands as "built-in" commands. The DIR, REN, SAVE,
ERA, USER, and TYPE commands of CP/M 2.2 remain in memory and can
be issued without loading machine code files from disk. Thus,
the DIR command provides a disk directory regardless of whether
the command file "DIR.COM" is present on disk, and the SAVE
command saves the contents of memory at 100 hex to a disk file.
Residing permanently in memory, these commands are simple in
order to leave memory for disk-based commands to load in.
2.2. The Z-System Resident Command Package.
The creators of Z-System have followed the resident command
philosophy of CP/M, extending and enhancing the capabilities of
resident commands with the Z-System Resident Command Package.
Under CP/M 2.2, resident commands are tightly integrated with the
operating system. The user is therefore limited to a fixed set
of resident commands. The code in the Z-System Resident Command
Package is much more loosely linked with the operating system.
The RCP occupies a section of protected memory, but how that
memory is used is only very loosely constrained. The Z-System
resident command package may be tailored for a wide variety of
installations, and easily altered within a single installation.
2.2.1. Design Philosophy of the Z34 RCP.
Though any set of commands which will fit in the RCP memory area
can be loaded as an RCP, a standard set of Z-System RCP commands
have evolved over the years. Distributed as the standard
Z-System RCP, this set of commands consists of universal,
single-purpose commands modeled after the resident command set of
CP/M 2.2, such as DIR, REN, and ERA.
Keeping these commands simple both conserves memory and allows
their use in custom command scripts. None of the standard RCP
commands require interaction on the part of the user--they
perform a single function and quit. Aliases or other command
scripts which build complex commands from simple RCP commands
therefore retain complete control over the user interface.
However, the standard RCP forms only one of many alternative uses
to which the Z-System RCP memory segment may be put. Since the
RCP memory is protected, it can be used by background programs
which continue to function even while other applications have
been loaded into the transient program area. Several such
programs, including key-redefiners, screen-trapping programs,
background numeric calculators, program assembly environments,
and memory utilities have been developed.
Until Z34RCP, all but the most advanced users had to surrender
their entire RCP to use the custom commands, even if the commands
needed far less than the available RCP space. Thus, to use a
key-redefinition RCP, one was forced to give up all of his other
RCP commands. Z34RCP solves this problem by acting as a base to
which programmers may easily add code. By modifying the standard
file RCPCMD.LIB, programmers can implement and distribute custom
RCP commands which may be installed by those with only basic
knowledge of assembly language. See "Adding Custom Commands,"
below, for details.
3. Structure and Operation of the RCP Segment.
Typically, the Resident Command Package occupies 2 kilobytes of
memory, protected above the system's Basic Input Output System
(BIOS). Its internal structure is very simple, consisting of the
five byte string "Z3RCP", a table of command names and their
addresses within the RCP, and the machine code of the commands
themselves. This means that an RCP of a given length can contain
any number of resident commands which will fit in 2k, from one
large program to many shorter programs.
Further, since the RCP is independent of the rest of the
operating system, the resident commands may be changed at will.
On system startup, a default RCP is loaded into memory.
Thereafter the RCP's commands remain active until the system is
turned off or another RCP is loaded.
Using loader programs to load the RCP to memory allows another
important ability--it can exchange RCPs during a single session.
By allowing users to change their RCPs "on-the-fly," loader
programs provide some of the benefits of transient commands even
while preserving the benefits of resident commands. In fact,
even what portion of memory is allocated to the RCP can be
altered in this way by advanced users! (see the Z-System User's
Manual for more on this).
4. Generating an RCP for your System.
Since Z80 computers come with a wide variety of operating system
environments, it is impossible for a single segment of machine
code function as a universal RCP. Due to differences in
operating system and hardware design, the size and location of
memory available to the Z-System RCP vary widely. Until
Z34RCP, this meant that each type of Z80 computer required an RCP
segment assembled specifically for that computer.
Now, however, there are two basic means by which you may generate
an RCP for your system. The simplest route is to load already-
assembled Z-Relocatable code modules. This technique is
recommended for beginners and those with little experience in
assembly language. See RCPZRL11.LBR for pre-assembled RCP
modules. For more experienced users with an interest in
customizing or their RCPs or adding their own commands, custom
assembly of the files in this library is also an option.
4.1. The Z-Relocatable Approach.
4.1.1. NZCOM and JetLDR.
LDR.COM, the familiar Z-System segment loader first introduced by
Rick Conn as a means of loading the various segments of the ZCPR
environment from disk to memory, required that system segments be
assembled to run only at system-specific addresses. For example,
if the system's RCP started at FA00 hex, only an RCP assembled to
run at that starting address would function on the system.
Therefore, separate SYS.RCP files were needed for each computer
installation.
Thanks to several advanced loader utilities, namely NZCOM by Joe
Wright and JetLDR and Z3PLUS by Bridger Mitchell, custom-
assembling an RCP for a given target machine is no longer
necessary. These three programs can load specially assembled RCP
segments (known as Z-ReLocatable or "ZRL" segments) to any area
of memory. Z-System users now need only obtain previously
assembled RCP segments, much as they need only obtain assembled
.COM or .OBJ files to run transient programs.
Using information in the system's environmental descriptor,
advanced loaders load pre-assembled segments to the proper
addresses in any system. The only remaining constraint is the
amount of memory allocated to the RCP. While the standard RCP
size is 2 kilobytes, many Z-System installations vary
considerably from this standard, so it is still necessary to
ensure that a ZRL segment does not exceed available RCP memory.
Fortunately, this is taken care of automatically by the advanced
loader programs.
Using NZCOM or JetLDR, it is possible to load an RCP directly
from RCPZRL11.LBR. See NZCOM or JetLDR documentation for full
instructions on how to load Z-Relocatable RCPs with these
programs.
4.1.2. Z-Relocatable (ZRL) Code
The technique used by NZCOM and JetLDR to load a single RCP to
any address in memory involves relocatable code. Relocatable
code has been used for years by the "linker" programs available
to assembly language programmers. Since only portions of a given
Z80 machine code routine are specific to one memory address, it
is possible to create "relocatable" files of Z80 routines (known
by their file type .REL) containing all but the address-specific
codes. These files can then be very quickly relocated (or
"linked") by a linker program to operate at any memory address.
Z-Relocatable code is simply a more sophisticated form of
relocatable code. ZRL files contain separately labeled segments,
known as "named common blocks." Where normal relocatable code is
all linked to operate at one address at a time by the linker
program, named common blocks allow the linker to distinguish
between different sections of the file and to link each "block"
to operate at a different address.
This represents a major step forwards in user convenience, and
will certainly lead to more innovative work using the ZCPR system
segments. There is a minor drawback, however, inherent in the
form of assembly required by NZCOM and JetLDR. Before the advent
of these two programs, system segments were equivalent to .COM
files which were assembled to operate at addresses other than the
standard 100 hex. The ability to load a single system segment to
any address depends partially on the form of the assembled system
segment itself.
While public domain assemblers will produce absolute object
files, more sophisticated assemblers, such as SLR's Z80ASM (a
bargain at $50) are required to assemble code with named common
addresses. NZCOM and JetLDR thus greatly reduce the time needed
by most users to install Z-System segments, but those wishing to
assemble Z-Relocatable segments will probably need a commercial
assembler.
4.2. The Assembly Approach.
Those with knowledge of assembly language may opt to assemble
their own custom RCPs, including only the commands and options
which match their exact requirements. Z34RCP.LBR contains the
complete source to the ZCPR 3.4 RCP. The file Z34RCP.Z80
contains include statements to combine the various library files
during assembly. The file Z34RCP.LIB contains all of the equates
controlling assembly time options, and should be edited before
assembling Z34RCP.Z80.
4.2.1. Note on Assemblers.
The development work on Z34RCP was done exclusively with the SLR
Systems line of Z80 assemblers. Hence, some of the source code
is unavoidably specific to SLR and compatible assemblers. Those
using incompatible assemblers such as public-domain Z80
assemblers should set the SLR equate in Z34RCP.LIB to FALSE.
This removes most SLR-specific pseudo-ops, but some additional
editing of the source files may be required for error-free
assembly. Unless your assembler can handle named common blocks,
you will also want to set the ZRL equate in Z34RCP.LIB to FALSE.
4.2.2. Assembly to Absolute Code.
If you are assembling a custom RCP for use at one memory address
only, or if your assembler can't handle named common blocks, you
can set the ZRL equate in Z34RCP.LIB to FALSE, and instruct your
assembler to produce absolute code (either a .HEX or a .COM file).
Before generating absolute code you must set addresses in the
file RCPBASE.LIB for the particular installation. Once you have
set these addresses, you may proceed to assemble Z34RCP.Z80 to
either Z34RCP.COM or Z34RCP.HEX. If your assembler generated a
.HEX file, use LOAD.COM to convert Z34RCP.HEX to Z34RCP.COM.
If you are running a version of ZCPR prior to 3.4, you must now
alter two bytes in your Z-System environment segment to point to
your system's CCP address. The bytes at offset 39 and 40 hex
(formerly containing "width of printer 2" and "lines on printer
2") should contain a 2-byte address of your system's CCP, most
significant byte last.
Z34RCP.COM may now be renamed to SYS.RCP and loaded with the Z-
System loader program LDR.COM or Bridger Mitchell's JetLDR.
4.2.3. Assembly to Z-Relocatable Code.
Unlike absolute RCP segments, Z-Relocatable segments may be
loaded to ANY address, provided enough RCP space to contain them
is available. To assemble a Z-Relocatable RCP, you will need an
assembler which can handle named common blocks (see 4.2.1 above).
Set the ZRL equate in Z34RCP.LIB to TRUE, and instruct your
assembler to produce a relocatable (.REL) file. The resulting
Z34RCP.REL may then be renamed to Z34RCP.ZRL and loaded with
NZCOM, Z3PLUS, JetLDR.
4.2.4. Adding Custom Commands to Z34RCP.
As mentioned above, I have designed Z34RCP as a base to which
custom RCP commands may readily be added. All code and command
names for custom commands may be included in RCPCMD.LIB.
Thereafter, whenever the RCP is assembled the commands added to
RCPCMD.LIB will be included automatically. To remove the custom
commands, just replace the modified RCPCMD.LIB with an unmodified
copy. See RCPCMD.LIB for detailed instructions on how to add
code and command names.
RCPCMD.LIB also facilitates distribution of custom commands to be
included by others in their RCPs. Simply distribute a copy of
your modified RCPCMD.LIB along with instructions on how to use
your custom commands. Users may then easily include the new
commands by substituting your modified RCPCMD.LIB for their
original copy and reassembling their RCPs.
Of course, users of NZCOM, Z3PLUS, or JetLDR may simply trade
custom RCPs in Z-Relocatable form and dispense with the need for
any assembly work on the part of the user. All three of these
advanced loaders are available from Z Systems Associates (see
below).
5. Legal Use of These Files.
Z34RCP is copyright 1989 by Z Systems Associates (ZSA), all
rights reserved. Any commercial use of Z34RCP, defined as any
situation where the duplicator recieves revenue by duplicating or
distributing Z34RCP by itself or in conjunction with any hardware
or software product, is expressly prohibited unless authorized in
writing by ZSA.
Except for the file RCPCMD.LIB (see 4.2.4 above), you may
redistribute Z34RCP.LBR in its present form only. I encourage
you to explore the source code, suggest improvements, and
document errors. However, please obtain permission from Z
Systems Associates before redistributing any of these files in
altered form. This will prevent confusion by allowing your work
to be coordinated with the efforts of others.
The Z Systems Associates are:
Sage Microsystems East
Selling & Supporting the Best in 8-Bit Software
1435 Centre St., Newton Centre, MA 02159-2469
Voice: 617/965-3552 (9:00am - 11:30pm)
Modem: 617/965-7259 (password = DDT)(MABOS on PC-Pursuit)
and:
Plu*Perfect Systems
"==World-Class Software"
410 23rd Street, Santa Monica, CA 90402
Voice: 213/393-6105 (evenings)
Modem: 213/670-9465 (leave message for "Bridger Mitchell")
For more information on Z System, check at the above bulletin
board systems, or consult The Computer Journal for excellent
articles on ZCPR and CP/M. The Computer Journal is published six
times a year by Publishing Consultants, 190 Sullivan Crossroad,
Columbia Falls, MT 59912, phone 406/257-9119. An issue averages
forty pages with few ads. Subscription rates are $16 for one
year (6 issues), or $28 for two years (12 issues) in the U.S.,
$22 for one year Canada and Mexico, and $24 (surface) for one
year in other countries.
Carson Wilson is the operator of:
Antelope Freeway Remote Access System
Chicago, 312-764-5162
300-1200-2400 Baud, 24 Hours