upload: add a --device option
Improve README: add an EPROMs pinout diagram
Resize and optimize jpg image files
This is a simple EPROM Emulator capable of emulating up to 4 EPROMs, from the 2716 (2KB) up to the 27512 (64KB), for a maximum total memory size of 64KB.
It is designed to help hacking the firmware of old test equipment or vintage computers; it allows to easily upload and test firmware images without having to erase and burn a bunch of EPROM chips or to insert and remove EEPROM equivalent chips.
Possible configurations:
EPROM | x1 | x2 | x4 |
---|---|---|---|
2716 | X | X | X |
2732 | X | X | X |
2764 | X | X | X |
27128 | X | X | X |
27256 | X | X | |
27512 | X |
It is using SRAM to replace the EPROM chips, and a Sparkfun ProMicro (5v 16MHz version) or an ESP32 to manage the configuration and upload of the EPROM imahe files.
Note: the hardware design is intented to use the ProMicro directly; using an ESP32 module requires the use of jumper wires to connect the module to the PCB.
Warning: the current version is working fine but suffers from a few design mistakes that have been worked around in the firmware at the price of some complexity and loss of performances when using the ProMicro.
When using an ESP32 module (e.g. an esp32 devkit c), the default connection pinout is as follows:
Signal | PCB (A1) | ESP32 |
---|---|---|
MOSI | 5 (D2) | 32 |
SCLK | 6 (D3) | 33 |
RESET | 9 (D6) | 27 |
WRITE | 10 (D7) | 26 |
DEVSEL | 11 (D8) | 25 |
ADDRH | 13 (D10) | 13 |
DATA | 14 (D11) | 12 |
ADDRL | 15 (D12) | 14 |
+5V | 21 | 5V |
GND | 3, 4, 23 | GND |
The emulator can emulate up to 4 EPROM chips according they are sharing all the bus and control lines but the CS (Chip Select) one, up to a maximum total storage of 64KB.
The idea is to be able to use it for vintage designs with several EPROMs chips used as described above. The main interface from the emulator (from connector J1, a ribbon cable with a DIP24 or DIP28 connector at the end) is plugged in the first EPROM socket, then the emulator provides 3 other CS lignes to be inserted in the pin 18 (2716, 2732) or 20 (2764, 27128, 27256, 27512).
Note: the CS line in the connector J1 can be disconnected removing the jumper JP1.
There is a simple tool provided to upload the EPROM content:
$ python3 upload.py --help
Usage: upload.py [OPTIONS] BINFILE...
Upload EPROM content to the EPROM Emulator from the given files and start
the Emulation Mode.
If --eprom is not given, the EPROM type will be guessed from the size of a
given BINFILE.
If --qty is not given, it will be estimated from the number of BINFILE given
as argument.
If no BINFILE is given, random content is generated and uploaded (for
testing purpose); in this case, --eprom and --qty are mandatory.
Options:
-E, --eprom [27C16|27C32|27C64|27C128|27C256|27C512]
the EPROM type
-n, --qty [1|2|4] number of EPROMs to upload
--help Show this message and exit.
Loading a set of 2 EPROM image files:
python3 upload.py 2732_{1..2}.dump
MODEL: 27C32
QTY: 2
UPLOADING:
PAGE:32 ADDRESS:8000 CRC:1D5A3C4C OK
PAGE:33 ADDRESS:8400 CRC:583D0047 OK
PAGE:34 ADDRESS:8800 CRC:390E1E42 OK
PAGE:35 ADDRESS:8C00 CRC:3638A509 OK
PAGE:0 ADDRESS:0 CRC:F8EFA988 OK
PAGE:1 ADDRESS:400 CRC:14D5102D OK
PAGE:2 ADDRESS:800 CRC:AFEA6F7C OK
PAGE:3 ADDRESS:C00 CRC:BD469663 OK
Note: the weird ordering of pages and addresses are the result of a small hardware bug for the current version of the PCB.
One uploaded, Emulation Mode of the EPROM Emulator is activated, and EPROMS are available for the target board.
For example, you can use a Minipro programmer to check the content of the first EPROM:
$ minipro -p M2732A@DIP24 -y -r 2732.dump
Found TL866A 03.2.86 (0x256)
Reading Code... 0.13Sec OK
$ md5sum 2732_1.dump 2732.dump
be2dcbe0c194ba7cc66a150f3666c6b9 2732_1.dump
be2dcbe0c194ba7cc66a150f3666c6b9 2732.dump
Warning: the SRAM chips holding the data are powered by the USB cable (via the ProMicro module) only, so you MUST keep the USB cable plugged in during the emulation process.
This repository and all its content is Copyright (C) 2019-2023 David Douard david.douard@sdfa3.org.
The software and documentation are licensed under the GPL v3 (see the LICENSE
file). The hardware design, in the hardware/
directory, is distributed under
the Creative Commons CC-by-SA 4.0 license (see the hardware/LICENSE
file).