ROM cartridge available:
ROM cartridge released: 14th December 2012


The ZXC3 extends upon the functionality introduced by the ZXC2 by allowing a 128K FLASH ROM to be programmed, erased and re-programmed directly from a Spectrum - an EPROM programmer is not required. The cartridge utilises the programmable software bank paging ROM Cartridge configuration, but also supports the standard and a reduced version of the software bank paging ROM cartridge configuration. The cartridge can be used with 8K (27C64), 16K (27C128), 32K (27C256), 64K (27C512) and 128K (27C010/1001) EPROMs, and is therefore backwards compatible with programs designed for the ZXC2 that are up to 128K in size. With a slight modification, the ZXC3 can also be used with 256K (27C020/2001) EPROMs. The ZXC3 PCB can be seen below:

ZXC3 ROM Cartridge PCB - Front ZXC3 ROM Cartridge PCB - Back

When the cartridge is used in the software bank paging configuration, the top 64 bytes of the ROM address space is used for memory mapped control of the bank paging mechanism and so cannot be used to store program code or data. When the cartridge used in the standard bank paging configuration, the full address space is available to store program code or data. In order to write to a FLASH ROM using the Spectrum, the software bank paging configuration must be used.

A ZXC3 populated with a FLASH ROM fitted and the case I produced for the ROM cartridge can be seen below.

Assembled ZXC3 ROM Cartridge Cased ZXC3 ROM Cartridge

Paging Control

The following information will be useful should you wish to write your own assembly language programs to control the ZXC3.

At power on the ZXC3 intercepts accesses to the top 64 ROM locations ($3FC0-$3FFF) and interprets them as follows:

ZXC3 PCB Memory Mapped Control
Bank Selects between the 8 banks available.
Write Set to 1 to assert the /WR line to the FLASH ROM. Set 0 to return to read mode.
Page Out Set to 1 to page out the ROM cartridge, thereby allowing access to the Spectrum ROM (or Interface 1 ROM if paged in). Set to 0 to page the ROM cartridge back in.
Lock Set to 1 to prevent further paging. This can therefore be used to permanently make a bank of the ROM cartridge visible to the Spectrum, or to permanently page out the ROM cartridge.

Note that to use the paging control mechanism from your own assembly language programs, care should be taken to ensure the I and R registers do not contain values that would inadvertently invoke the paging mechanism. Setting the I register to a value between $80 and $BF ensures maximum compatibility on 48K and 128K Spectrums.

ZXC2 Compatibility

The software bank paging mechanism on the ZXC3 is a reduced version of that implemented on the ZXC2. This is due to the additional circuitry used to generate the /WE line for FLASH programming, and prevents the generation of address line A17. This limits the largest capacity PROM that the ZXC3 can directly support to 128K. However, it is possible to make the ZXC3 support 256K EPROMs by cutting two of its tracks and soldering three wire links on the board (download the PCB configuration details document for more information).

Disable Jumper

The top right corner of the ZXC3 contains a 3 way jumper, which is used to enable/disable the cartridge. Should the contents of the FLASH ROM become corrupt or does not include a copy of the ZXC3 Flash Programmer utility then the cartridge must be disabled by moving the jumper to positions 2-3. The ZXC3 Flash Programmer utility can now be loaded into the Spectrum, the jumper moved back to positions 1-2, and then it is possible to reprogram the FLASH ROM.

With the jumper set to disable the cartridge, the current paging configuration is not reset and will become active once the cartridge is re-enabled. This information is not relevant when re-instating the ZXC3 Flash Programmer but might be of use if developing your own custom FLASH programmer utility for the ZXC3.


Full details on the supported PROM configurations can be found in the following document:

Click here to download configuration details about the ZXC3 ROM cartridge PCB.

I have also produced a set of reference design routines for programming and erasing the 29F010 FLASH ROM, and these can be downloaded for use in your own ROM cartridge programs.

Click here to download the reference design FLASH programming routines for the ZXC3 ROM cartridge.
Click here to download the 29F010B FLASH ROM datasheet.

I've created a program to allow a ZXC3 fitted with a 29F010 FLASH ROM to be tested. The program must run from the first 16K bank of a 29F010 ROM. The ZX ROM Cartridge Creator can be used to download the program to the Spectrum for programming into the ZXC3 (note that the Flash Programmer must not be included in the compilation and the paging setting for the test program should be set to 'none'). When the Spectrum is powered on, the test program will automatically run and will execute a sequence of tests. At the end of the test sequence, the ZXC3 locks its paging mechanism. Resetting the Spectrum (using a reset button) should cause the ZXC3 to unlock its paging mechanism and so allow the tests to run again. If the tests run successfully for two consecutive passes then the ZXC3 is working correctly.

ZXC3 Unit Test

NOTE: Running the tests will erase the contents of the ROM, including the Flash Programmer if present. The Flash Programmer will need to be re-instated from a backup afterwards before the cartridge can be re-programmed, so make sure you have a means available to restore it (ZX Interface 1 RS232 or Cassette). The test utility should only be used if you suspect there is a problem with the ZXC3.

Click here to download the ZXC3 Unit Test.