                          Supercharging CP/M

                  BIOS, CCP, and Bootdisk Utilities

                         by Randy Winchester

                                  4/25/90



Too often, Commodore 128 owners will boot up CP/M, take a quick look 
 
at it and think "This sure looks slow, dull, and boring."  The boot 
 
disk goes back in the box, never to see the inside of a disk drive 
 
again.  CP/M on the C128 doesn't have to be a creepy crawler.  The problem 
 
is with the default configuration of CP/M on the boot disk.  Here are some 
 
suggestions for speeding up CP/M and adding new features.
 




A New CP/M Boot Disk
 


All that is required to make a C128 CP/M boot disk is to format a disk 
 
with FORMAT.COM and copy CPM+.SYS and CCP.COM to it.  The disk must be 
 
formatted as either a C128 single or double sided disk.  FORMAT.COM 
 
writes a boot sector on the disk that enables the C128 to load and install 
 
the system files.
 




Fixing CPM+.SYS
 


The standard CPM+.SYS provided on the C128 CP/M boot disk has a couple 
 
of crippling inadequacies.  The 40 column screen is always enabled, 
 
slowing down the system by about 10%.  The interrupt driven RS232 
 
routines are always enabled, and set for an unreasonably high 300 
 
baud.  The higher the baud rate, the more interrupts are needed to 
 
service the RS232 port, and the less time the processor has to do its 
 
work.
 


Both of these problems are easy to fix.  The public domain CONF.COM 
 
can remedy both with the command line:
 
          CONF BAUD=75, FEEL=0, 40COL=OFF

The routines to scan the keyboard are also interrupt driven and depend 
 
on the baud rate setting.  Although the baud rate can be set as low as 
 
50, at this setting the keyboard starts to miss key presses.  The FEEL 
 
parameter adjusts the number of interrupts used by the keyboard 
 
driver.  The value indicates the number of interrupts skipped.  A 
 
value of 1 tells the driver to ignore every other interrupt.  At 75 
 
baud, FEEL should be disabled by setting it to 0.  40COL=OFF disables 
 
the 40 column screen.
 


The baud rate can be hardwired into the BIOS by patching CPM+.SYS.  
 
The byte specifying the baud rate is found after the label "RS232" in 
 
the device table.  The address is $0da7 for the DEC 85 version or 
 
$0d98 for the MAY 87 version.  Normally, this byte will be set to 06 
 
for 300 baud.  The values to choose from are:
 
          0    NONE          1    50          2    75
 
          3    110           4    135         5    150
 
          6    300           7    600         8    1200
 
Setting this byte to 02 for 75 baud is the single most important 
 
speedup you can make, with an obvious improvement in performance.
 


Unfortunately, the FEEL and 40COL parameters aren't as simple to 
 
patch.  The easiest way to make these permanent is to edit the CP/M 
 
source code and generate a new system.  This requires MAC and RMAC, 
 
assemblers from the utility disks offered in the C128 System Guide.  
 
Although these disks also contain complete system source code, I 
 
recommend generating a system from the files in the widely available 
 
BIOSR4.ARK by James Waltrip, or my own BIOSR5.ARK.
 


BIOSR4 and R5 are archives containing modified source code.  They've 
 
been reworked to remove all 40 column code, replacing it with an 80 
 
column screen dump.  Routines have been added to define the drive 
 
search chain and default drive, the shape of the cursor, and the 
 
keyboard repeat rate.  The code is thoroughly commented, pointing out 
 
bytes to set for the default printer and secondary address, screen 
 
colors, and default baud rate.  Additional disk types have been added 
 
to the disk parameter table in BIOSR5, including Miklos Garamszeghy's 
 
"Maxi 71," which provides a remarkable 398K per disk.
 




Upgrading the CCP
 


The Console Command Processor, or CCP, is the program CP/M relies on 
 
to communicate with the user.  Its various responsibilities include 
 
printing the CP/M drive and user area prompt, interpreting console 
 
input, and loading and executing transient commands.  The CCP.COM 
 
supplied on the CP/M boot disk is pretty bare bones.  It has six 
 
limited resident commands: DIR, DIRSYS, ERASE, RENAME, TYPE, and USER.
 


A public domain CCP replacement that corrects some of the inadequacies of 
 
the standard CCP.COM is CCP Plus version 1.05.  CCP+ doesn't include 
 
resident commands; they have been replaced with new features.  CCP+ 
 
includes a time display in the drive/user prompt, and named directories 
 
similar to those in more modern operating systems.  Commands can be 
 
executed from user areas other than the current one.  An impressive feature 
 
is the ability to execute COM and SUB files from a command library much 
 
like MS-DOS.
 


If you use CCP+, you will have to select commands for your system.  
 
This can be fun, rather like going on a free software shopping spree.  
 
All the programs mentioned in this article, except QDisk, are public 
 
domain.
 


A RAM expansion, with its fast access and loading times is the 
 
wisest place to put frequently used commands, since they will load and 
 
execute almost instantly.  By using a PROFILE.SUB on your boot disk, 
 
commands can automatically be copied to the RAM disk when the system is 
 
booted.  For all purposes, commands stored on a RAM disk will appear to be 
 
resident commands.  On the other hand, if you don't have a RAM disk, you 
 
might decide that CCP Plus's features don't make up for the lack of 
 
resident commands.
 


Another solution is to use a Quick Brown Box along with QDisk software 
 
as a CP/M RAM drive.  The Quick Brown Box uses a battery to keep its 64K of 
 
RAM active between computing sessions.  I use the box to store 64K of 
 
commands that are available the instant I switch on the computer.
 


CCP Plus is available in the file CCP105P.LBR, along with many 
 
supportting programs and utilities.
 




Speeding Up Disks and Drives
 


A command my system runs when it first boots is C1571.COM.  This shuts 
 
off the 1571's redundant write verify, reducing the time it takes to 
 
save files.  Look for a version dated 24 Feb 86 or later.  An earlier 
 
version has a bug that prevents the use of MFM disk formats.
 


Using MFM disk formats is another way to get maximum performance from 
 
CP/M.  You'll still need Commodore GCR formatted disks for boot disks, 
 
but MFM formats can be used for all disks that don't need to be 
 
bootable.  Not only do some MFM formatted disks provide more storage, 
 
they are typically faster than GCR disks.  My recommendations are for 
 
the Epson QX10 format supported by the standard BIOS, or Maxi 71 
 
mentioned earlier.  QX10 disks offer 390K of storage; Maxi 71, 398K.  
 
That's 62K more than a C128 double sided CP/M disk.
 




Eliminating SETDEF
 


The SETDEF command is usually used to define the drive search chain 
 
and temporary drive.  The drive search chain is a list of up to four 
 
drives that CP/M will search each time a command is issued.  Sometimes 
 
CP/M needs to make temporary files in which it stores data while a 
 
command is being executed.  SETDEF is also used to tell CP/M which 
 
drive to use for temporary files.
 


If you decide to generate a CPM+.SYS using BIOS R4 or R5, there is a 
 
section of code in the CXIO.ASM module for values for the drive search 
 
chain and temporary drive.  These values can also be patched into an 
 
existing copy of CPM+.SYS.
 


The drive search chain is located from $1268 to $126b in the DEC 85 
 
and MAY 87 versions, or $0e68 to $0e6b in the AUG 85 version of 
 
CPM+.SYS.  The drives are numbered starting with 01 for drive A.  The 
 
default or currently logged drive is 00.  Positions that aren't used 
 
should be filled with $ff.  The byte immediately following the search 
 
chain, $126c in the DEC 85 and MAY 87 versions or $0e6c in the AUG 85 
 
version, specifies the drive for temporary files.  This byte defaults 
 
to 00, the currently logged drive.  If you use a 1750, have the system 
 
make its temporary files there.  It's much faster than writing and 
 
erasing them from a floppy disk.  The suggested entries for RAM disk 
 
users are:
 
          $1268:  0d 00 ff ff 0d
 
If a file isn't found on the RAM disk (drive M) CP/M will also search 
 
on the currently logged drive.  Drive M is the temporary drive.
 


Since these patches cover the important functions of SETDEF, there is 
 
little need to run it every time you boot up.
 




Eliminating SUBMIT
 


When CP/M is first booted, the CCP searches for PROFILE.SUB, and if it 
 
is present, executes it via SUBMIT.COM.  This is the usual method for 
 
automatically setting up the system.  A typical PROFILE.SUB might 
 
consist of the following commands:
 
          C1571 [A,B,D
 
          CP A1:*.* M0:
 
          DATE S
 


PROFILE.SUB is read in line by line and each command is loaded and 
 
executed in turn.  In this example C1571.COM turns off the 1571's 
 
write verify, all files in user area 1 of the boot disk are copied to 
 
user area 0 of drive M, and DATE.COM sets the system date and time.
 


Thanks to the public domain CHN31, SUBMIT.COM can be done away with, 
 
at least for PROFILE.SUB and other short lists of commands.  CHN31 
 
constructs a COM file consisting of any commands you might put into a 
 
SUBMIT file.  In the example above, each command would be be entered 
 
at CHN's prompt separated by an exclamation mark.  CHN is a big 
 
convenience and time saver.  Since CHN command files are themselves 
 
directly executed, SUBMIT doesn't have to be loaded.
 


CCP.COM requires a quick patch to use this trick.  Look for the string 
 
'PROFILE.S' somewhere in or around the seventh sector of CCP.COM.  
 
Simply change the string to 'PROFILE.C' to execute a file named 
 
PROFILE.COM created with CHN31.
 


Here's the PROFILE.COM I use:
 
          QD F/F!C1571 [A,B,D!DIRNAME ON!F:SETDIR!F:HIST!DATE S
 
QD (QDisk) activates the Quick Brown Box as drive F, a 64K RAM disk.  
 
C1571.COM disables the 1571 drive's unnecessary write verify.  The 
 
letters following the command are a list of 1571 drives on my system.  
 
DIRNAME is a CCP Plus utility that starts the named directory feature. 
 
SETDIR is then loaded from drive F.  It reads the list of directory 
 
names and installs them in memory.  HIST provides recall of the last 
 
20 commands typed to the system.  DATE then sets the system time and 
 
date.
 


If you don't use a Quick Brown Box, you'll need to copy commands and 
 
other support files into your RAM disk.  The easiest way I've found to 
 
do this is to place files I want to copy in user area 1 of my boot 
 
disk.  I use the command 'CP 1:*.* M0:' in my PROFILE.COM (CP is the 
 
name I use for ARCOPY.COM, an excellent public domain copy program) 
 
and everything in A1 is copied to M0.
 




Laying Out a Boot Disk
 


User area 0 should include CPM+.SYS, CCP.COM, and PROFILE.COM.  I also 
 
keep files in user 0 that are specified in PROFILE.COM but executed 
 
only when the system is first booted.  These include C1571.COM, 
 
DIRNAME.COM, and DATE.COM.
 


User 1 should contain files that will get copied to the RAM disk.  I 
 
suggest CMDRUN.COM, which is used by CCP+ to execute commands from 
 
COMMAND.LBR; ROOT.DIR, containing a list of directory names; and 
 
custom keyboard definition files created with KEYFIG.COM and saved 
 
with SAVEKEY2.COM.  I use two keyboard files, DEFAULT.KEY for normal 
 
operation, and ZDE.KEY for use with the public domain ZDE editor.  
 
You'll also want to include a COMMAND.LBR.
 


COMMAND.LBR can be created with a library utility, such as 
 
NULU152.COM.  It can have as many commands, and be as large as you 
 
have room to dedicate to it.  It should include replacement commands 
 
for those missing from CCP+, and any other commands you routinely use.
 


Here's a list of the commands in my COMMAND.LBR along with some 
 
comments.  All these programs are public domain.
 


SD137.COM.  This is a versatile directory program that can show files 
 
in all user areas, on all drives, files in libraries or archives, and 
 
files with the system attribute set.  It can send output to a file or 
 
printer.  SD137 replaces both DIR and DIRSYS.
 


ERASE.COM (version 5.3).  This ERASE replacement allows scratching files in 
 
user areas other than the current one and asks for confirmation before 
 
erasing Read-Only files.
 


QL41.COM.  Quick Look replaces both TYPE and DUMP.  QL can view binary 
 
as well as text files.  If a file is crunched or squeezed, or is a 
 
member of a library, QL will unpack it before displaying it.  It 
 
features random access paging through files, a string or hex byte 
 
search, memory display, and can extract files from libraries.
 


LD.COM and CREATE.COM.  Library Disk opens LBR files and causes CP/M 
 
to treat them as if they were disk drives.  If used with CCP+, the 
 
library name is displayed in the prompt along with the directory name. 
 
This gives the effect of working in a disk partition or subdirectory.  
 
CREATE, which I've renamed to MKDIR, makes empty libraries.
 


CHN31.COM.  CHN creates a COM file from a chain of CP/M commands.  CHN 
 
can take on many of SUBMIT's functions.
 


ARCOPY.COM version 2.1.  This program replaces PIP, RENAME, and TYPE.  
 
It is packed with features, including copying to or from different 
 
user areas, to the printer or console, and renaming or moving files 
 
(erase after copy).
 


DA.COM.  Directory Attributes can set or reset the system, read only, 
 
archive, or special 1 - 4 attributes for a file or group of files.  It 
 
also functions as a directory program.
 


HIST.COM.  This history program for CP/M+ quickly recalls any of the 
 
last 20 commands typed to the system.  Command lines can be edited and 
 
reused.
 


HP+.COM.  A memory resident calculator based on the popular Hewlett- 
 
Packard.  It can be popped up from within applications.
 


SETDIR.COM.  A CCP+ utility for loading directory names into memory.
 


LOADKEY2.COM.  This program will load a custom keyboard file created 
 
with KEYFIG and saved with SAVEKEY2.COM.
 


ZDE13.COM.  ZDE is the latest version of VDE, the Video Display 
 
Editor.  ZDE uses Wordstar commands, is memory resident, and includes 
 
programmable macros.  It is better than many commercially available 
 
word processors for 128 mode and is by far my favorite C128 editor.
 


E.COM.  This is a command file created with CHN.COM.  Its syntax is: 

     E du:filename

The definition of E is:  

     LOADKEY2 ZDE.KEY!ZDE13 $1 $2!LOADKEY2 DEFAULT.KEY

What this does is load a special keyboard file that places ZDE commands on 
 
the keys I want them on, then loads ZDE along with the file to be edited.  
 
After using ZDE, standard keyboard definitions are loaded back into the 
 
system.  This method can be used to customize any application or program by 
 
automatically loading keyboard layouts that change, simplify or combine 
 
commands and assign them to almost any key.
 


I use a similar CHN command file for loading terminal software.  
 
Here's the command line:

     LOADKEY2 TERM.KEY!MEX114 $1!CONF BAUD=75,FEEL=0!LOADKEY2 DEFAULT.KEY

This line loads the keyboard definition file TERM.KEY, then loads MEX114.  
 
When I quit MEX, CONF resets the system baud rate to 75 and LOADKEY2 
 
reloads the standard keyboard layout.  All CP/M terminal programs I've seen 
 
set the system baud rate to 1200, but don't reset it when they finish.  If 
 
you think the system is slow at 300 baud, you don't ever want to see it 
 
outside of a terminal program at 1200 baud.  By using this command line, 
 
you never will.
 


CP/M can be plenty of fun to tinker with.  Both the operating system 
 
and applications give ample opportunities for customization.  One you 
 
get CP/M up to speed and discover some of the excellent software available 
 
for it, you might find your new boot disk spinning in the drive more often.

