The other port is accessed by an ATmega 1284 to the left of it. Its code responds to simple serial commands and can read and write to the RAM.
An ESP32 talks to the ATmega over UART and frequently asks it to dump 16 bytes at 0x00A0 to tell the game state and player number, and 0x0100 to get the four player scores. When it detects a new game, it offers the player a chance to scan their RFID member card and keeps track of their score:
We found there were sometimes read collisions and the ATmega would block the pinball machine from writing to RAM which would cause crashes or odd behavior. The latest version uses two RAM chips, one acting as a shadow copy -- similar to yours.
The pinball community as a whole has been doing really cool things like this for years. Custom soundtracks for older games and now more recently we're seeing total rewrites of the rules/coding flashed onto chips or new PCBs like this. Super cool stuff.
Do you have any plans of open-sourcing or releasing your work here? This stuff is awesome, it would be great to try and apply it to different eras of pinball machines as well.
Yeah, definitely if people are interested. Let me clean up the repo a little bit first :)
It's probably hard to directly apply this to other machines, but the interposer board idea would make it easy to take the same hardware and use it on any MC6808-based machine.
ballysternos is a really neat arduino project that sits on the debug header of old bally and stern mpu boards. the arduino holds the 6800 in halt from the start and re-implements game code
i've seen at least two of these in the wild, one in a Bally Eight Ball running "Eight Ball Plus" code, and another in a Stern Meteor running "Meteor 2021". both add some neat super-features and game modes, the Meteor has an accompanying wav trigger board, speakers, and amp to add wav sound effects as well -- anyone who loves Meteor will appreciate (or hate) that it no longer screams your spinner value in a high pitched tones.
Cool hack! Thanks for laying out the steps in such detail. One specific comment:
>While the board was out, I removed the battery holder from the MPU board. The board needs 3x AA batteries to keep the CMOS RAM powered to maintain the high score list while the machine is off. I’d read that these batteries could sometimes leak onto the circuit board, causing substantial damage.
You can also use Lithium primary AA batteries, not to be confused with rechargable lithium-ion cells. They are better than Alkalines in just about every way, including that they do not leak. The only reason Alkalines are so popular is that they are slightly cheaper. In this application, you probably want the best cells possible.
You can also solder or plug in a remote battery pack. These older Williams boards put the battery pack at the top of the cabinet where it could leak all over. Later designs at least put it at the bottom where nothing important was below.
Another option is to replace the CMOS RAM with NVRAM.
I interfaced an ESP8266 with the switch matrix to do much less impressive things on more modern pins so I’m kindof blown away. It’s tricky piggybacking the signal lines and I feel a little better hearing I wasn’t the only one who got it 99% working and started wondering if maybe my microcontroller was underpowered for the job.
Interesting. Reminds me of something I built a few years ago.
To demonstrate low latency for a proxy we built, we decided to do a small publicity stunt at a local conference. We found an old pinball machine, managed to reverse engineer and findbfrom patchwork docs and some experimentation that we could send some commands to control flillers over a serial port.
Then we built a web application that would receive commands over http, and forward them appropriately. Ran this on a laptop connected to the pinball machine. Then we setup our proxy on a raspberry pi, setup some mobiles to access the webapp via the proxy, and had a fun little demo.
Users can tap left and right halves of screen on mobile web page to send requests, and could see the pinball flippers move. Our stunt was that see, it's pretty fast and low latency even with some simulated background load on the system.
Damn, this is amazing. I took up a lot of hobby electronics using Raspberry Pi 4 Model B and Pico Ws during the pandemic. I stopped short of custom PCBs or reviewing circuit schematics, but this makes me want to search out a basic project that would require doing so.
I wonder if niche arcades could make a comeback with something like this. Imagine global competitions between clubs competing for rank, recognition, and reward.
TBH I'm not a fan of comparing scores on different physical machines. Every pin is different. It is still fun to see scoreboards on local machines or to find the really out-there scores some people put up, but it's not like a video game where everyone is on equal footing.
To me that is part of the appeal of pinball. It is a local, physical, tangible thing.
Stern tried this a long time ago to compete with Golden Tee Golf tournaments, since those games were paying people cash and killing pinball in street locations like bars.
The problem was stopping nefarious players from taking the glass off and rigging the score. It's an impossible thing to prevent.
They already have, for pinball in particular. Stern Pinball implemented a connectivity system for new machines (it reads your QR code), and there are many arcade locations that use that to track and display scores and achievements and leaderboards. Most mid-sized cities in the US now have at least one brewery or arcade with this running now. It's mostly particular to each location, but some organizers use it for global competitions as well.
Thanks! Yeah, it would work on any System 7 game, as long as you’re willing to solder in the 2x20 connector to the MPU. All of the memory locations should be exactly the same.
Nice work!
I'm assuming score rollover is detected so your awesome final score is correct.
Also saving game settings of total balls (3 or 5) and extra ball enabled is useful when comparing scores.
Fortunately I don’t have to worry about rollover. The game can score a maximum score of 99,999,999, and the highest I’ve been able to score is about 3,500,000.
[+] [-] tannercollin|3 years ago|reply
We first replaced the original RAM chip with a IDT 7132 SA100P dual-port RAM that sits on a breadboard:
https://pic.t0.vc/WPUO.jpg
The other port is accessed by an ATmega 1284 to the left of it. Its code responds to simple serial commands and can read and write to the RAM.
An ESP32 talks to the ATmega over UART and frequently asks it to dump 16 bytes at 0x00A0 to tell the game state and player number, and 0x0100 to get the four player scores. When it detects a new game, it offers the player a chance to scan their RFID member card and keeps track of their score:
https://pic.t0.vc/UQYK.jpg
After the game is complete, any players who have scanned in get their scores uploaded to our member portal where we can sort them by personal best:
https://pic.t0.vc/MZGY.png
We found there were sometimes read collisions and the ATmega would block the pinball machine from writing to RAM which would cause crashes or odd behavior. The latest version uses two RAM chips, one acting as a shadow copy -- similar to yours.
Eventually we'll make a PCB for it and open source everything. Currently only half the code (the ESP32) is on Github: https://github.com/Protospace/pinballwizard
[+] [-] Rolpa|3 years ago|reply
[+] [-] elipsitz|3 years ago|reply
[+] [-] pbj1968|3 years ago|reply
[+] [-] jvanvleet|3 years ago|reply
[+] [-] soupfordummies|3 years ago|reply
[+] [-] TehCorwiz|3 years ago|reply
[+] [-] iceflinger|3 years ago|reply
[+] [-] elipsitz|3 years ago|reply
[+] [-] elipsitz|3 years ago|reply
It's probably hard to directly apply this to other machines, but the interposer board idea would make it easy to take the same hardware and use it on any MC6808-based machine.
[+] [-] stjrweyer|3 years ago|reply
ballysternos is a really neat arduino project that sits on the debug header of old bally and stern mpu boards. the arduino holds the 6800 in halt from the start and re-implements game code
i've seen at least two of these in the wild, one in a Bally Eight Ball running "Eight Ball Plus" code, and another in a Stern Meteor running "Meteor 2021". both add some neat super-features and game modes, the Meteor has an accompanying wav trigger board, speakers, and amp to add wav sound effects as well -- anyone who loves Meteor will appreciate (or hate) that it no longer screams your spinner value in a high pitched tones.
[+] [-] aftbit|3 years ago|reply
>While the board was out, I removed the battery holder from the MPU board. The board needs 3x AA batteries to keep the CMOS RAM powered to maintain the high score list while the machine is off. I’d read that these batteries could sometimes leak onto the circuit board, causing substantial damage.
You can also use Lithium primary AA batteries, not to be confused with rechargable lithium-ion cells. They are better than Alkalines in just about every way, including that they do not leak. The only reason Alkalines are so popular is that they are slightly cheaper. In this application, you probably want the best cells possible.
[+] [-] mulmen|3 years ago|reply
Another option is to replace the CMOS RAM with NVRAM.
[+] [-] shove|3 years ago|reply
[+] [-] phanimahesh|3 years ago|reply
To demonstrate low latency for a proxy we built, we decided to do a small publicity stunt at a local conference. We found an old pinball machine, managed to reverse engineer and findbfrom patchwork docs and some experimentation that we could send some commands to control flillers over a serial port.
Then we built a web application that would receive commands over http, and forward them appropriately. Ran this on a laptop connected to the pinball machine. Then we setup our proxy on a raspberry pi, setup some mobiles to access the webapp via the proxy, and had a fun little demo.
Users can tap left and right halves of screen on mobile web page to send requests, and could see the pinball flippers move. Our stunt was that see, it's pretty fast and low latency even with some simulated background load on the system.
[+] [-] blockwriter|3 years ago|reply
[+] [-] shanebellone|3 years ago|reply
I wonder if niche arcades could make a comeback with something like this. Imagine global competitions between clubs competing for rank, recognition, and reward.
[+] [-] mulmen|3 years ago|reply
To me that is part of the appeal of pinball. It is a local, physical, tangible thing.
[+] [-] koz1000|3 years ago|reply
The problem was stopping nefarious players from taking the glass off and rigging the score. It's an impossible thing to prevent.
[+] [-] vikingerik|3 years ago|reply
https://insider.sternpinball.com/
[+] [-] caseysoftware|3 years ago|reply
At ngrok, we just published a guide to put the ESP32 online that might have helped: https://blog.ngrok.com/posts/putting-the-esp32-microcontroll...
[+] [-] soupfordummies|3 years ago|reply
It's like Stern Insider hacked into older games. Amazing!
Do you think this could be transferred and applied to other System 7 games?
[+] [-] elipsitz|3 years ago|reply
[+] [-] relwin|3 years ago|reply
Anything pinball on HN is a good day :)
[+] [-] elipsitz|3 years ago|reply