1
\$\begingroup\$

I have an existing device (an arcade CPU board) that stores some data in a 5565 64-Kbit SRAM. I want to replace it with a dual-port RAM so I can read the data with a microcontroller. I don't need to write from the second port, only read.

Whatever component I use will have to be compatible with the original - in particular, the game will have to be able to access its port at any time without worrying about contention with the other.

What should I use?

\$\endgroup\$

3 Answers 3

2
\$\begingroup\$

You will need to create what is called a mezzanine board. Your big problem is that the 5565 only needs ~ 25 signal pins (13 address, 8 data, 2 enables, 1 R/W, and 1 output enable), while an 8k x 8 dual port RAM needs at least twice as many. This means that your DPRAM will have a much larger (in terms of pins) package than the 5565.

A good starting point for DPRAMs is the IDT 7005, which can be found on eBay. This will come in various packages with 64 - 68 pins.

First, your game board will need to be modified to allow connection to the 5565. This can be done either by unsoldering the RAM and replacing it with a 28-pin DIP socket, or by soldering connector points to the RAM to connect with the new board. Replacing the IC with a socket is the better way to go, and I'll assume you take that route.

The mezzanine board will consist of 5 parts,

1) 28 pins sticking down to mate with the 5565 socket

2) a DPRAM with one side (call it side A) connected to the 5565 signals (with slight exceptions - see 4 and 5)

3) an interface connector to allow side B to be connected to your MCU, and

4) a small amount of logic to convert the 5565 chip enable lines to be compatible to the 7005. The 5565 uses 2 enable lines, one active high and the other active low, while the 7005 uses a single active low enable line.

5) some logic to indicate to the MCU that the game is writing to the same address that the MCU is trying to read. This can get tricky. I'd advise setting up address registers and an output register and not trying to read the 7005 directly, but rather slowing your MCU read cycles down enough to allow contention to resolve.

Oh yes, and be careful about how long a cable you use between the MCU and the board. You don't want ringing on your address lines. Series termination will be a good idea.

\$\endgroup\$
1
\$\begingroup\$

I'd use a small FPGA, like an XC6SLX4, or even an XC3S200A. Implement a UART and a state machine to handle read requests, add an FT232R for USB-to-UART bridging and you're done.

I've done something similar in the past (not with a game, just monitoring/mimicking RAM). The biggest issue would be the 5V to 3.3V level translation over such a large number of pins (I'm assuming the SRAM is old enough to be 5V).

\$\endgroup\$
0
\$\begingroup\$

How fast is the board in question? It may be possible for something like an ARM microcontroller running a very tight loop to emulate a RAM chip while allowing a means for an outside device to request its contents.

\$\endgroup\$

Not the answer you're looking for? Browse other questions tagged or ask your own question.