CP/M pages
Home -> CP/M -> DISCKIT Development

DISCKIT Development

DISCKIT is the diskette format/copy/verify utility supplied with Amstrad CP/M. This page is an attempt to chart its development history.

DISCKIT 1.0 (CPC)

The first version of DISCKIT I have is for the CPC6128. It is supplied in two variants: DISCKIT2 (for CP/M 2) and DISCKIT3 (for CP/M 3).

[Disckit 1.0 under CP/M 3 on the CPC]

The program is structured as a number of modules. It's possible to see the boundaries of these because whatever tool Locomotive used to create DISCKIT inserted a fair amount of packing bytes between each module. The modules are:

Entry
The first module. Contains startup code, low-level disc I/O functions, and code to manage memory buffers.
Screen
Keyboard input and text output functions.
Menu
Displays DISCKIT's menu screens.
Worker
The implementation of the copy, format and verify functions.
Error
Manages the display of error messages and prompts for disc insertion / removal.
Messages
Contains all message text, using a compression system for frequently-repeated tokens.

(Module names are my own invention).

The first two modules abstract away all operating system dependencies (CP/M 2 vs CP/M 3); the code in the later ones is pretty much identical.

The CP/M 2 version overwrites the BDOS, using memory up to the base of the BIOS for its buffers. Consequently, after initialisation it only uses BIOS and firmware calls. In addition, it uses sideways RAM for additional buffer space.

Where the CP/M 2 version uses sideways RAM, the CP/M 3 version uses the memory listed in the CP/M buffer table, as returned by CD INFO.

One quirk of this history: there is a function that gets called when the program shuts down. It only applies in the CP/M 2 version of DISCKIT; in the CP/M 3 version, it consists only of a RET operation. Nevertheless, all CP/M Plus versions of DISCKIT still faithfully call it.

DISCKIT 1.1 (PCW)

Version 1.1 was distributed with early versions of PCW CP/M (BIOS 1.1 and 1.2). Despite the small version number bump from 1.0, it is a fairly large rewrite. [Disckit 1.1 under CP/M 3 on the PCW]

The following details have changed:

DISCKIT 1.2 (PCW)

This version was distributed with PCW 8256 CP/M BIOS 1.4, and is the most common version for 8000-series PCWs. Changes include:

DISCKIT 2.1 (PCW)

Version 2.1 was distributed with PCW9512 CP/M BIOS 2.1. If there was a DISCKIT 2.0, I don't have a copy.

[Disckit 2.1 under CP/M 3 on the PCW]

Changes in version 2.1 are minor, and mainly relate to targeting the PCW9512 rather than PCW8000 series:

MULTIPLE #93 (PCW)

MULTIPLE.COM is an internal Locomotive build of DISCKIT, for making multiple copies of a single floppy disc. It signs on as 'JOYCE DISC KIT #93'.

It appears to be based on a point somewhere between DISCKIT 2.1 and 3.1, with the following differences:

DISCKIT 3.1 (Spectrum +3)

Distributed with Spectrum +3 CP/M v1.0.

[Disckit 3.1 under CP/M 3 on the Spectrum +3]

Changes in this version are:

DISCKIT 4.0 (PCW)

Distributed with PCW9256 CP/M (BIOS 1.11), PCW9512+ CP/M (BIOS 2.11) and PCW10 CP/M (BIOS 1.12). Changes in this version are:

DISCKIT 4.0 was also supplied with the Silicon City 3.5" drive A: for 8000-series PCWs. In order to make it support a 720k drive A:, a separate utility (DKFIX) was provided, which patched CP/M to return a BIOS version number of 2.1. DISCKIT would then behave as if it was running on a PCW9512, complete with 9512 keyboard layouts in the menu screens.

DISCKIT 4.0HD (PCW)

This was distributed with the Cirtech Flash Drive. It consists of DISCKIT 4.0 with a 256-byte prefix attached. The prefix behaves as follows:

The intention appears to be that this version of DISCKIT is to be installed on the flash drive and used when CP/M has been booted from that drive (in which case the floppy drives will be C: and B: rather than A: and B:). The DISCKIT D swaps A: and C: over so that the floppies are A: and B: as DISCKIT expects, and the following C:DISCKIT S swaps them back when the user exits DISCKIT.

This will have less-than-ideal effects if:

DISCKIT 4.2 (PCW)

DISCKIT 4.2 was supplied with the most recent PCW CP/M versions, 1.15 / 2.15. Compared to version 4.0, there are a number of changes, mainly to support PCWs with nonstandard drive configurations (eg, PCW8000 series with 3.5" drive A: or 180k drive B:). Consequently, there is no longer any need for patching of CP/M with DKFIX.

I don't have a copy of DISCKIT 4.1, if such a thing existed, so I don't know how many of the changes went into it.


John Elliott, 30 May 2022