z80pack is great for creating an emulated CP/M system. It can either be used to create a general CP/M system or can emulate a specific system such as an IMSAI or ALTAIR including a graphical front-panel. It is well documented and is being actively developed.
Installing z80pack
-
First download the source (z80pack-x.y.tgz, currently z80pack-1.37.tgz) for z80pack from here. The following installation instructions are adapted from those on the z80pack site. More information can be found there, in particular, information on installing z80pack on non Linux/Unix systems.
-
Unpack the source archive in your home directory:
$ tar xzvf z80pack-1.37.tgz
-
Change the directory it is extracted to, to make this article easier to explain. There is no need for you to do this.
$ mv z80pack-1.37 z80pack
-
Compile the emulator for your operating system, e.g. for linux use
-f Makefile.linux
:$ cd ~/z80pack/cpmsim/srcsim $ make -f Makefile.operating-system $ make -f Makefile.operating-system clean
-
Compile the support programs:
$ cd ~/z80pack/cpmsim/srctools $ make $ make clean
-
If you want to copy the srctools to your ~/bin directory then from within ~/z80pack/cpmsim/srctools run:
$ make install
This leaves a few bash scripts in the ~/z80pack/cpmsim/ directory, cpm2, cpm3, mpm, etc, which automatically start the emulator by booting into CP/M 2.2, CP/M 3.0, MP/M, respectively.
Backup Included Disk Images
z80pack includes a number of disk images in ~/z80pack/cpmsim/disks/library/. These can easily get corrupted so it makes sense to backup these first:
cd ~/z80pack/cpmsim/disks/library
cp -p * ../backups
I also keep my own disk images of useful software in the library/ directory and keep a backup in the backups/ directory as well.
Creating disk images
We now needed to create some disk images; to do this I recommend Cpmtools which is a part of many Linux distros. If you don't have this as part of your distro, the source can be downloaded from here. Cpmtools is a great collection of tools used to manipulate CP/M images and file systems in a variety of formats and works well with z80pack.
Creating Floppy Diskette Images
The emulator uses 8" SD disk drives as the first 4 drives: A:, B:, C:, D:. This disk specification is the default for Cpmtools. To create a floppy diskette image called, work.floppy.cpm, run:
$ mkfs.cpm work.floppy.cpm
When working with floppies I create a blank floppy called blank.floppy.cpm and then just copy that every time I want to create a new image, rather than creating the image directly.
Creating Hard Disk Images
z80pack supports a 4Mb hard disk image connected to the I: drive and a 512Mb hard disk image connnected to the P: drive. These can be particularly useful when dealing with bigger applications such as a C compiler. To create these we can use Cpmtools, but first we need to make sure that it has the correct disk definitions by editing the diskdefs file typically found in /usr/share/ or /usr/local/share/ and adding the following lines, if not already present:
# 4mb HDD for z80pack
diskdef z80pack-hd
seclen 128
tracks 255
sectrk 128
blocksize 2048
maxdir 1024
skew 0
boottrk 0
os 2.2
end
# 512mb HDD for z80pack
diskdef z80pack-hdb
seclen 128
tracks 256
sectrk 16384
blocksize 16384
maxdir 8192
skew 0
boottrk 0
os 2.2
end
To create a blank 4Mb Hard Disk image called main.hd4.cpm, run:
$ mkfs.cpm -fz80pack-hd hd4.cpm
To create a blank 512Mb Hard Disk image called main.hd512.cpm, run:
$ mkfs.cpm -fz80pack-hdb hd512.cpm
Managing Files on Disk Images With Cpmtools
Cpmtools comes with a number of commands such as: cpmls, cpmcp, cpmrm. These allow you to manage files on a disk image and get them on and off. With all of the commands below if using a 4Mb HDD image add -fz80pack-hd
and for a 512Mb HDD image add -fz80pack-hdb
after the Unix command.
CP/M has 16 'user areas' which can be used to organize data on a disk. They are effectively like a crude directory system. User area 0 is the default and the only one we will work with in this article.
To copy all the .DOC files from the current directory into the image, work.floppy.cpm in user area 0 run:
$ cpmcp work.floppy.cpm *.DOC 0:
To copy all the .COM files from the current directory into the hd4.cpm image in user area 0 we need to specify the format with -fz80pack-hd
:
$ cpmcp -fz80pack-hd hd4.cpm *.COM 0:
To copy all the .DOC files in user area 0, from the work.floppy.cpm image to the current directory:
$ cpmcp work.floppy.cpm "0:*.DOC" .
To list the files on work.floppy.cpm
:
$ cpmls work.floppy.cpm
Configuring z80pack
In the ~/z80pack/cpmsim/ directory there are a number of scripts such as cpm2, cpm3, etc. These are scripts which tell z80pack which disk images to use for which drives. We can edit these or create our own. z80pack expects the disk image files to be in ~/z80pack/cpmsim/disks/ with the first four 8" floppy disks called drivea.dsk to drived.dsk, the 4Mb HDD called drivei.dsk and the 512Mb HDD called drivep.dsk. You don't have to have all these disks, but this is what is available to be used.
As an example we'll create a script called work which uses our 4Mb HDD and floppy disk images created above. First copy main.hd4.cpm and work.floppy.cpm to the ~z80pack/cpmsim/disks/library/ directory. It is also worth copying them to the backups directory as well: ~/z80pack/cpmsim/disks/backups/
Now create a script in ~/z80pack/cpmsim/ called work to start z80pack with our disk image files attached:
#!/bin/sh
rm -f disks/drive[abci].dsk
cp disks/library/cpm3-1.dsk disks/drivea.dsk
cp disks/library/cpm3-2.dsk disks/driveb.dsk
ln disks/library/work.floppy.cpm disks/drivec.dsk
ln disks/library/main.hd4.cpm disks/drivei.dsk
./cpmsim -f4
This attaches the two CP/M disks on drive A and B, our work.floppy.cpm image on drive C:, and our main.hd4.cpm image on I:. I copy rather than create links to disk images I know I don't want altered to keep them in a consistent state. The line ./cpmsim -f4
tells the emulator to run at 4Mhz, which makes it a bit more realistic.
To make the script executable run:
$ chmod +x work
Starting the Emulator
From the ~/z80pack/cpmsim/
directory, run the script we created:
$ ./work
The CP/M operating system will now boot up and leave you at the A>
prompt. You will have access to the A: and B: diskette images which will contain the CP/M 3 files. C: will be linked to your work.floppy.cpm disk image and I: will be linked to your 4Mb HDD image.
For here you can run the normal CP/M commands such as DIR and start exploring.
There is a command on the A: drive called bye to leave the emulator:
A> bye
Where Now?
I have a growing number of CP/M articles on this site and there is also a CP/M Playlist on the TechTinkering YouTube Channel.