There are quite a few projects out there that stuff a Raspberry Pi inside a Nintendo Entertainment System case to be able to play emulated NES games. My friend Shane and I decided to do one of these projects. But we didn't want just another RPi emulation system. We wanted something a little more unique. So a plan was hatched to increase the nostalgia factor by not only interfacing with NES controllers, but also making use of NES cartridges.
In order to use an RPi inside an NES console, we needed to figure out how to expose necessary connections - HDMI and power. So off to eBay we went and ordered some mountable connectors. Having decided not to touch the original NES connector locations due to space and cabling limitations, we opted for making new holes in the case, starting with templates:
We explored different options for hole locations, as well as the possibility of adding generic USB ports:
The board sitting on top of the RPi is the ControlBlock, which we're using for both power management (to be able to safely power on and shut down the RPi) and for connecting the original NES controllers.
After practicing cutting into some very melty plastic, we were relieved to discover that the NES case plastic wasn't nearly as melty and allowed for relatively painless drilling and filing. The results were satisfying:
The connectors we got from eBay were then easily secured using screws:
The vertical USB connector is used for power. We planned to add one or two USB data connectors that would have been horizontal, but that didn't get into version 1 of Project PiNES.
Once everything was hooked up, we tested the system:
I mentioned earlier that we wanted to make use of NES cartridges. Since both console and cartridge pins are often worn down and unreliable, we decided to come up with an alternate way of using the cartridges. As can be seen in the above photo, there is an NFC reader (another eBay purchase) in the middle of the NES. We opened a couple of the NES cartridges we have and put NFC stickers inside them. I wrote some Python code to interface with the NFC reader and simply run the game ROM file name that is written to the NFC sticker.
This is what the whole thing looks like inside:
And here it is assembled, with an opened cartridge that has an NFC sticker placed inside:
The Raspberry Pi 2 Model B inside the NES is running Arch Linux, tweaked to minimize boot time. The emulation software is RetroArch. However, instead of using the "standard" front-ends like EmulationStation, I wrote a custom one. It's designed specifically to have a "retro" look and feel, and it's relatively lightweight. You can see it in action here:
The custom front-end was written using pygame and, since this is my first real attempt at a Python project, I'm not exactly proud of how the code looks. It does its job, though.
We may add to this project some day if we find the time and motivation. Those USB data ports would be nice and, since they would allow for USB controllers with more buttons to be connected, more advanced game consoles could be emulated. Or maybe next time we'll upgrade to an SNES case!