Extending Old Games With Reverse Engineering And MAME

For last year’s Toorcamp, the folks over at DorkbotPDX helped out with the Church of Robotron installation. A religion founded on the prophesy of a cybernetic uprising in the year 2084 is a little esoteric even for us, so the Dorkbot crew wanted a way to make playing Robotron: 2084 a little more visceral. Using MAME and a few debugging tools, they were able to read the memory of a machine playing Robotron to extend the game into the physical world. When the player dies, lights go off, alarms sound, and the prophet of the Church of Robotron is pleased.

The setup at the Church of Robotron included a machine running MAME with a Robotron ROM. When events happened in the game, such as lasers firing or a player death, physical events would be triggered. To do this, the Dorkbot team read the memory locations of a game of Robotron at different times and found memory locations tied to in-game events. On their blog they go over using the MAME debug tool to detect a player’s death which can then be translated into physical apparitions for the Church of Robotron.

It’s a very cool hack, and one we wish we had a video of. Having a plastic ghost hit a player while playing Pac-Man seems like an awesome idea, and with the Dorkbot tutorial, it looks fairly easy.

8 thoughts on “Extending Old Games With Reverse Engineering And MAME

  1. I was pretty good at Robotron. My high score was over 4.5 million. But I did not always have time to finish a game I happened to be playing so I walked away from a lot with a full rack of extra lives. I did that once in NYC where I was playing a machine that was propping open the door of a laundromat on the sidewalk. The crowd I’d attracted freaked out. People tried to dive in and play where I’d left off and as I walked away I could hear all of the dying going on. I think that machine was set pretty low difficulty wise. From what I gathered talking to service techs the game has 10 difficulty settings. I knew a guy who could beat the machine though. He’d play it so hard the machine would pink screen crash. The highest score he could ever get was 16 million before a machine locked up on him (a 4 hour game). I think there are only 100 levels then the machine wraps back to level 1. Might be 250 though, all of that was a while ago now.

    If you’re good you can make the machine sine wave too. That is when the game would array the baddies in a sine wave pattern on the screen. Once you can sine Robotron you’re pretty good. You’ve pretty much owned it then.

  2. Apparently these guys had never heard of Mame’s official output system or mamehooker. They wasted half their time doing stuff that was already possible in the stock build of mame. All they had to do was re-write the driver and hook up these values they found to the output system.

    1. Hi Howard!

      Thanks for pointing out mamehooker and the output system. The blog post was more focused on using the debugger to explore old games.

      Mamehooker and the MAME output system didn’t really match the needs that we had though. The output system is for publishing events that the original game already was firing signals for. Which we wanted more than that. Mamehooker also appears to be a Windows only piece of software, we were running a Linux box. We also wanted to control when MAME dumped the nvram to a file so we could process the highscores.

      The code that we added to mame was a tiny extension of the debugger. (75 lines of code, https://github.com/breedx2/mcor/blob/master/mamehack/mcor_send.c)

      Most of the time spent was actually reverse engineering breakpoints for event publishing. So even if the output system or mamehooker provided the communication channels we needed, using the debugger would have still needed to happen for discovery.

      Some would try to argue that the whole project was a waste of time, but we think its important to save the last human family. ;)

Leave a Reply to pcf11Cancel 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.