ROM emulator

ROMemu is a combination of software and hardware that allows the usage of modern software development tools for simple, old style single board computer systems. It emulates an (EP)ROM programmer to the development software and an in-circuit ROM/RAM on the board.

Version 1.1 of the ROMemu Arduino shield with flatcabe and socket-pod.

The current version 1.1 uses an Arduino Mega 2560 with a shield containing a 32 kByte RAM-chip which is (partially) readable by the SBC-processor. The Arduino USB-connection is available as serial port to the development system. This allows to write Intel-hex data to the RAM.

ROMemu has two modes;

Using the ROMemu as RAM is an option, provided the socket is capable and a write signal is available.

The Arduino firmware supports Intel-hex format transfer to and from the emulator and some diagnosics.

Technical details.

The basis of the ROMemu is an Arduino shield with a static RAM chip, fully connected to Arduino pins. Additionally three 74HCT244 connect address and control lines and a 74HCT245 connects the data lines of the host SBC. An extra signal, ArduinoOnline, isolates the RAM from the SBC. An 74HCT02 makes sure the RAM is isolated from the SBC when the Arduino has access.

A short flatcable and an adapter board (pod) makes sure the RAM-chip signals are properly configured for the socket. The pod consists of two parts, an adapter between the RAM-pins and the pins provided by the socket and a set pins for the socket. A pod configuration is made for each socket to be supported.

The 1.2 version of the schematic:

small linked image of the schematic

Schema of the EmuPod


Getting code into an old SBC usually means assembly by hand or an desktop computer and retyping the HEX-codes into the SBC with an 7-segment display and simple keyboard. The ROMemu makes this more fun and less chance on typo's (but not really simpler).

If the write signal is properly configured, the SBC can write to the emulated ROM. The Arduino firmware allows downloading the RAM in Intel-Hex format.

Possible workflow. It is assumed the ROMemu is connected to the development system (desktop PC) and the SBC.

Current command set of the Arduino sketch:

-- ROM emulator 0.4 command set
Operational commands:
D[ssss[-eeee]]- Dump memory from ssss to eeee
Fhhhh         - AddressOffset
H             - This help text
:ssaaaatthhhh...hhcc - hex intel record
;ssss-eeee    - Generate hex intel data records
E             - Generate hex intel end record
Test commands
Bpp           - blink pin p (in hex)
Sssss-eeee:v  - fill a memory range with a value
Tp            - exercise port p
V             - view ports C, L, A, CS, OE, WR, ARDUINOONLINE
Wpp v         - Write pin (in hex) values 0, 1
?             - This help text

Here an example pod configuration, for the 2532 EPROM. With the WR* signal connected to the Vpp pin, write access is possible. Note only the memory range 0000h-1FFFh (Arduino side) is visible to the SBC at the address range of the ROM-socket.

Pod configuration connecting non-fixed signals between socket and flatcable.

Local links

Other resources:

Last updated: 2020-11-01