Software - ROM Cartridges

ZX80 Emulator ROM

This 16K ROM cartridge converts the ZX81 into a ZX80. It contains a copy of the ZX80 ROM that has been patched to allow it to run on the ZX81. Since the ZX81 hardware was based on that of the ZX80 (in fact the ZX81 ROM was available as an upgrade for the ZX80), the modifications required to the ZX80 ROM code is minimal. This means it is possible to run all ZX80 software, including flicker-free games.

The cassette routines have been patched to support loading and saving via RS232 or cassette. The LOAD or SAVE commands default to using RS232 but prior to loading or saving actually commencing it is possible to switch to use cassette by pressing the C key. Likewise, it is possible to revert back to RS232 by pressing the R key. If the RS232 socket is disabled (via configuration switch 5) then loading and saving defaults to cassette.

The keyword and symbol locations found on the ZX80 keyboard are not in the same positions on the ZX81 keyboard. This makes using an emulator with the original ZX80 layout rather tricky. Therefore the keyboard routines have been patched to relocate as many keywords and symbols as possible to their ZX81 positions. The key mapping is shown below:

ZX80 emulator keyboard layout

Although the ZX80 uses the same baud rate and encoding format for its cassette files as the ZX81, its loading routine is not as sophisticated as that of the ZX81. The most obvious difference is that the display remains black throughout the loading process, which gives the user no feedback on the cassette volume level or even if there is a signal at all. The ZX80 emulator improves upon this situation by reflecting the cassette signal to the screen in the same manner that the ZX81 does. The user can therefore get a feel for whether the cassette volume level is suitable and adjust it as necessary until the pattern displayed when loading is occurring consists of approximately equal height black and white bars.

The ZX80 LOAD routine also differs to the ZX81 in that there isn't a timeout period between bytes. Therefore, in theory it is possible to pause playback of a cassette and successfully resume it later. A final difference is that it purposely waits for a period of silence before attempting to load a program, which is actually an improvement on the ZX81 as it ensures loading only begins with the start of a program. The ZX80 emulator retains both of these features, and during the initial silence check will keep the screen black until a period of silence has been found.

Note that the patches made to the ZX80 ROM result in a theoretical loss of support for pseudo hi-res programs that use the pixel patterns obtained by setting the I register to 0. Only codes 0, 13 and 54 are affected and would display incorrectly. However, I am not aware of any software that actually uses this set of pixel patterns and so it is unlikely that any impact will be seen in practice.

The character code colouring mode provided by the Chroma 81 interface can also be used with the ZX80 emulator, thereby allowing emulated ZX80 games to be colourised. Such coloured games are also supported by the Chroma 80 interface for the ZX80.

ZX Tape Player

The ZX Tape Player utility (for Windows) is used to load and save ZX80 programs via a PC's serial port at 57600 baud (19200 is only applicable for legacy versions of the RS232 ROM up to V2.03).

ZX Tape Player

To load a program from a PC using RS232, select ZX80 Files on the toolbar and choose the desired serial port. Click the Browse button and select the folder containing the ZX80 programs. The Files pane on the left hand side will be updated with all .O files. Clicking on a program in the list will cause a summary of the file's contents to be displayed in the File Contents pane. On the ZX80 emulator, type LOAD and click the PLAY button on the ZX Tape Player utility.

To save a program to a PC using RS232, click on the RECORD button and specify a location and name of the file to save the program in. On the ZX80 emulator, type SAVE and the program will be transferred to the PC. The PC file is automatically closed once the file has been received.

Transfer Functions

The ZX80 ROM is only 4K in size, leaving 12K of space available in the ROM cartridge. This space is used to hold the patches for the display, keyboard and cassette routines, and also for a couple of routines to allow easy transfer of programs between cassette and RS232. These routine are invoked using the following USR functions:

The transfer functions provided by the ZX80 emulator allow an exact copy of a program to be transferred between PC and cassette. If this process were performed manually then system variables, such as FRAMES, would be different between the original and saved versions. Once a program has loaded, the screen will turn white for 2 seconds then black with occasional white streaks.

If saving to cassette, start the cassette deck recording and then press a key. The transfer routine outputs 5 seconds of silence before saving the program. If saving to RS232 then start recording on the ZX Tape Player utility and the file will automatically be sent. Once the program has been saved, the screen will blink white again for 2 seconds before turning black with occasional white streaks. It is now possible to repeat the save operation. This feature allows multiple copies of a program to be saved back to back on cassette. Pressing SPACE during loading will reset the ZX80 emulator, but pressing SPACE at all other times will return control to BASIC.

If the RS232 socket is disabled (via configuration switch 5) then both transfer routines default to loading and saving from/to cassette. This allows cassette files to be duplicated.


Two versions of the ZX80 emulator are available. One version includes enhancements to map the ZX80 keyboard symbols and keywords to their ZX81 locations and also provides visual feedback during cassette loading. The other version remains as faithful to the ZX80 as possible by retaining the original cassette LOAD routine behaviour and the original keyword and symbol positions, and may appeal to purists who wish to have the full ZX80 experience.

Both emulator versions are compatible with all ZXC ROM cartridges. For the ZXC1 and ZXC2 ROM cartridges, the cartridges must be populated appropriately and an EPROM programmer used to program them. For the ZXC3 and ZXC4 ROM cartridges, the ZX ROM Cartridge Creator utility can be used to send the programs to a ZX81 for direct programming into the FLASH ROM.

Click here to download the ZX80 emulator ROM cartridge [V2.05]. 8K
Click here to download the ZX80 emulator ROM cartridge (pure mode) [V2.05]. 8K
Click here to download the ZX Tape Player [V2.3.0] utility.