Emulation is the process of running older software on newer, incompatible hardware, but Tom Murphy VII, a computer scientist from Pittsburgh, PA, wanted to turn that process on its head by ‘reverse-emulating’ a SNES.

The basic idea was to run SNES games on a NES, to tell a joke based on what Tom calls ‘improper hierarchy’. It’s not funny to run old software on new hardware, because software is meant to get better over time and older hardware is meant to become obsolete. However, Tom contends that it is funny to run newer software on older hardware, because that’s just an absurd thing to do, or an example of ‘improper hierarchy’.

Tom explains the many technical issues he had to solve in this fascinating video:

Playing SNES games on an unmodified NES console

The crux of Tom’s reverse-emulation was to somehow fool an unmodified NES into running the SNES launch title Super Mario World, which he achieved by embedding a Raspberry Pi 3 into a NES game cartridge. The Pi emulated the SNES game, but then had to convert the graphics into a form that the NES hardware could display.

As Tom clarifies for us, the Pi is acting “kind of like a downsampler, although the SNES pixel resolution is actually the same as the NES, so it’s not downsampling in that spatial sense.” Instead, the Pi has to convert the larger numbers of colours in the SNES game into the limited colour palette of the NES. “I prefer to think of it like an absurdly advanced ‘memory mapper’ within the cartridge,” Tom tells us.

While Tom admits that he might have had an easier build by using a bespoke microcontroller, he reveals that he used a Raspberry Pi so “I can have my whole development environment right on the device.” Rather than “swapping chips into a programmer, or even attaching an ICSP cable,” Tom continues, the Pi “really shortens the edit/compile/test cycle.”

Here is a making of Video that explains the project in more detail:

See also:

Retro gaming galore: Picade Console reviewed

Rediscover Retro Computing in The MagPi #67

Easy retro gaming on a Raspberry Pi with Lakka and NOOBS

Code Pac-Man in Python