~douardda/eprom-emulator

A simple EPROM emulator using SRAM and an Arduino MicroPro
upload: add a --device option
Improve README: add an EPROMs pinout diagram
Resize and optimize jpg image files

refs

master
browse  log 

clone

read-only
https://git.sr.ht/~douardda/eprom-emulator
read/write
git@git.sr.ht:~douardda/eprom-emulator

You can also use your local clone with git send-email.

#EPROM Emulator

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

Picture of the EPROM Emulator using an ESP32 devkit c as microcontroller

#Connecting the emulator

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).

Pinout of EPROMs 2716 to 27512

Note: the CS line in the connector J1 can be disconnected removing the jumper JP1.

Picture of the EPROM Emulator connected to a EIP 545B RF frequency counter

#Uploading EPROM image files

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

Picture of the EPROM Emulator connected to a Minipro TL866

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.

#License

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).