ZPM3 and ZCCP Enhancements for CP/M Plus

Started by Blacklord, June 24, 2007, 05:28 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Blacklord

(Reprinted from C= Hacking #5)

ZPM3 and ZCCP Enhancements for CP/M Plus from Simeon Cran
by Randy Winchester (randy@mit.edu)

Operating System Components

The CP/M Plus operating system consists of three modules.  The CCP (Console
Command Processor), is the part of CP/M that you see when you first boot the
system.  The CCP prints the A> disk prompt, accepts user input, and loads
commands from disk.

The BDOS (Basic Disk Operating System) handles the CP/M functions of disk,
console, and printer input/output, and the tasks of file management.

The BIOS (Basic Input Output System) does the real input/output work for the
BDOS. The BIOS contains the code customized for the CP/M hardware that you're
using. On the C128, the BIOS contains the routines for driving the 40 and 80
column screens, using the REU as a RAM drive, and reading/writing several
different disk formats on 1571 and 1581 drives.  The BIOS can be thought of as
a collection of device drivers that are specific to your computer.


What's New - BIOS-R6

BIOS-R6 (C128 BIOS modified by Randy Winchester and others) is the latest of
the modified versions of the C128 CP/M BIOS.  Most of the changes to the BIOS
result in faster processing speed. For example, all the code for driving a 40
column screen has been removed.  Almost everyone using CP/M is going to be
using it in 80 columns anyway.  Cutting this code takes a big load off the
system and increases overall speed by about 15%.  Similarly, the interrupt
driven RS232 has been set from 300 to 75 baud.  The higher the baud rate, the
more processor time is required to service RS232.  Since the RS232 code is
always running, decreasing the baud rate frees up cycles that the processor
needs to service RS232.  This doesn't affect the operation of terminal programs
which explicitly set the baud rate when they start up.

Other features of BIOS-R6 include a screen dump function, commented source to
assist the programmer in producing customized systems, and support for
additional disk formats.  Some of the new disk formats include Commodore's
standard 1581 CP/M format, MAXI 71 (398K on 5.25" disks), and GP 1581 (796K on
3.5" disks).

C128 CP/M programmers who want to add or change operating system features
should try to make changes to the BIOS.  For one thing, BIOS source code is
available, but not available for the BDOS or CCP.  (Source code is not
available for the BDOS and CCP replacements mentioned in this article either).
Another reason is that the BDOS and CCP are intended to be "invariable"
operating system components - that is, they are identical for different
computers that run CP/M Plus.  A study of the BIOS source code will reveal
segments of code that can be removed if they aren't needed, and will provide
hints as to new features that can be added.

The distribution package, BIOS-R6.LBR includes documentation, source code,
utilities, and support files.  BIOS-R6.LBR also contains the latest version of
ZPM3. [Ed. Note: The files mentioned in this article can be found via
anonymous FTP or via the mailserver through the "psend" command.]


ZPM3 Features

ZPM3 is a replacement BDOS by Simeon Cran.  Since the BDOS is supposed to be
"invariable," why would anyone want to replace it? The answers to that are
pretty typical - bug fixes, speed enhancements, and new features!  ZPM3
interacts with the BIOS and CCP in most of the same ways as the standard
Digital Research BDOS, and for the most part appears to be a clone of the
standard BDOS.  The standard BDOS was coded in 8080 assembly to make it
compatible with machines that use the older slower 8080 processor.  Very few
(if any) CP/M Plus machines used the 8080. ZPM3 is coded in faster, compact Z80
assembly language, for the Z80 processor that is at the heart of most CP/M Plus
computers (including the C128).

The ZPM3 documentation details fixes to several bugs that have plagued CP/M
Plus since day one.  Although the bugs sound somewhat obscure, there's no
telling when one might cause problems.

ZPM3 is much faster than standard CP/M Plus.  The increased speed should be
obvious after using it for a short time.

The new features offered by ZPM3 are remarkable.  Three closely related
features are enhanced command line editing, a history buffer that stores and
recalls multiple commands, and Automatic Command Prompting.  These features
work in concert to provide a flexible and convenient command line interface.
Command line editing now has 20 control key functions for moving or deleting by
characters or whole words.  The most recent command lines (up to 250
characters) are stored in the history buffer, and can be recalled and reused,
or reedited if necessary.  Automatic Command Prompting is best appreciated if
seen in action.  It's similar to command line completion in Unix, except that
it's automatic, with matching responses coming directly from the history
buffer.  If you've recently entered a long command line with lots of options,
and need to reuse it (or edit it slightly first), typing the first few unique
characters will bring back the entire command from the history buffer if it's
still intact.  Automatic Command Prompting is so radical that it might take
some getting used to. If you don't think you can get used to it, it can be shut
off.

The latest version of ZPM3, ZPM3N08.ARK, is included inside BIOS-R6.LBR, and
can also be found as a separate file.



ZCCP Documentation, Version 1.0

The remainder of this article will describe ZCCP and how to configure a system
disk to get a fully functional ZPM3/ZCCP system up and running.  BIOS-R6 and
ZPM3 both come with enough documentation to keep you busy for hours, but ZCCP
has never been distributed by itself, because up until this article, there has
not been any documentation for it.  Most of the documentation that follows was
figured out through experimentation and later verified by Simeon Cran.

ZCCP Features

This documentation is provided to assist the user in getting a ZCCP system up
and running.  It is not an exhaustive course on Z- System or ZCPR.  The
following list details which ZCPR features are provided with ZCCP, and which
ones aren't.

    * ZCPR 3.3 compatibility.  ZCCP can run a wide range of utilities an
    applications created for ZCPR 3.3 and ZCPR 3.4.

    * TCAP.  A Z3T termcap file describing terminal characteristics can be
    loaded into the system.  Z-System programs make use of the TCAP for output
    to the screen - a big improvement over the old method of patching
    individual programs with terminal control codes.  TCAP files are loaded by
    the ZCCP LOADSEG command.

    * Named directories.  User areas can be assigned names.  Up to 12 user
    areas can be assigned names.  Named Directory Registers (*.NDR files) are
    loaded by the ZCCP LOADSEG command.

    * Command Search Path.  ZCCP will search for commands along a user defined
    search path.  Up to six path elements (directories) can be defined.

    * Environment block.  Contains TCAP, Named Directory, and Path information.
    Also includes a map of active disk drives and other system information.
    The environment block can be viewed with the Z-System SHOW utility.

    * Flow control.  Conditional processing for batch files.  Relies on
    Z-System IF.COM for setting the flow state.  Other flow control commands
    (FI, ELSE, XIF, OR, AND) are resident.

    * Multiple commands can be entered on the command line.  The command line
    buffer will hold up to 225 characters.  Commands should be separated by
    semicolons.

    * Extended Command Processor.  If a command is not a built-in flow command,
    resident command, or located on disk along the search path, the command
    line is passed to an extended command processor.  A typical extended
    command processor is ARUNZ, a sophisticated batch file executor with alias
    features.  To use a program as an extended command processor, rename it to
    CMDRUN.COM and place it in the ROOT directory of your boot disk.

    * Error handler.  In the event that the extended command processor can't
    handle a command, control is passed to an error handler.  Error handlers
    give information about the error (instead of the useless CP/M "?" message)
    and allow the command line to be edited and reused.

    * Resident commands.  The following commands are built in:
      CLS  - clears the screen
      NOTE - text following the NOTE command is treated as a comment.
      FI   - Flow control:  terminate the current
      IF level ELSE - Flow control:  toggle the flow state
      XIF  - Flow control:  exit all pending IF levels
      OR   - Flow control:  OR IF tests to set flow state
      AND  - Flow control:  AND IF tests to set flow state

    * Shell stack.  Up to four shell levels can be defined.  Z-System provides
    a choice of several different shells.  Applications such as terminal
    programs and word processors can also be assigned shell status.

    * ZCCP uses the LOADSEG command for direct loading of RSX files that have
    not been GENCOMed.  Example: LOADSEG SAVE.RSX loads SAVE.RSX.

    There are some things that Z3Plus will do that ZCCP won't do.

    - ZCCP does not support a Flow Command Package (FCP).  It relies on the
    transient IF command.  Other flow commands (FI, ELSE, XIF, OR, AND) are
    resident in ZCCP.

    - A Resident Command Package (RCP) is not implemented.  CLS and NOTE are
    resident in ZCCP.  All other commands must be loaded from disk.  This isn't
    as much of a handicap as it might sound if you have a fast RAM drive, such
    as a CBM 17xx REU, Quick Brown Box, or RAMLink.

    - ZCCP can not load type 4 programs (used with ZCPR 3.4).  It loads
    standard COM files at 100H, and type 3 programs that load higher in memory.
    Most type 4 programs have type 3 or COM equivalents.

    - ZCCP can not reexecute loaded programs.  This trick is usually performed
    on Z-Systems with a GO command that jumps to 100H. Since ZCCP also loads at
    100H, a GO command would only restart ZCCP.


The Files

Three files are included in ZCCP.ARK:

 File name      Size  Description
 ============   ====  ==========================================
 CCP     .COM   3k    ZCCP replacement for CCP.COM
 LOADSEG .COM   3k    Loader for named directories and termcaps
 ZINSTAL .ZPM   1k    Segment containing environment information


Getting Started - Preparing a Boot Disk

Format a Commodore CP/M format 5.25 or 3.5 inch disk.  ZCCP must be booted from
device 8 (CP/M drive A).

Copy the files from ZCCP.ARK to user area 0 of the newly formatted disk.

Copy CPM+.SYS to user 0 of the boot disk.  The CPM+.SYS must have been
generated using the BDOS segments from ZPM3.

Locate a copy of a Z-System alias utility.  A good one is SALIAS16, although
others should work also.  Copy it to user 0 of the boot disk.

At this point, hit the reset switch and boot the system with the new disk.
After the system boots, you won't be able to do much with it.  The only
resident commands are CLS and NOTE, and ZCCP can only locate commands if they
are prefixed with the drive and user number.

The next step is to create a startup alias.  When ZCCP boots, it looks for a
file named STARTZPM.COM and executes commands from it.  STARTZPM.COM is created
with a ZCPR alias utility.  Here is a listing of a STARTZPM.COM created with
SALIAS:

     =============================================================

     A0>SALIAS STARTZPM

     15:                ; Logs the ROOT directory (A15) on the
                        ; current drive.

     QD F/F             ; Installs Quick Brown Box ramdisk driver.

     LOADSEG NAMES.NDR C128-XBR.Z3T
                        ; LOADSEG loads the Named Directory Register
                        ; and TCAP.
                        ; Directories can now be referred to by
                        ; name, as in the next command:

     SETPTH10 /C COMMANDS REU 1581 $$$$ $$0 ROOT
                        ; SETPTH sets the command search path.
                        ; The /c option first clears any existing path.
                        ; Directories are then listed in the
                        ; order searched.  In this case, COMMANDS
                        ; is a 64K QBB ramdisk (drive/user F0) where
                        ; frequently used commands are stored.  REU is
                        ; a 1750 REU (drive/user M0).  1581 is a 1581
                        ; drive, (drive/user C15) where some 700K
                        ; of utilities and applications are
                        ; located.  $$$$ refers to the currently
                        ; logged drive and user area.  $$0 refers
                        ; to user area 0 of the current drive.
                        ; The ROOT directory is on drive A, user
                        ; 15, where startup utilities and system
                        ; files can be found.

     1571 [AB           ; This speeds up 1571 disk drives A and B
                        ; by shutting off the redundant write verify.

     AUTOTOG ON         ; Turns on keyboard control of ZPM3 Auto
                        ; Command Prompting.  Auto Command
                        ; Prompting is toggled by entering CTRL-Q.

     COMMANDS:          ; Logs the commands directory.

     IF ~EXIST CP.*     ; Test to see if commands are loaded.
                        ; This line reads:  "If the CP command
                        ; does not exist . . ." and sets the flow
                        ; state to true if the file doesn't exist.
        QD I/F          ; ". . . then initialize the QBB . . ."
        C1:CP C1:*.* F0:
                        ; ". . . copy all of the commands in
                        ; drive/user C1 to the commands (F0)
                        ; directory . . ."
     FI                 ; ". . . end if."

     ROOT:              ; Log the root directory (A15).

     CP C:ZF*.* M0:     ; Copy ZFILER.COM and ZFILER.CMD to the
                        ; REU directory (M0).

     VERROR             ; Install VERROR error handler.

     DATE S             ; Set the system time and date.

     ZF                 ; Invoke ZFILER as a shell.

     =============================================================

Of course, your STARTZPM alias will vary depending on the hardware you need to
support, your software preferences, and your work habits.  This alias is close
to the upward size limit that ZCCP can handle based on the capacity of the
multiple command buffer.  At the very least, I recommend an alias that will set
up a search path and load a TCAP.

Actually, I put the cart before the horse in this example.  If you try to
reboot your system with the LOADSEG command as listed, you'll notice that you
don't have a NAMES.NDR file.  There isn't one distributed with ZCCP either.
Z-System utilities won't let you edit the NDR either, since the buffer for it
hasn't been created yet.  This turned out to be a nasty chicken/egg situation,
hopefully solved by the inclusion of a sample NAMES.NDR file containing simply
A0:SYSTEM and A15:ROOT.

At this point, you should have a mostly functioning ZCCP system disk.  Press
reset and boot it up.  You might want to correct any problems with it or tweak
it to perfection before moving on.


List of Z-System Utilities for ZCCP

Some of the following utilities are essential, others are nice to have.  The
version numbers listed are the latest known versions at the time that this
documentation was written.  Utilities can be found on ZNode BBSs, and some of
them are available on Simtel20 or its mirror sites.  Some of the more important
utilities will be uploaded to cco.caltech.edu.

         SALIAS16  - already mentioned in the example above.  SALIAS (or one of
         the other ZCPR alias utilities) are essential.

         ARCOPY    - not a ZCPR utility, but one of the best CP/M file copiers
         ever.

         SD138B    - excellent DIRectory utility.  SD offers many different
         types of sorts, list formats, etc., displays date stamps, and supports
         output to a file.

         MKDIR32   - utility for manipulating directory names and Named
         Directory Register (*.NDR) files.

         ERASE57   - erases files.

         ZFILER10  - a file management shell that can launch applications. It
         is programmable in that it can execute user defined macros from a
         file.  Multiple files can be "tagged" and operated on by other
         programs.  ZFILER is an excellent program, sort of a GUI desktop
         without the slow graphics.

         C128-XGR  - a library of eXtended GRaphics termcaps for the C128. This
         file is essential if you want to use any ZCPR programs that need a
         TCAP.  These termcaps are the first for the C128 that implement
         character graphics, standout mode, and control of blinking reverse,
         and underline modes.

         SETPTH10  - used to set the command search path.  Essential!

         VERROR17  - error handler that displays the command line for
         reediting.  VERROR17 is the only error handler that I found that works
         with ZCCP.

         ZEX50     - Z-System EXecutive is a powerful batch file processor that
         replaces the CP/M SUBMIT command.

         LBRHLP22  - Z-System Help utility displays help files.  Help files can
         be crunched (*.HZP), and/or loaded from a HELP.LBR library.

         ARUNZ09   - runs an alias script from a text file.  ARUNZ is
         frequently used as an extended command processor.  To use ARUNZ (or
         any other executable utility) as an extended command processor, rename
         it to CMDRUN.COM.

         VLU102    - Video Library Utility views or extracts files from
         libraries.  Versions of VLU above 1.02 do not work reliably with
         ZPM3/ZCCP.

         Z33IF16   - is the IF.COM discussed in the section on flow control.

         SHOW14    - displays an immense amount of information about your
         Z-System.  SHOW also includes a memory patching function.

         ZCNFG24   - configures Z-System program options.  Most Z-System
         programs are distributed with a configuration (*.CFG) file that
         produces a menu of configuration options when run with ZCNFG.

         ZP17      - Z-System Patch utility edits files, disk sectors, or
         memory, and includes a built-in RPN calculator and number base
         converter.

         ZMAN-NEW  - This is a manual describing Z-System features in depth.
         It is based on earlier versions of Z-System, and is a little dated,
         but otherwise contains information that you won't find anywhere else.
         Not everything in the manual applies to operation of ZPM3/ZCCP, but
         with the documentation presented here, you should be able to get a
         good idea of what works and what doesn't.


ZCCP Technical Notes

ZCCP is a replacement CCP that implements ZCPR 3.3.  It loads at 100H and is
stored in the bank 0 CCP buffer for fast reloading as does the standard CCP.
By contrast, Z3Plus loads into high memory and can be overwritten by transient
commands, requiring reloading Z3Plus from disk.  Because ZCCP replaces the CCP,
a ZCCP system has more TPA (transient program area) than a Z3Plus system.  A
ZCCP system on the C128 has more than 57K of TPA, almost the same amount as a
standard C128 CP/M system.
         
This should be enough information to get started with ZPM3/ZCCP. Set up a boot
disk, experiment with some Z-System utilities, read ZMAN-NEW, and get some
applications running.  You'll agree that ZPM3/ZCCP breaths new life into CP/M.