Ruud's Commodore Site: EPROM emulator Home Email

EPROM emulator




What is it

An EPROM emulator capable of emulating the 2716, 2732, 2764, 27128 and 27256. It can be operated from a bidirectional printer port. But knowing that modern laptops and most modern PCs don't have a LPT port anymore, I'm also working on using an Arduino Uno R3 as interface between a PC and this emulator.


Supporting other types

The 2364, for example used in the Commodore 64 and IBM 5150 PC, is not supported directly but that can be solved by using an adapter. It is the same adapter that you need if you want to replace the 2364 of a C64, 1541 or VIC-20 with a 2764 or bigger EPROM.
You will also need an adapter to be able to connect the emulator to a 2716 and 2732. These are 24 pin EPROMs, the emulator can only handle 28 pin ones. This has to do with the power supply; the host system has to supply the power. I used a diode on an older version but that didn't work out well.

Other types, like the 2532, can be supported as well but only if you create an adapter with the following guidelines:
- Take a 27256 as base.
- If the original ROM has only one activation signal, make sure that both the CS (Chip Select) and OE (Output Enable) pin of the emulator are activated as well. Just connect these pins to this one activation pin.
- In case of two activation signals, connect one with CS and the other with OE of the socket leading to the emulator.
- More CS pins are no problem as long as they replace address pins on 27256 socket of the emulator. The emulator doesn't even have to know if it is a positive or negative enable input. By mirroring a smaller EPROM all over the 32 KB memory of the emulator's RAM, the data will always pop up at the right place.


The hardware

The core is a 57256 32KB*8 SRAM (IC9). Two systems must be able to approach this SRAM so we must provide means of access to the address, data and control bus. A 32KB SRAM has:
* 15 address lines
* 3 control lines
* 8 data lines
To access these lines from the host system we need three 541 buffers for the address and data lines, IC7, IC8 and IC12, and one half of a 244 (IC10B) for the control lines.

The printer port does not supply address lines and therefore we have to supply them ourself using two 74ALS573s, IC1 and IC2. They get their input from the data bus of the printer port.

A 74LS139 2-to-4 demultiplexer, IC5B, takes care of selecting the 573 you want to update (Y0 and Y1). Output Y2 selects the SRAM. Y3 controls whether the 573s or 541s (IC7 and IC8) and one halve of the 244 (IC10A) are active.
The select lines of the 139 are controlled by two outputs of the printer port.

One problem is the use of the 'Chip Enable' (CE) and 'Output Enable' (OE) inputs of a ROM by a host system. Some systems only activate CE and connect OE to ground, others use only OE and again others use both inputs. ORing these inputs makes sure when we have to enable IC12 to output the data. To save an IC we use IC5A as an OR gate.

As you can see there are no provisions taken to avoid data collisions: this cannot be realized in hardware and is purely a matter of software. The moment the SRAM needs to be read by the host or PC, the data bus of the printer port must operate in input mode.

2732 and smaller EPROMS have only 24 pins. This means that the power supply is at pin 26 of our design. A diode (D3) routes the power to pin 28.
To make sure that the pins 2 and 27 have a defined level, two resistors pull these line up to +5V.


Power requirements

The host computer has to power the emulator. For this reason I advise you to use HCT versions of the needed IC to limit the current. In case of an old C=, IMHO there is a good chance you even need less power then the original ROM :)


The future

The 27256 is the largest EPROM used in C= 8 bitters AFAIK. So for this reason I have no interest in expanding the system.
If I decide that I do need to emulate more ROM, then an Arduino Mega2560 only could come in view.


The schematic.





Having questions or comment? You want more information?
You can email me here.