This is my new retro game console. It's a kit I bought and put together, and it's like
a trimmed down Nintendo Switch, but—I can do whatever I want on it, since it runs on
a Raspberry Pi! I put a brand new Raspberry Pi Zero 2 in it, and if you missed my review
of the Zero 2, go check out that video.
RetroPie lets me play all the games I played when I was younger, and the system it uses
under the hood, RetroArch, adds on tricks like screenshots, recording, and even saving
games so I can finally finish the games I only had for a few days from Blockbuster!
All right, before I date myself too much, here are the specs: this is the Null 2, and
mine is powered by a 4-core ARM CPU, with built-in WiFi and Bluetooth. It has a USB-C
port to charge this 1000 milliamp-hour battery, it has a 3.2" screen, stereo speakers, and
wow, look at that! It even has a headphone jack!
It's about the same size as my iPhone, and apparently there's still room for a headphone
jack. And heck, I can SSH into this thing and get full control of the software! No iPhone
or Switch does that! I tested all the games I owned, and found
that any of the old NES, Super Nintendo, Sega Genesis, and Playstation 1 games would play
at 60 frames per second. Nintendo 64 games were sometimes playable, but could act a bit
weird at times, and sound was a bit choppy.
But you know how they say, "it's not the destination, it's the journey"? Well, let me show you my
journey. I ordered the kit on Tindie when it was in stock, and ordered a battery, and
pre-cut acrylic case parts separately.
I already had a microSD card and a Pi Zero 2, but if you didn't have those, you'd be
looking at a total cost of around $150. Maybe a little more if you need to buy a soldering
iron, kapton tape, or acrylic bonding cement.
If you can get access to a laser cutter, or can print a 3D printed case, you can save
a few bucks on the case too.
Anyways, I got all this stuff in, and when I laid it all out... it's a lot. All these
parts are gonna end up in the final build, so from this point on, it's just a matter
of soldering and fitting everything together.
The first step, and this is also the one that gave me the most grief, was installing the
Pi Zero on the main Null 2 PCB. You have to put some of this fancy yellow tape, called
Kapton, on the back of the Pi. This tape is really cool because it can withstand very
high temperatures and it's non-conductive. There are a few parts of the build where you
use kapton to protect things from short-circuiting.
Anyways, I put the Pi in precisely the right location, over a bunch of little solder pads,
then I did something I've never done before. I'm calling this 'cup-hole soldering'. Basically,
I had to fill the GPIO pin 'cups' with solder, cross my fingers, and hope the solder made
solid contact with the pad below, on the board.
This technique saves a couple millimeters of precious vertical height, since standard
GPIO headers have a little plastic spacer in them, so I get why it's used, but it's
not as easy as soldering castellated pins, like these little ones you see around the
edge of the Pico. They're a lot easier for this kind of 'surface mounting', where you
solder a flat PCB on top of another one.
Anyways, I'm getting off track. I started out using the technique suggested in the build
guide—using a thin pencil tip on my soldering iron to get down into the hole and heat it
up before applying solder. But I found that technique to be a bit scary. On the first
pin I soldered, I'm pretty sure I overheated the joint, and risked lifting the pad on the
Pi. If I did that, there's a good chance I'd have a broken Pi!
So after soldering a few pins that way, I switched to my medium chisel tip, which holds
a little more thermal mass—that makes it easier to quickly heat everything up and fill
in the cup with solder. I just touched it to the top of the GPIO hole for a second,
pushed in a little solder, and moved on to the next one.
I pulled out my trusty old multimeter to test the Pi's connections. Fun story: I made this
old Tenma meter from a kit, back when I was a kid! It's still my favorite meter, even
if it doesn't have any fancy bells and whistles.
Plus, don't you love that fancy buzzer sound?
I tested all the test pads to make sure there was continuity, and wouldn't you know, the
ground pad, that first connection I soldered, wasn't connected. Even re-flowing the joint
didn't help.
I was a bit flustered, but ultimately 'bodged' a ground connection to another pin on the
Pi. You might've seen little wires like this on other projects I've shown on the channel.
Basically, if you make an oopsie in hardware design, or if you completely burn a solder
joint to a crisp like I did, you can 'bodge' a connection using enameled copper wire, and
sometimes you get lucky and it fixes your problem.
And I counted my lucky stars, because it did end up working.
At this point, it was a matter of soldering on all the other components. For this tiny
surface mount resistor, just put a little flux on the board, use tweezers to place the
thing, and then put a little solder on it. Done!
The USB-C power port was also a 'cup hole solder' job, but I was a lot more confident
after soldering the Pi.
The headphone jack board was a little weird, since you had to control the height by manually
prying some of the header pins up, then snipping them off, but it worked out okay in the end.
Just be careful when you snip off the header pins, they go flying in any direction, so
be sure to wear safety squints!
There's a variety of buttons, and besides the select and start button, they're pretty
easy to solder on. For some reason those were the most annoying small components to solder
by hand, but I got them working. Mostly.
At many points during the soldering process, I'd grab a cotton swab or paper towel and
rub on some isopropyl alcohol to clean up the board; this is especially important to
clean up excess flux, since it could be both conductive and corrosive.
I covered the back of the screen in kapton, and surprisingly, soldering the tiny surface
mount ribbon cable directly to the PCB was pretty easy. I put down some flux, then put
on a little extra solder as I passed the iron over the pins. I used solder wick to clean
up a couple bridged connections, by pulling a little solder off where pins were accidentally
joined together.
When I put on the battery, I was extra careful to keep the red and black wires from shorting.
I've dealt with some pretty gnarly battery issues in the past, and I don't like the idea
of accidentally starting a battery fire in my workshop!
I soldered in the battery, tested I was getting about 3.7 volts through to the Pi, and went
to my computer to flash the Null 2 image to a microSD card.
I did that, plugged the card into the Pi, and switched on power. The display lit up,
so that was nice... but nothing else happened. The Pi didn't even light up it's little green
LED at all. So something was wrong.
And for the first few hours I suspected it was something I did with my soldering. I tested
and re-tested every connection. I even checked resistance everywhere, making sure there wasn't
some weak-but-barely-connected joint.
And there wasn't. I was about to give up, but luckily I decided to try flashing normal
Pi OS. I did that, and switched the Null 2 on, and bingo! I got a flashing green LED,
meaning the Pi was booting.
But Pi OS is missing a few things: the Null 2 image had special settings and software
so it could work. Things like the display and buttons all require customizations that
aren't there on Pi OS.
But at least I could log into the Pi over SSH, since WiFi was working!
I spent some time figuring out how to get an open source driver for the display working,
and after spending some time compiling it with the right options, it started displaying
the Pi's desktop.
On a roll, I also got audio working since the hifiberry-dac software is built into Pi
OS. All I had to do was enable it and I got sound. There's actually another step to make
it so I can control the volume, and I have that documented in my build blog post—that's
linked in the description.
But the last thing was mapping all the buttons so they'd work in RetroPie, and using a script
from Adafruit, I got that going too.
But long story short, I kept getting errors compiling RetroPie on the Zero 2, and that
process takes hours, so I gave up on trying to build from a fresh Pi OS image.
But since RetroPie publishes their own image, I tested that next. It still wouldn't have
the drivers for the Null 2's LCD or sound card, but if it works, I wouldn't have to
compile the software by hand. So I grabbed the latest stable image from
RetroPie's website and loaded it on the card.
The Pi booted, but I noticed a major problem: it never showed up on my network, so I couldn't
log into it over SSH and get the screen, sound, and buttons working. It'd be a pretty useless
paperweight without any of that!
So I started looking into it, and after a lot of research found out the WiFi chip on
the Pi Zero 2 is actually slightly different than the one used in the Pi 3 and original
Zero W, and because of that, the driver for it wasn't being loaded.
Luckily, there's also a weekly build of RetroPie that I flashed to the Zero 2, and it worked
perfectly. After 30 minutes compiling everything again,
I had a working screen, sound, and buttons on the weekly RetroPie image!
And if you want to see exactly what I did, check out the blog post linked in the description.
At this point, I found out the start button wasn't working. Apparently I messed up the
solder job on the tiny surface mount button, so I re-soldered it with a little solder wick
and flux, and then it started working.
Now that I had a working board, I moved on to the case. I chose to go with the clear
acrylic case, but there are also files for wood or 3D printed cases.
There were a couple interesting parts putting together the case. I'm pretty new to working
with acrylic, and didn't realize it was so easy to 'weld' it together. There's this fancy,
and slightly toxic, Weld-on cement. I bought this little bottle that comes with an applicator,
and the first problem I ran into was safely transferring the Weld-on from the canister
into the applicator.
I didn't want to try just pouring it, so I found one of my kids science sets and grabbed
the plastic syringe out of it. I used that to fill up the applicator, then realized just
how liquid the stuff is. If you just tip the applicator bottle, the cement starts coming
out—no squeezing required.
And at that point I also realized the cement acts very well as a paint remover—it dissolved
any of the printed pattern that it touched on my cutting mat!
Anyways, you live and you learn, and I spent the next few minutes squirting a little weld-on
between the different button parts.
After the buttons were done and left to dry, I cemented the various parts of the back case
in place. It was critical to get the alignment as close to perfect as possible, otherwise
the PCB won't fit in, or some of the buttons get misaligned.
In fact, my alignment on the bottom piece was a tiny bit off, so later I had to sand
down the inside of the system button, which was a bit annoying.
But after that, it was a matter of dropping the various switches and bumpers in place,
then dropping the PCB into the rear case. Luckily besides that system button, everything
fit together perfectly!
I worked on fitting the top cover on, but before final assembly I had to sand down the
bottoms of the AB and XY buttons, and the D-pad. It comes with thicker acrylic in case
you want to use physical buttons, but since I was using the rubber pads, which are a little
taller, I had to sand down the buttons.
I got everything assembled, then put in the final four screws that keep it all together.
Make sure you don't overtighten these, they're made of plastic so they'll strip easily!
After snipping off the excess, the hardware build was complete. And love the look of the
thing. I remember in the 90s and early 2000s a lot of devices had clear or translucent
plastic, and this really hearkens back to that era. Everything nowadays is solid metal
or boring plastic. What happened to the bondi blue iMac vibes?
Well, nevermind, it looks great, but now it was time to start putting it through its paces.
I plugged in a USB-C charge cable, and waited for the battery to hit 100%, then I started
customizing RetroPie.
First, the default theme is designed for large, HD displays. Some interface elements are practically
invisible on this tiny display. So I found a theme called TFT that I could install in
RetroPie's 'ES Themes' settings.
Next, I wanted to see cover art for the games I loaded up over SSH, so I went into RetroPie's
scraper and let it grab cover art.
The main menu was looking really nice now, and I wanted to see if my muscle memory was
any good from playing Paperboy decades ago. I'm not sure why, but of all the games I remember,
Paperboy, objectively one of the most mundane titles on the Nintendo, was the one I tried
first.
It was just as hard to deliver papers to subscribers' houses as I remembered, but just as fun to
throw papers at everything else.
I also tested out a few of my other favorite retro games, classics like NBA Jam, Super
Mario Brothers, Sonic, and Excitebike.
And to get a better idea of overall performance, I also tested some Nintendo 64 and Playstation
games like Super Mario 64, Wave Race 64, and one game I spent way too many hours playing,
Tony Hawk's Pro Skater 2.
Overall, almost every game from the 16-bit era and earlier works perfectly. Most of those
games also ran well on the Pi Zero, but they're all running at 60 frames per second without
a problem on the Zero 2.
From the 32-bit era, Playstation 1 games are hit or miss but mostly run well. Gran Turismo
2 would load up until the point of starting a race, then it would crash.
Tony Hawk Pro Skater 2, on the other hand, played great, and it actually works well with
the simple D-pad built into the Null 2. I had to kind of pull myself away from it; that
late 90s punk-rock soundtrack is addictive.
Anyways, the only games that weren't as fun to play were on Nintendo 64. And spotty N64
performance isn't limited to the Zero 2; even the fastest Pi 4 has trouble sometimes. But
some games, like Super Mario 64, are playable, especially if you set up an external Bluetooth
controller.
And if you're wondering why the Zero 2 still struggles, emulation is more often a GPU-heavy
task than CPU-heavy. Look at htop while I was playing some of the PS1 and N64 games:
the CPUs are pretty lightly loaded.
Meanwhile the GPU is going full-tilt, and while the Zero 2's CPU is 2 to 5 times faster
than the original Zero, the GPU is still a VideoCore IV series, and is only maybe 25%
faster than the one in the original Zero W.
It does make a difference, using the Zero 2 instead of the older Zero. But don't expect
miracles in terms of performance. But enough about emulation, after using the
Null 2 for a few weeks, I have some thoughts.
The thing I liked most was how compact it is. There's not much wasted space, and yet
the Null 2 is still just large enough that playing games for more than a few minutes
doesn't get uncomfortable.
I also like the fact that all the components besides the PCB are standard and off-the-shelf
and if I need a replacement, I could get it pretty fast.
The build guide was also very thorough, though there are few parts like the cup-hole soldering
and the acrylic cement that were new to me and it would've been nice to have a video
or animated clip of how to do it.
I also like that this build has stereo speakers. At least with games like Sonic the Hedgehog,
it actually makes a big difference hearing everything in true stereo and not just mono.
Plus that headphone jack let me experience a lot of old games in a way I'd never played
them. I'm actually amazed how good the sound was on early Genesis and Super Nintendo games.
I've only ever heard them on the tiny speaker in our family's cheap 13" TV.
The thing I liked most about the Null 2—and Pi-based gaming in general—is everything's
open source. I can log into my game console and manage it. I can copy files to and from
it. I can accidentally break it if I want, and fix it too. That's something you'll never
get out of the box on a Switch or a popular smartphone.
Battery life is decent, but not stellar. I get about 2 hours of play time on a full charge
with WiFi and Bluetooth on. Charging it from empty takes about an hour and a half.
But all isn't roses, there were a few things I didn't like. One of the most annoying things
early on was how the Pi's HDMI and USB ports are completely inaccessible. It would help
a lot for debugging, or if I wanted to use a USB controller, or dock the Null 2 to a
TV over HDMI.
The way the Pi mounts to the board also means it's extremely difficult to replace the Pi.
For a device that's otherwise repairable, that's one glaring flaw. I'd trade off a little
thickness to have a device that's easier to repair.
There are a few other annoying things, like no backlight brightness control, a hard-to-access
microSD card slot, and no battery life indication... But in the end, this is a device made for
fun. And I'm happy to overlook those flaws because I've had a lot of fun: fun building
it. Fun playing on it. And I'm gonna have fun seeing my kids experience the first few
games I ever played on it.
Terry Pratchett once said, "My programming language was solder."
After putting this thing together, I can confidently declare my programming language isn't solder.
But hey, it works! And since I learned a few things and had fun, that's what counts. The
journey was every bit as rewarding as the destination.
The Null 2 is available on Tindie—at least... sometimes—batches sell out pretty quick
so sign up to be notified if you wanna build your own. It works with either the Pi Zero
W or Pi Zero 2. Until next time, I'm Jeff Geerling.