How-To: Read a ROM

NYC Resistor member Adam Mayer just posted this fantastic guide to reading the data off of old EPROM chips. To grab the data, you’ll need an Arduino Mega (or a microcontroller with 24 I/O pins), jumper cables, breadboard, and of course an EPROM to read. Adam also suggests having a fair bit of wits, though he says “unless you’re exceptionally addled you should be fine.”

But what kind of data can you expect to find in these digital time capsules? “The bulk of the ROM probably contains binary instructions, but anything could be in there—images, fonts, screed, mysteries,” he says. Adam also offers plenty of suggestions for how to interpret the data you might find and shows how he uncovered Hebrew and English glyphs inside one of the chips. So if you’re interested in uncovering some of the data that could be stored in your old electronics devices, check out his detailed writeup and let us know what you find!

26 thoughts on “How-To: Read a ROM

  1. I had cause to do this the other day, in an endeavor to resurrect some late 70’s electronics I found on the street (serendipitously I had read Adam’s previous article a few days prior). My Arduino Mega being otherwise engaged, I ended up using two Arduinos – the first ‘requesting’ addresses from the EEPROMs and the second reading them (in addition, an output pin from the first was connected to an input pin on the second to signal that the EEPROM address had been set and that now might be a good time to read its output value).

    I note that some EEPROMs have output hold functionality (which will hold the output pins for reading for a period after the address pins have changed). Leveraging this with a liberal sprinkling of pinMode() would presumably allow EEPROM reading with yer bog standard Arduino. I suppose it wouldn’t be rocket science to achieve the same effect with some latches. First person to make a prom dumping shield with some kind of ZIF socket gets all the points. And some of my money.

    The found electronics are still dead, but watching long forgotten strings from the 70s clocking into the serial monitor window of the Arduino IDE was mesmerising.

  2. “But what kind of data can you expect to find in these digital time capsules?”

    I used a programmer to read the contents of some EPROMS in SMPTE timecode clocks (TV stations use them extensively). The clocks are driven from a master clock and have hands like an analog clock. Each hand had a stepper motor. The motors started going bad and the manufacturer said we had to send the bulky, fragile clocks back for repair. By comparing different clock’s memory contents I found the calibration values for the hands. By altering the values and measuring the results I was able to repair the clocks myself. The manufacturer’s techs said that my method was a lot easier than the complicated calibration setup which the factory used.

  3. If you want to try this on a microcontroller board with fewer I/O pins, a good way to do it would be to use some shift registers. Something like a pair of 74HC595 chips could be used to generate addresses, while a parallel-in-serial-out chip like the 74HC165 could be used to serialise the output byte.

  4. I read the article the person wrote.. Only minor OOPS, was assigning the address byte, as A0.. (note, A0 in Arduino code refers to Analog 0′) I simply did a quick global change to AD0..) Also, the project is for the older, Multi-line address chips.. Hence the requirement of the MEGA. (not sure if the 1620(##?) would handle it, but it definitely works on a 2560!) I imagine, wiring for the various chips (from 2708 up to 27512) are easy to find on the net. Note, ANY line listed with a line above the function, (I.E. CE (Chip Enable) OE (Output Enable) PGM (Program)) need to be Logic-0’ed (pulled low to GND) to function. I imagine, with a few extra components, (a 27V supply, a relay (sorry, I would not trust a solid-state.. too much change of frying things!), additional digital pins on the MEGA) a EPROM burner is possible.. You already have the base program the person wrote, Adding in “HOT” (setting the burn supply on), near the beginning, pulling PGM down for a certain time in ‘ms’, then reading to confirm. I wonder, if a UV LED would be strong enough for erasing? (consider, the regular erasers use a non-filtered (no purple) mercury vapor tube..)

Comments are closed.


Matt Richardson is a San Francisco-based creative technologist and Contributing Editor at MAKE. He’s the co-author of Getting Started with Raspberry Pi and the author of Getting Started with BeagleBone.

View more articles by Matt Richardson