A "very-scottish" EPROMMER for the ZX81


Only a few parts around a 8255-PIO are needed, to burn EPROMs from 2716 to 27128. For a fast programming there's also an intelligent software, burning 16k in approx. 1 minute.

The hardware:

Schematic EPROMMER(JPG-File, 88 kBytes)

It's not strongly necessary, to have a 8255, but this way it's very easy. Also two Z80-PIOs can do the same job, in this case it also may be possible to handle even larger EPROMs!

All EPROM-pins are connected directly to the ports, without any latches. So be carefully: any defective EPROM can destroy the PIO chip! With 8 datalines and 14 addresslines there are two lines left for controlling. One line sets the programming pulse and the other line controls the chip-select. The length of the programming pulse must be 1ms and can be adjusted with Rx and Cx (6kOhms and 220nF). To adjust the pulse, read in an empty EPROM and then "burn" it with "Slowburn" WITHOUT programming voltage. Thus the verifying is always true and you have enough time to measure the length of the programming pulse.

The type of ERPOM must be selected with the 8 switches this order:

SW1 SW2 SW3 SW4 SW5 SW6 SW7 SW8
2716 on on off on on off on on
2732 on off on off off on on on (write)
2732 on off off on on off off on (read)
2764 on off off on off off on on
27128 on off off on off off on off

To remove a ERPOM from the socket, SW1 must be switched off.

The PIO is memorymapped, jumper J1...J4 select the base address:

J1 J2 J3 J4
baseaddress 32768 40960 49152 57344

Default selection is J4, thus the PIO covers 8kB of RAM. You may solve it any other way as you want, but you have to adjust all POKEs in the Basicprogram and any addresses in the machinecode too...

A step-up inverter generates the programming voltage from an input of 10...12 Volts (from ZX81).

Schematic Step-up Inverter (JPG-File, 38 kBytes)

The coil must be adjusted, I used an old ones and I don't know the inductivity. Seems to be around 0,5mH. To test it: the inverter oscillates around 10 kHz and the output must be stable (max. -0,1 Volts) up to 75mA at 25 Volt output (using a 330 Ohms dummy-load). In this conditions no part of the inverter (especially T1 and the coil!) should be overheating.

The programmming voltage will be selected with two switches:

SW1 SW2 Volts
off off 12,5
on off 21,0
off on 24,5

The software:

The program uses Basic and machine-code. All out- and input to/from the PIO and some fast routines for erase-check and read-in are done with the machinecode routines. The BASIC frame asks the starting address in RAM, the starting address in the EPROM and the number of bytes to burn. A second screen asks the mode: erasecheck, reading, fastburning, slowburning and change.

1-Fastburn: The selected number of bytes will be written from RAM to the EPROM at the selected addresses. Fastburn gives 1ms programming-pulses and verifies. If verifying is true, the routine gives additional pulses as the double count of the previous pulses to the EPROM. If verifying is still false after 50 pulses, the routine indicates "defective EPROM".

2-Slowburn: Similar to (3), but gives always with 50 pulses (=50ms) and verifies after that.

3-Reading: The EPROM-contents will be written to the RAM with the selected addresses and number of bytes.

4-Erasecheck: The EPROM will be checked from the starting address over the number of bytes.

5-Change: For changing the EPROM, sets all portlines to low. SW1 must be opened before removing the EPROM!

With any abnormal abort of the mc-routine the current EPROM address will be displayed.

BASIC Listing and Machinecode.

Your ZX81 should have enough RAM for a) the program, b) the EPROM contents and c) a memoryhole for the memorymapped PIO. If you only have 16k, set down RAMTOP to 24576. After RAMTOP you have now 8k space for the EPROM contents. It's just no problem, to burn a larger EPROM in more steps...

So go on, HAPPY burning!


Ooops: I will NOT be responsible for any destructed EPROMs nor any other parts when using the EPROMMER! You use it at YOUR OWN RISK!! But believe me, it works totally great...


I'm looking forward to any comments and improvements. If you adopt the EPROMMER for burning larger ones, e.g. 27256 and 27512, let me know!