Still open: the actual cabinet, the platform mechanism, the apron rule card, and the next pass on screen graphics. The ROM side is basically waiting on hardware now.
Projects » NES Pinball Cabinet
NES Pinball Cabinet
Real cabinet conversion of "Pinball" for NES and VS System.
Update Log [15]
A VS. System motherboard came up for sale, so I looked at going full arcade hardware. It was bare, though: no CPU, no graphics chip, no harness, no power supply. The arcade graphics chip is the hard part to find, and it got expensive fast.
So the NES is locked in: a front-loader NES-001 affixed in the backbox (and optionally the original shell as a topper on the backbox, maybe make the power and reset buttons functional?) with an RGB mod running into a reclaimed Kortek KT-2101N arcade monitor. An RGB board can load the real arcade colors, so it still looks right. Real VS. hardware might be a follow-up project.
The custom cart is specced too: 32 KB program, four graphics banks, 8 KB battery-backed RAM, and the I/O for switches, lamps and coils. A flat cable runs out of the cart to the driver board.
0 comments
The biggest bug so far, found by accident during a lamp check.
The original splits the table into an upper and a lower screen and only runs the half the ball is on. On the cabinet the video ball is parked on the lower half, so the upper half never ran. No slot machine, no moving platform, no multiplier. It had been that way since M4.
On the cabinet it's all one playfield, and the platform keeps moving the whole game. So now both halves run every frame. The slot reels spin, and three of a kind pays out on the cabinet for the first time. That matters, since it's a big part of the game's loop.
- The slot reels got their own lamps, 9 more for 44 total.
- The moving platform is a real motor. It reports where it actually is and the game follows it, because stopping a specific reel depends on where the platform sits when its hit.
0 comments
- 20 seconds with no switch → fire the hole ejects, the pop bumpers and a fast platform sweep
- two more tries, 8 seconds apart; only the last one resets the drop targets, since that costs the player a bank they earned
- then give up and serve the next ball, so the game never hangs
Holding a flipper pauses the search. Cradling the ball isn't a stuck ball. How long a hold is allowed is still to be decided. Maybe change skipping to next ball to just providing another ball to the player while keeping it on the current ball count?
0 comments
The score screen was plain white text. I picked a layout:
- the shooting player's score big, in yellow LED-style digits
- PLAYER 1 / PLAYER 2 in red
- both totals smaller underneath in amber
- one-player games show just the big score
Next: even bigger digits, and maybe a more backbox-like frame around it.
0 comments
- The slot machine was leaking between games. Its reels carried over from one game into the next (a bug in the original too). Now they reset each game but carry between balls, since the ball never touches them.
- The drain sound was getting cut off. There's now a short pause before the next ball.
- Free play gets an attract mode. It used to skip straight to the start screen. Now it loops like coin mode, with PRESS START under the logo, and one START button on the panel.
- Score screen fixes: no empty 2UP in a one-player game, a ball icon next to whoever is shooting, and no flash of the old screen before name entry.
0 comments
- High scores: name entry on the cabinet buttons. Two five-deep boards, one per mode. The attract loop goes logo, demo, boards.
- New screens: extra-ball splash with the knocker, tilt (two warnings, the third ends the ball), game over and match for a free credit, and a title card into the bonus stage. Basic placeholders for now, will be improved during art pass.
- Out of room. The ROM filled up with 9 bytes left. New code now lives in a spare graphics bank on the cart and gets copied into cart RAM at power-on, which gave about 2 KB to work with.
- Service menu: a switch inside the coin door opens switch test, coil test, lamp test and audits.
0 comments
In TABLE mode the CRT shows what a backbox shows instead of the playfield: PINBALL, 1UP/2UP, BALL, BONUS, HIGH SCORE and CREDITS.
This one took 32 test builds. Code that looked like "just drawing" was also running timers and building collision maps, and the game kept freezing in new ways. I tracked one down by testing old builds by hand ("fine in v3, present in v7").
The screen also came up inverted, white with black text. The arcade's colors are numbered differently from a normal NES. I caught it from a photo.
Rules added along the way:
- completing a drop-target bank starts its mode
- extra balls at 100,000 and 250,000, awarded right away instead of at game over (scores to be changed/tweaked once were able to test gameplay)
- the bonus stage serve drops the ball onto Mario with a little random drift, not enough to be unfair but enough for a random output each time
0 comments
- M6: the game writes a fixed block every frame with everything the cabinet has to show or do: scores, ball, credits, every lamp and coil commands. The lamp numbering never changes, so the wiring harness never has to.
- M7: a SELECT MODE screen at the start of every game. Flippers pick, START confirms. It started as REAL PIN / VIRTUAL PIN and became TABLE / VIDEO. The flippers also move Mario in the bonus stage now.
- M8: switch events went from 10 to 30. Bumpers, slingshots and drop targets got their own scoring, since the original only notices them when the video ball touches the artwork.
Fun one from M7: the letter I in the game's font isn't where you'd expect. The tile that looks like it should be I is a second E. Using it would have printed "REAL PEN."
0 comments
M4: the rules now run entirely from a queue of switch hits on the cart. Press a key in the emulator and the game scores it, with no ball on screen. Getting there meant fixing random power-on memory that looked like real switch hits and fired events from boot.
M5: two ways to play.
- TABLE is the real machine. The video ball is parked and real switches drive the rules.
- VIDEO is the original game, untouched, played on the CRT with the cabinet's flipper buttons. A relay cuts the coils, and the lamps follow the video game.
Each mode keeps its own high scores.
0 comments
Between getting the ROM sorted out and prepped for real hardware, I started to work on how the actual layout would lay on a standard pinball playfield size. I started this by doing several photoshop mockups of the full size playfield from the game scaled and layed on top of a normal era-appropriate playfield (specifically using 1984's Alien Star by Gottlieb). From there I started to learn the basics of Visual Pinball using this great Visual Pinball crash course by DEAD FLIP. It may not look pretty with the standard bright pink colors the program uses, but a start is a start!
0 comments
I switched the base ROM from the home cart to VS. Pinball, the arcade version for Nintendo's VS. System.
This decision was made for a few reasons:
- double the program and graphics space
- better looking sprites from the get-go
- high-score initials, an end-of-ball bonus, and operator settings
- it's what Nintendo would actually have put in an arcade
It runs on NES hardware with a few small changes, since the VS. System uses the same chips wired a little differently.
The theme changed too. "NES-themed pinball" became "what if Nintendo had built a pinball machine in the mid-80s?" The look comes from their arcade cabinets of that time: PlayChoice-10, Punch-Out!! and the VS. System.
First boots were a mess. Right title and garbled playfield, or the other way round. The emulator recognizes the original ROM and quietly fixes its settings, but change one byte and it stops recognizing it. Every build now describes itself fully in its header.
Some VS. Pinball screenshots have a pink title logo instead of blue. I like pink, so that's what this machine gets.
0 comments
The ROM was the make-or-break part, so it came first. Pinball seemed fairly simple compared to other NES games.
- Rules first. Pulled the full ruleset out of my own cart dump.
- M0: confirmed the dump was good.
- M1: took the code apart and rebuilt it byte-for-byte identical to the original.
- M2: labeled the main parts: the frame loop, controller reading, sound, score display and game modes.
- M3: three experiments. A two-byte patch dropped every serve straight into the Mario bonus stage, and it played fine on its own. Freezing and teleporting the ball showed how the rules react. Removing the ball physics entirely left the game running without crashing.
So the plan holds: keep the sound, score display, art and bonus stage, and make the rules react to real switches instead of the video ball.
0 comments
Most of the first day went to ruling out bad ideas before they cost anything.
- No switches through the controller ports. They can't handle a playfield's worth of lights and coils. The cartridge becomes the I/O board: the NES reads and writes the playfield through spare addresses on a custom cart.
- A small chip on the cart catches fast switch hits. A ball can close a switch faster than one frame, so it scans the switches about 1,000 times a second and queues the hits. The NES picks them up every frame and makes every scoring decision itself.
- Flippers never wait on the NES. The buttons fire the coils directly, like an actual machines. Slingshots and pop bumpers work the same way. The NES only senses that they fired.
- The flipper and START buttons look like a normal controller to the NES, so the bonus stage and menus work with no code changes.
- Separate power supplies for coils, lights and logic, so a coil firing can't reset a 40-year-old console.
- Battery-backed memory on the cart for high scores and settings.
- The bonus hole is a real saucer. The ball waits there while the bonus stage plays on the CRT.
0 comments
As the title says, this is a project designed to be a "what-if" scenario where Nintendo made their game Pinball for NES as an actual pinball machine. I plan on using a real NES as the brains of the cabinet, both for convenience and ease of access but also because it allows it to stay semi true to Nintendo's real arcade hardware as the NES and their arcade boards are similar if not near identical when it comes to power and functionality. This also allows me to use the original Pinball ROM as a base for scoring and switch events utilizing a custom harness either into a dedicated cartridge or the NES's expansion port.
There will be a CRT in the backbox acting as your score field and as a display for the Mario breakout style minigame, which I plan to keep fully functional. With this, I'm also able to allow play of not only the physical playfield like any normal pinball machine, but also the ability to play the original Pinball ROM on the display by using the flipper buttons as controls. I also would like to add in a top 5 leaderboard that's separated from the physical pin and the virtual pin.
***The software side of this project heavily utilizes Claude Opus 5.5. I am not a coder and I have no interest in learning reverse engineering, ROM modification, or custom software. All artistic designs, layout, build plans, and artwork is done by hand and has no influence or decisions made by Claude. This is just a fun project for me to work on, no monetary bennefits are to be had***
