Dumping Old PROMs With New Hardware

[ijsf] recently came across a very old synthesizer from a defunct West German company. This was one of the first wavetable synths available, and it’s exceptionally rare. Being so rare, there isn’t much documentation on the machine. In an attempt at reverse engineering, [ijsf] decided to dump the EPROMs and take a peek at what made this synth work. There wasn’t an EPROM programmer around to dump the data, but [ijsf] did have a few ARM boards around. It turns out building a 27-series PROM dumper is pretty easy, giving [ijsf] an easy way to dig into the code on this machine.

The old EPROMs in this machine have 5v logic, so [ijsf] needed to find a board that had a ton of IOs and 5v tolerant inputs. He found the LPC2148, which has a nice USB system that can be programmed to dump the contents of a PROM over serial. Interfacing the PROM is as simple as connecting the power and ground, the address lines, data, and the signal lines. After that, it’s just a matter of stepping through every address according to the timing requirements of the PROM. All the data was dumped over a serial interface, and in just a few seconds, [ijsf] had 32768 bytes of ancient data that made this old synth tick.

34 thoughts on “Dumping Old PROMs With New Hardware

  1. I’ve done essentially the same sort of thing for dumping the ROMs from old Midland commercial radios so they can be reprogrammed to amateur radio frequencies. This is a great sort of task for an Arduino to accomplish.

  2. dont even need the zif. I have used header sockets on a perf board. Luckily I do this enough that buying a usb eeprom/prom programmer is cheap and trivial.

    Made money with it by copying a performance chip for a 1980’s Grand National for a friend.

  3. I’ve done this numerous times myself using an arduino — they are cheap, 5v ready, and the dump routine takes a dozen lines of code. I’ve had the situation where there aren’t enough I/Os to drive all the address pins and read all the data pins in one go, so I’ve used a 595 shift register to turn two arduino I/Os into 8 or 16 address bits. The only tricky part is that older ROMs and EPROMs often require multiple voltage supplies.

    The trickiest ROM dump I did was getting the contents of a soldered down character generator PROM from a compucolor II. I didn’t want to risk damaging things by unsoldering it. Instead I attached an old HP logic analyzer to the character and row inputs and the row (dot) outputs. A BASIC program running on the Compucolor displayed all the characters on screen at once. An HP87 (!) was used to for its HPIB interface to repeatedly trigger the logic analyzer, collect the data, and repeat until I had captured all locations (doing it that way was a bit easier than reprogramming it to trigger on each specific character). The HP-87 then sent the collected data over an rs-232 port to a PC. That data is now part of an emulator that I have online:

    http://compucolor.org/emu/ccemu.html

    1. Yup, amazing and very cheap programmer that can read and program almost anything you put in it, my recommendation for all makers/hackers.
      I also like this guy’s hack, making your own dumper/programmer is usualy a lot quicker than waiting for an ebay package.

    1. The above clip from the ludicrous show halt and catch fire is an example why I stopped watching the dumb show after 2 episodes. They said 1101 is “B”, NOT “D”, they unsoldered an IC but show the BIOS IC being removed from a socket.

      The show had a character of a punk hacker chick, when there isn’t even one notable female hacker of that era that I can think of.

      PC over Reality doesn’t enhance HCF reputation.

    2. That’s not even a PC. It’s a PC/XT. The PC only had five slots which were spaced farther apart than on the PX/XT – which set the standard that all PC clones use to this day.

  4. All addresses are sequential. If you use a counter IC, you only need 2 outputs and 8 inputs on the controller. And if you only want to read one EPROM you could reduce the number of outputs to one and use the reset line to reset the counter.

      1. I don’t know if these are really a project. Usually they’re just a problem to be solved along the way. I made two. The first used an Arduino Uno buscause it was handy and also a CPLD chip as the Uno didn’t have enough pins. The second used a Mega and did away with the CPLD.

        Also – I love your CMS (Apache?) much.

  5. The (digital) Wersi devices (they built electric/electronic organs since the late 1960s, which were analog devices in the beginning) used quite complex hardware – the MK1, like many of Wersi’s electronic organs, used a pair of 6809 CPUs running on alternate clock phases as main CPU. This exploited a specific feature of the 68xx (and 65xx) CPUs which only accessed the external bus in the second half of a clock cycle. Wersi used a regular 6809 combined with a 6809E (with external clock input) running on the inverted clock of the first 6809. This way, both CPUs did not interfere when accessing shared memory or peripheral ICs (but you needed some quite fast memories). Each voice usually used a Z8 microcontroller – reading the Z8’s ROM will prove to be a more complex task. Btw., later Wersi systems (such as the Pegasus synthesizer) used multiple Transputers, they even developed their own distributed real-time OS.

    1. Interesting and glad you shared. I always enjoy reading about the clever ways the engineers got around limitations of the time. I am also not familiar with Wersi so I learned a lot today :) Now to dive back into the internet rabbithole of tabs… Thanks again :)

  6. It hurts me to see the chip with the window uncovered. They tend to selferase under just office fluorescent lights (though it takes few weeks, but why take chance at corruption?) or sun outside.

  7. Inreresting factoid: this can also be used to resurrect old pinball machines and desktop games from their grisly fate.
    The chips go bad due to entropy and radiation in the glass over time.
    I have been known to “fix” these by cloning the bad chip (don’t ask, NDA) and then hand-tweaking the bad bits until it works.
    Hint: Checksum !

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.