FPGA Jacked Into Pinball Machine Masters High Scores

How do you preserve high scores in an old arcade cabinet when disconnecting the power? Is it possible to inject new high scores into a pinball machine? It was the b-plot of an episode of Seinfield, so it has to be worth doing, leading [matthew venn] down the rabbit hole of FPGAs and memory maps to create new high scores in a pinball machine.

The machine in question for this experiment is Doctor Who from Williams, which, despite being a Doctor Who pinball machine isn’t that great of a machine. Still, daleks. This machine is powered by a Motorola 68B09E running at 2MHz, with 8kB of RAM at address 0x0000. This RAM backed up with a few AA batteries, and luckily is in a DIP socket, allowing [matthew] to fab a board loaded up with an FPGA development board that goes between the CPU and RAM.

The basic technique for intercepting and writing a new high score for this pinball machine comes from the incredible [sprite_tm] who is tweeting high scores from a 1943 cabinet. The idea is simple: just have an FPGA look at one specific memory address, and send some data to a computer when the data at that address is updated. For the Doctor Who pinball machine, this is slightly harder than it sounds: the data isn’t stored in hex, but packed BCD. After a little bit of work, though, [matthew] was able to write new high scores from a Python script running on a laptop. All the code (and a few more details) are over on a Github

Extending arcade games by tapping into address and data lines isn’t something we see a lot of, but it has been done, most famously with the Church of Robotron. Here, a few MAME hacks turn a game of Robotron into a Church for the faithful to fully commit themselves to the savior of the world, due to arrive in 66 years and save the remaining humans from the robot apocalypse. This hack of a Doctor Who pinball machine goes beyond a modded version of MAME, and if we’re ever going to make a real chapel with a real game of Robotron, these are the techniques we’re going to use.

13 thoughts on “FPGA Jacked Into Pinball Machine Masters High Scores

  1. Most of the games have their code running out of EPROMs. Use a logic analyzer watching address, data and control signals to figure out where in RAM the high scores live, and then write a short little program to insert the value you want into the RAM area. Burn the program into a suitable EPROM and swap in for one execution. Then replace the orginal EPROM so the game is back to normal. It takes a little time to implement, but works just fine. And no, I am not going to say how or where I verified this :).

  2. Why go through all this to save a high score? Just install an NVRAM and be done with it. That’s an easy fix for all Williams WPC MPU boards. What’s with the photo? That’s not even a Doctor Who MPU pictured. It’s a Rottendog MPU327-4 replacement board for Williams 3,4,6. It has NVRAM and will never loose it’s memory.

  3. The firepower mpu board’s ram for that range is a 256x4bit unit that they chose to address on the lower nybble and leave the upper nybble pulled high – so the stock HSTD would be stored F5 F5 F0 F0 F0 F0. Other manufacturer’s contemporary pinball machines to firepower that also used the 5101 ram would have the same issue, but Bally (for instance) choose to make the upper nybble active and leave the lower one as F.

    1. They must have had a full byte width RAM somewhere in the address space, otherwise you could not push an address on the stack and return to it.
      Some other embedded systems that I used to work on used nibble wide RAM but took two accesses to fetch the full byte. The CPU only saw a single bus cycle though.

      1. They do. The address from $0000-$00FF is full width with either 6810’s or 5114’s or in combination internally in a 6802. The 5101 nybble storage from $0100-$01FF is for the battery backed part since it’s a lower power requirement part.

  4. “which, despite being a Doctor Who pinball machine isn’t that great of a machine” What???? Doctor who is a great machine, its no monster bash or Wizard of oz, but its a solid and beloved machine by the pinball community

  5. Huh, that was a mindfuck… after I did that hack on the local hackerspaces 1942 machine, I also did something similar with the pinball machine I acquired. Which is a Williams Dr. Who machine. I just didn’t use an FPGA but whipped something up with latches, an AVR (I think) and some Linux SBC that could do wireless.

    Also, I disagree on the Dr. Who not being that great. It’s actually pretty nice for replayability, in my opinion.

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.