The primary aim of this project is to enable the use of an upgraded version of the ZX81 ROM without requiring the ZX81 to be opened up for ROM replacement. I decided upon the W27C512 EEPROM, allowing storage of 8 x 8kb ROMs, each selectable via dip switches.
It all started with a breadboard and a lot of wires! It is chaos, yes, but it turned out to work as intended. With this PoC it is possible to run a ZX81 with a custom ROM externally, without the need to open and replace the original ROM chip. It does however stil needs the original ROM inside the ZX81, but mainly because of the way the display system works on the ZX81 - it's clever, but at the same time a main challenge these days.
Basic version, requires the original ROM in the ZX81 - because of the way the display system works. KiCad 8 files available as well as Gerber files for PCB production.
BOM for v1.0:
- WINBOND W27C512 EEPROM
- 74LS138
- 3 x 10K Resistors
- BC549 Transistor
- 2 x 100nF ceramic capacitor, 2,5mm
- DIP Switch 3 x ON-OFF
- Sockets for IC, Edge Connector (RM 2,54)
The PCB can be fitted with a standard Edge Connector for ZX81, or it can be used as a plug-in card in the Bus Extender
- The silkscreen says 4K7 for the resistors, but with the WINBOND they can all be changed to 10K (as in this picture).
- The DIP switches from left to right are, A13, A14, A15 - but should really be the other way around, to match the binary pattern and bank number in EEPROM.
- Support for 16kb ROM, needed to run SPonZY (ZX Spectrum ROM modified to run on ZX81 Hardware).
- Rotate the ICs 180 degree, just to make the text in the right direction (I know - it's not important, but...)
A version with the changes mentioned above was produced, it worked out OK - but as I already had a few other changes in mind, it was never released as such. But for the curious minds, here are some pictures of how it looked like - and as can be seen, it runs the SPonZY ROM quite well :-)
Getting close to the final version of external ROM switcher for support for 8KiB or 16KiB banks. Changes from 1.1 to the board:
- Making PADS 2mm longer, to prevent potential issues with some connectors (when used in the Expander board)
- Changed from pull-ups to pull-downs, to match actual behaviour of DIP-SWITCH (up = 1/ON/HIGH, down = 0/OFF/LOW)
SCHEMA | PCB |
---|---|
BOM change:
- DIP Switch 4 x ON-OFF
- DIP-4 (right) - sets the mode of operation, DOWN = use 8KiB banks, UP = use 16KiB banks
- DIP-1 to 3, selects which banks is used as ROM - in case of 16KiB banking, DIP-3 (A13) is ignored.
The W27C512 EEPROM can contain 8x 8KiB or 4 x 16KiB images - selectable with the switch, forming the binary number 0-3 or 0-7 for the active bank.
For Windows
COPY /B ROM_0+ROM_1+ROM_2+ROM_3 IMAGE.BIN
For Unix/Mac
cat ROM_0 ROM_1 ROM_2 ROM_3 >IMAGE.BIN
Use your favorite (E)EPROM programmer to transfer the IMAGE.BIN to the EEPROM
8K roms - DIP4: OFF/DOWN
A15 | A14 | A13 | ROM |
---|---|---|---|
OFF | OFF | OFF | 0: ROM_0 |
OFF | OFF | ON | 1: ROM_1 |
OFF | ON | OFF | 2: ROM_2 |
OFF | ON | ON | 3: ROM_3 |
ON | OFF | OFF | 4: ROM_4 |
ON | OFF | ON | 5: ROM_5 |
ON | ON | OFF | 6: ROM_6 |
ON | ON | ON | 7: ROM_7 |
16K roms - DIP4: ON/UP
A15 | A14 | A13 | ROM |
---|---|---|---|
OFF | OFF | - | 0: ROM_0 |
OFF | ON | - | 1: ROM_1 |
ON | OFF | - | 2: ROM_2 |
ON | ON | - | 3: ROM_3 |
Only one known 16K rom exists, it's the SPonZY SPeccy ON Zeddy ROM which turns your ZX81 into a ZX Spectrum (without color and sound of course). Just put the ROM file on the EPROM, set DIP 4 to ON/UP and power up your ZX81.
A few ROMs from different interfaces does not sit in the 0-8K memory space, using the 16K configuration of this interface - it is possible to get them running on your ZX81. The following sections provides instruction on how to run the ones I know of.
To run the ROM from the Timex Store Demonstrator Board, the setup needs to be like this:
- 0-8K, 8K ROM - ZX81 rom, use v2 - 649 (MD5: db398d4e4e93a6d4dee3bfe146918219)
- 8-16K, 8K DemoStore ROM
Modify ZX81 rom - Change byte offset 0x09DB from 0x40 to 0x20 (ZX81v2_mod.rom)
Unix/MacOS
cat ZX81v2_mod.rom StoreDemo.rom >SD.rom
cat SD.rom SD.rom SD.rom SD.rom > SDx4.rom
Resulting SD.rom shoulb be a 16K rom image and SDx4.rom should be 64K (contains SD.rom in all 4 banks), ready to be programmed in W27C512. To start the demo program, run type RUN
This is a 4K rom that resides in the upper 4K of the mirror area. Layout of a 16K rom containing this, should be:
- 0-8K, 8K ROM - ZX81 rom, use v2 - 649 (MD5: db398d4e4e93a6d4dee3bfe146918219)
- 8-12K, copy of first 4K of the ZX81 ROM
- 12-16, the MemoCalc Rom
Unix/MacOS
split -b 4k ZX81v2.rom ZX81
cat ZX81v2.rom ZX81aa Memocalc.rom >MC.rom
cat MC.rom MC.rom MC.rom MC.rom > MCx4.rom
Resulting MC.rom is the 16K image and MCx4.rom should be 64K (contains MC.rom in all 4 banks).
MemoCalc is started with RAND USR 13824
A ROM Catridge interface for the TS1000/1500 - only 4 cartidges was produced, 3 8K and 1 16K
To use the 8K Catridge - the layout of the 16K rom should be:
- 0-8K, 8K ROM - ZX81, use v2 - 649 (MD5: db398d4e4e93a6d4dee3bfe146918219) (or the TS1500 rom, not tested yet)
- 8-16K, the Catridge ROM
Unix/MacOS
cat ZX81v2.rom chess.rom > TS1510_CHESS.rom
cat TS1510_CHESS.rom TS1510_CHESS.rom TS1510_CHESS.rom TS1510_CHESS.rom > TS1510_CHESSx4.rom
When ZX81 has booted up, start the game with RAND USR 8192. If using the TS1500 ROM - the cartridge will autostart, as the TS1500 ROM has been changed a bit to handle this.
ASDIS - Assembler/Disassembler - 8K ROM ASDIS.C
Layout:
- 0-8K, 8K ROM - ZX81 rom, use v2 - 649 (MD5: db398d4e4e93a6d4dee3bfe146918219)
- 8-16K, ASDIS.C Rom image
Unix/MacOS
cat ZX81v2.rom ASDIS.C > ASDIS.rom
cat ASDIS.rom ASDIS.rom ASDIS.rom ASDIS.rom > ASDISx4.rom
When ZX81 has booted up, start the assembler/disassembler with RAND USR 8192
Yes, it's possible to make a setup which makes the ZX81 able to boot and auto run a tape file. More info to come soon!