Tools that build the CompuPro 8 inch floppy images used by two pull requests against SIMH's AltairZ80 simulator:
| PR | What it adds |
|---|---|
| simh/simh#1256 | the CompuPro CPU-68K machine, so CP/M-68K boots from the DISK 1A boot ROM |
| simh/simh#1257 | SET CPU SWITCHER no longer clamps the machine to 64K |
The images those PRs mention are not preserved dumps and are not redistributed here. They are generated from the CompuPro software archive, which is not mine to hand out, so what this repository holds is the recipe.
The DISK 1A boot ROM the machines start from needs no supplying: it is already
in SIMH, as disk1a_rom[16][512] in AltairZ80/s100_disk1a.c.
The CompuPro software archive, unzipped. The rebuild scripts expect the
directory that holds its top level folders, which are CPM68K, CPM816,
MPM-816, CDOS-816 and the rest. It is the CompuPro collection from Dave
Dunfield's classic computer archive.
Python 3 is the only other requirement. The tools use nothing outside the standard library.
./rebuild-cpm68k.sh /path/to/unzipped/COMPUPRO
./rebuild-cpm816.sh /path/to/unzipped/COMPUPROThe first writes disks/cpm68k-a.imd, -b.imd and -c.imd, of which -a is
the one PR #1256 boots. The second writes disks/cpm816-a.imd,
disks/cdos816-a.imd and disks/mpm816-a.imd.
Each script refuses to start if the archive path it was given does not hold the folders it needs, so a wrong path fails immediately rather than producing an empty image.
8 inch, 77 cylinders, two heads. The data area is CompuPro density 3, which is
MFM with 8 sectors of 1024 bytes. Cylinder 0 is FM with 26 sectors of 128
bytes: on the CP/M-68K layout that applies to both heads, which is what
the CP/M-68K FORMAT program writes, and on the CP/M-86 layout only to head
0, which is what the CP/M-86, CP/M 8-16 and Concurrent DOS 8-16 masters look
like.
CP/M sees one logical track per (cylinder, head) pair, with head = track & 1
and cylinder = track >> 1. Both families share the same disk parameter block
for the data area: 2048 byte blocks, 600 blocks, 256 directory entries and 4
reserved tracks, with the sector skew the CBIOS uses (XLT3 in the CP/M-68K
BIOS, XLT8D3 in the CP/M-86 one).
tools/mkdisk.py builds an ImageDisk .IMD file: it lays out the system
tracks, writes the loader where the boot ROM expects it, and fills the
directory and data area from the files given on the command line.
usage: mkdisk.py [-l cpm68k|cpm86] [-b LOADER] [--ldrbios ADDR]
[--raw-boot OFFSET] [-c COMMENT] -o OUTPUT [files ...]
tools/imd.py reads, inspects and rewrites .IMD files.
usage: imd.py info|uncompress|track <file> [args]
uncompress matters in practice: SIMH refuses to write to an image that
contains compressed sectors, so an image straight out of an ImageDisk capture
has to be expanded before the simulator will mount it read/write. That action
is the equivalent of running IMDU /B on it.
- https://bitsavers.trailing-edge.com/pdf/compupro/ - the CompuPro manuals and
ROMs. One practical warning: bitsavers returns 403 to anything that does not
send a browser user agent, so
curl -A 'Mozilla/5.0'where a plaincurlfails.www.bitsavers.orggoes through that same mirror.
The machine answers ?Not Enough Memory to any transient program if it is short
of memory; the manual asks for 192K and up, which is worth setting before
concluding that something is broken.
MIT, see LICENSE. The CompuPro software the scripts read is not covered by it and is not included here.