Reverse emulating the NES to give it SUPER POWERS!
suckerpinch12 HN recommenders · 2018–2025
1.1M views · talk · evergreen · Uploaded 2018-05-29
Tom Murphy (suckerpinch) shows 'reverse emulation', using a Raspberry Pi in an NES cartridge to give an unmodified NES new abilities such as playing SNES games. The video starts in a strange way and gets stranger.
Praised as a brilliant, deadpan and inventive hardware hack, and a good starting point for Tom7's videos.
1:25:348 Bit & '8 Bitish' Graphics-Outside the Box
GDC Festival of Gaming
24:39SM64 - Watch for Rolling Rocks - 0.5x A Presses (Commentated) [OUTDATED]
pannenkoek2012
6:538-bit computer update
Ben Eater
27:25“Hello, world” from scratch on a 6502 — Part 1
Ben Eater
1:01:07The Ultimate Game Boy Talk (33c3)
media.ccc.de
31:37How Crash Bandicoot Hacked The Original Playstation | War Stories | Ars Technica
Ars Technica
5:58MarI/O - Machine Learning for Video Games
SethBling
53:51The Engoodening of No Man's Sky
Internet Historian
20 comments from Hacker News
From Deconstruct: Nabil Hassein: Computing, Climate Change, and All Our Relationships [LINK] Tom 7: Reverse emulating the NES to give it SUPER POWERS! [VIDEO]
People still run Commodore 64s. There are demo scenes, old hardware enthusiasts that squeeze crazy performance out of old hardware, even a guy who use a Raspberry Pi to emulate an NES cartridge and get his unmodified NES to play SNES games: [VIDEO] Old hardware can often be repaired. If you told a C64 user back in the day his machine would break in two years, he or she wouldn't shell out the $ on it, but today people buy $400~$800 cellphones that turn into garbage.
Note that some of these features require special hardware support in the cartridge. The NES cartridge connector exposes CPU and PPU (picture processing unit) pins, and the simplest games ("NROM") connect ROM chips directly to them. More advanced designs add an additional memory management controller (commonly called a "mapper"): [LINK] The animated backgrounds are accomplished by the mapper bank switching the character (tile) memory. The parallax scrolling is accomplished by the mapper counting scanlines and generating an interrupt when the correct scanline is reached, so the CPU can change the PPU scroll registers mid-frame with the correct timing. Later mappers like the the MMC5 could precisely time mid-frame bank changes to support more than 256 tiles on screen at once, and to support 8x8 attribute blocks instead of 16x16. The ultimate mapper feeds arbitrary data to the PPU to simulate having a bitmapped display with 8x1 attribute blocks (the PPU only reads attribute memory once every 8 pixels, so that's a hard limit). Tom Murphy implemented this with a Raspberry Pi (which isn't ideally suited to the task, so there are timing imperfections causing graphical glitches, but theoretically it could be done without them): [VIDEO]
Along these lines, Tom7 invented* 'reverse emulation' which effectively uses a Raspberry Pi as a co-processor, allowing him to run [spoilers ahoy!]an SNES emulator on an NES.[/spoilers] The talk is brilliant: [VIDEO] * - as far as I know...
LOL... from "Reverse emulating the NES to give it SUPER POWERS!"[1] (which is insa^Wbizza^Wa very creative hack): "The cartridge is the dual of the Nintendo." [1] [VIDEO] edit: for a very impressive variation on the SMW "joke" in [1], I recommend this[2] video of TASbot streaming Skype realtime to [2xNES, SNES+SuperGameBoy] through the controller ports . [2] [LINK]
This reminds me of this video of a "reverse-emulated" NES using a raspberry-pi: [VIDEO] (you can skip to 3:35 if you're not interested in the jokes). The author further explains how he did it in this "making of" video: [LINK]
In that case, you might like one of tom7's many wonnderful videos [0], "Reverse emulating the NES to give it SUPER POWERS!" where he hacks a real NES cartridge with a raspberry pi with an emulator, then figures out how to map all of the data into NES sprites, etc. As usual for his videos, it's absolutely wonderful. [0] [VIDEO]
Well, then do I have the video for you: [VIDEO] Bit of a spoiler to post it in this context, but still worth it.
Well, that's been done also: [VIDEO] Also, commercial 3D SNES games sometimes had to bring their own coprocessors, so it's fully in line with tradition: [LINK]
What a great article. If you liked this, you'll likely also enjoy [VIDEO] I'm not giving a summary since that video is most fun to watch if you don't know the punchline in advance. (No relationship to the video other than that I liked it.)
Tom7 is brilliant for anyone that hasn't seen him before. His Reverse Emulation video ( [VIDEO] ) and Weird Chess Algorithms ( [LINK] ) are a must watch. His dead pan delivery coupled with the ridiculous amount of effort he puts into things that don't _really_ matter is honestly inspiring.
You will love Tom7/suckerpinch's stuff then, if you don't know him already. Here's a good one for the start, though really, they are all fantastic: [VIDEO]
Heh, it reminds me of this gem: [VIDEO] which does something similar... using a modern device to give old devices essentially capabilities beyond what they should be able to do.
Great YouTube channel. Here’s a fun video where he integrates a raspberry pi into a NES cartridge to do all kinds of crazy things using the NES’s native hardware. Spoiler alert: full-motion video of the rickroll video is not the craziest thing he manages to pull off. [VIDEO]
Anything that catches your eye is good but my favorites are: 30 Weird Chess Algorithms: ELO World [LINK] Reverse Emulating the NES to give it SUPER POWERS! [VIDEO]
When seeing Prettier as a software tool, to consider Prettier more “foundational” than (e.g.) TypeScript or V8 does seem like an inversion of hierarchy [1] – but viewed as history, as a practice, Prettier’s accomplishment of making automatic code formatting (à la `go fmt` or Python `black`) widespread in JavaScript, the lingua franca of programming, is foundational. All that time spent staring at code that could have been more readable, or writing style guides and reformatting code, is now spent doing what we were trying to do in the first place. And now, speeding up the time we wait to apply formatting or check it in CI by rewriting it in Rust™ gives us a bit more of that time back. :) [1]: [VIDEO]
>It uses a 16mips pic (64hz 4-cycle) driving 1K of an 8k dual port ram. This is much closer to the "Reverse Emulation" of the NES that [VIDEO] did than playing a movie on the actual device. Using the original hardware as nothing more than an RF output interface is clearly not the same work, though just like in the reverse emulation of the NES, it is still a neat thing. The reason video on original IBM 5150s is so neat to most people is that it could have reasonably been done in it's heyday if we could take knowledge and algorithms back in time, which the reverse emulation versions could not.
That you can plug legacy x86 extension hardware into the board, and have it find a bug-for-bug-compatible x86 system to talk to on the other end. A major use-case being embedded systems — e.g. industrial control systems. These systems use a combination of 1. custom hardware — usually in the form of peripheral cards — built to speak old legacy x86-only bus protocols like ISA; and 2. old custom software, designed to run on an x86 CPU (usually in DOS), and to speak directly to that hardware over that bus. You can't just find some USB adapter for the old hardware's bus, because the software won't take it. And you can't just replace the old software, because the new software (whether a newer version of the old software, or software from another vendor) won't control the old card; and the card speaks an even lower -level (probably analogue!) protocol specific to the industrial system. Often, on these old systems, the custom peripheral card is still working due to it being solid-state (and thank god for that; the card's vendor is probably long-gone!) but the old x86 box the card lived in for the last 40 years is dying of various old-computer maladies — or just can't be made to fit into a new form-factor forced by a newer generation of the industrial system being controlled. In such a case, you ideally want to find a new embedded host system, made of new parts that will last you the next 40 years, but which can nevertheless still talk in very specific, custom, low-level ways to your
"Cartridge that works on a stock NES" is muddied waters now, since a cartridge can contain a full computer that feeds data directly to the PPU bus, while the main NES CPU mostly runs idle. See "DOOM on NES": [LINK] or Reverse emulating the NES to give it SUPER POWERS [VIDEO]
Tom7 is one of my favorite people, he is hilarious, has an amazing technical depth, and so much whimsy to go along with it. I'll proselytize for him all day! relevant video: [LINK] less relevant, but I think my favorite: [VIDEO]