Inside the Codemasters CD Games Pack

Codemasters, purveyors of numerous brands of ‘simulator’ software in the eighties, released a compendium of games in 1989 (the ‘Codemasters CD Games Pack’) for the Spectrum, Amstrad CPC and Commodore machines that came in a rather unusual format for the time.

The pack consisted of a regular cassette, a 3.5mm to DE-9 cable and a CD (hence the name). The premise was that you would connect the cable between your CD player and either a Kempston or Sinclair joystick interface, load a small program from cassette, and then have the ability to load one of thirty games contained on the CD in under a minute. Once you’d had enough of a particular title, holding down the keys Q, U, I and T would go back to the CD loader, ready for you to play another track from the CD containing a different game.

All quite snazzy, although it didn’t sell massively well at the time and consequently was an experiment not to be repeated. The relative rarity of CD players in domestic households along with the need to load the bootstrap program from cassette were obviously factors in its lack of adoption.

Today we’re going to take a look at how the system worked, examine how to create a compatible cable, and using some modern hardware to make the process a bit more friendly than it was in 1989!

One caveat to note – the Codemasters CD Games Pack is distribution denied, so this article is focused at those who want to understand some of the implementation details, those who have lost or misplaced their cable, and those who want to speed up the process of accessing the games from CD.

How it Worked

The program on the cassette was relatively short and loaded in about 30 seconds. Once loaded it allowed you to choose from either Kempston or Sinclair joystick options, and then prompted you to connect the CD lead to the joystick port on your chosen interface.

You were then given an option to enter a test screen to allow you to adjust the volume level on the CD player to an optimum level, and once complete start loading some games.

Since CD audio has a very defined and absolute bit rate (44,100 samples per second), unlike cassette tape, it is possible to reduce the delay loops in the loader software that would normally allow for variations in cassette speed, allowing for a significant increase in the loader speed.

The core of the system is actually a hacked about version of the Spectrum ROM loader, with delay loops removed and the loader modified to read the joystick port instead of the EAR port on the ULA. To achieve a clean square wave signal from the CD audio, the cable contains a simple circuit designed to boost the signal and alter the input to the interface to TTL levels acceptable to the joystick interface.

As the signal is routed through the joystick port and not the usual EAR socket, there is consequently no loading noise!

The CD Cable

The cable was reverse engineered a while back by some CPCWiki users, and found to contain 5 resistors and 2 transistors. A successful clone was built by SFEO member Matthew Logue after identifying an error in the CPCWiki schematic (wrong transistor type).

A simplified version of the cable that consists of 3 resistors and one transistor is given here, and has been proven to work on the Sinclair ports of a grey +2 and a number of Kempston compatible interfaces.

Two conversion circuits were built into the original cable – the one we implement connects between pins 6 and 8 of the joystick connector, which triggers the FIRE button of a Kempston interface but coincidentally triggers the UP action on a SJS-standard Sinclair interface on port 2. Pins 1 and 8 are connected by the secondary circuit in the Codemasters cable, which is presumably used for the Amstrad or Commodore games packs (with a common cable used across all formats).

You may install a link between pins 6 and 4 of your implementation and it should in theory work with an Interface 2 – although I wasn’t able to get my particular IF2 to work with this configuration.

A ZTX313 transistor or other suitable NPN transistor may be used if a BC548B is not to hand. A completed cable should look similar to the following.


Accelerating the Bootstrap Process

Since we have access to SD storage devices with built in joystick interfaces these days, it seems logical to use these to load the bootstrap program that would normally live on cassette, and then use their joystick port to accept the audio from CD. (I’m ignoring the obvious point that it’s quicker to load these games from SD card – after all, this is a nostalgia exercise).

To that end, the CD Loader software has been converted to .TAP format and can be downloaded from here. Copy this to your SD card, load it from the NMI menu of your device and you’ll be instantly ready to load from CD!