I enjoy putzing around with homebrew / homemade handheld gaming devices.  I've built Raspberry Pi Zero systems inside a classic Gameboy shell.  I've pieced together a Freeplay Zero in a Gameboy Advance shell.  And I've purchased a premade Anbernic RG-350 straight from China.  They all have their pros & cons.  I just wanted to summarize some of my experiences here.

Classic Gameboy DMG-01 powered by Raspberry Pi Zero

  • Good chance to learn some basic electronics skills
  • With enough imagination & Google-fu, you can include just about any features you want
  • Robust community around this type of project
  • With any version of RetroPie released since about 2017, the Raspberry Pi Zero isn't quite powerful enough to run many Super Nintendo & Gameboy Advance games at full speed.  A Raspberry Pi3-based handheld can run nearly all of these games at full speed (in addition to many N64 or Playstation games), but they typically cost over $200, and require big batteries & some sort of cooling solution
  • Can be more expensive than you expect (my first Pi Zero cost about $250 to build; my last around $125)
  • Stuff like this that you make from scratch has a tendency to fall apart with extended usage

This was my first foray into handheld emulator devices; and really my first experience with soldering using bare resistors, capacitors, and the like.  The Sudomod forums, run by wermy, were vital in this entire process.  I got to learn some extremely basic electronics skills while the homebrew Gameboy emulator community grew and matured into what it is now.

The basic idea behind these is: you take an aftermarket Gameboy shell, Dremel away some pieces so you can fit a 3.5-inch LCD & more buttons, and power the whole thing with a Raspberry Pi running RetroPie & various electronic components for sound, power, etc.  Then you can use it to play any of the classic Super Nintendo, Gameboy Advance, and older games you can get your hands on. (For games that you legally own.  Of course.)

When I built my first two systems, everything was pieced together with individual wires, resistors, and capacitors.


The final products were a tangled rat's nest that I could barely squeeze the shell around, and the rear trigger buttons weren't terribly reliable.  The first of these systems no longer actually functions, and I should probably dismantle it before the battery explodes or something.  The second was gifted to friend, as as far as I know, is still playable.

By the time I built my third system, there were cheap & efficient premade boards that I could basically just solder onto a Raspberry Pi Zero, slap into a modded Gameboy shell, and call it good.  A lot of design issues like flaky trigger buttons had already been worked out by this time.  I used a GPIO Assist Ultra kit from Pocket Adventures.  This has a USB hub, USB soundcard/amp, battery monitoring, and safe power-off switch all built-in.  These were all components that I previously had to cobble together with varying levels of success.

Despite requiring very little hacking to assemble, I still managed to screw this kit up quite a bit before finally getting it working.  I had some bad solder joints between the GPIO Assist & the Pi Zero which caused odd, intermittent sound & power issues.  Once that was worked out (and after repairing the physical damage I did to the board with my bad soldering), I was able to add a few custom touches, like a separate hotkey button for administrative functions and a PWM screen dimmer using an ATTiny chip running Arduino.

In the early days of RetroPie handhelds, there weren't many good themes that were viewable on a 3.5-inch screen.  So, I made the GBZ35 themes, which seem to be fairly well-used on RetroPie handhelds, so that's kinda cool (though, with user-friendly options like the Retroflag RPi making this hobby more popular, there are now much fancier options becoming available).

Freeplay Zero by FreeplayTech

  • You can build these with ZERO soldering (you'll still need to do some modifications on an aftermarket Gameboy Advance shell)
  • Many people prefer the Gameboy Advance form-factor, particularly with its less fiddly solutions for the L & R shoulder buttons (vs. the traditional Gameboy)
  • The GPIO-based screen (instead of composite-based like my Gameboy builds) is very crisp & clear
  • A prebuilt SD card image from the manufacturer saves you from some of the more fiddly configuration you'd have to do on more-DIY kits
  • The Pi Zero still suffers from slowdown on SNES and newer; and with the more CPU-intensive type of screen used, you can also see screen diagonal tearing. (Buying the Freeplay CM3 fixes most of these issues, but costs an additional $100)
  • Smaller screen than the 3.5" LCD you can fit in an original Gameboy

After my GBZ35 RetroPie theme became fairly widespread, I was contacted by Ed Mandy from FreeplayTech to create a RetroPie theme that he could preload onto his systems.  In return, I got a prototype Freeplay Zero kit to tinker with.  I'd say that was a fair trade.

Setting up a Freeplay handheld is fairly straightforward.  Buy the kit and a Gameboy Advance shell, cut away some pieces from the shell, and put it all together.  No soldering necessary (provided you use a Raspberry Pi Zero WH and not a Pi Zero W).

It's a really nice unit that's fun to play; and newer iterations have made the buttons a lot nicer to use than the original clunky X & Y buttons were.  However, it still runs RetroPie, and suffers some of the performance issues inherent with that platform (if you're using a Pi Zero instead of the Pi CM3, SNES & Gameboy Advance games struggle to keep up).

Anbernic RG-350

  • Plays almost all SNES & Gameboy Advance games at full speed.  Can even play most PlayStation games at full speed
  • Really well-designed device with great controls and a great screen
  • Potential to see even better performance & more features with software updates (which may or may not actually come to fruition)
  • Cheaper & faster than most Raspberry Pi options (similar price as the Retroflag RPi, but better performance, features & build quality)
  • Buying from Anbernic's AliExpress storefront in China takes a couple weeks or more to ship, though you can pay a hefty premium to quickly get one from Amazon.
  • Cheap Chinese ElectronicsTM like this can be a bit of a crapshoot.  Some advertised features simply aren't here (e.g. HDMI audio/video output), and hardware longevity may not be the best (too early to know for sure, though I've seen occasional funkiness with my unit's display).
  • Still a fairly techy device, and is not particularly user-friendly if you're just expecting to take it out of the box and play.
  • The development community is a bit disorganized, and is split into multiple groups unwilling to work with each other.  It's hard to find the newest & best software you should use on these units.

I've been using the RG-350 (Xbox One controller shown for scale) for a couple weeks now, and it's really a joy to play games on.  It's technically based on a several-years-old device (the GCW-Zero), but software development has recently gotten a jumpstart due to the RG-350 & similar devices released around the same timeframe.  

Unlike the Pi Zero, it plays SNES & Gameboy Advance games almost universally at full speed (in part because older, faster, but technically less "accurate" emulators still work on this device).  It even plays most PlayStation games at full speed; and even has all the features of a DualShock controller (including rumble).

Software development is a bit fractured, with some people separately developing on the Dingoonity Forums and others on Discord.  However, there is hope that further software development could someday bring things like improved performance and actual delivery of some of the advertised features like HDMI output.

Here's a wiki to help with some of the setup & configuration on the RG-350.

To stay somewhat-not-chubby, I run.  When I run, I sweat.  When I sweat, I sweat A LOT.  And as a result of all this, I apparently straight-up murder Bluetooth earbuds.

So, to keep track of my disgusting attempt to find Bluetooth earbuds that can survive my workouts, here's an ever-updating list of "sweatproof" earphones that have suffered an untimely death due to my body excretions:

Jaybird X [Dead after just over 1 year]

I got these back in 2016 for $58.  That's a sweet deal for anything from the Jaybird X line of earphones.  After struggling to get these earbuds to stay put in my ears, I finally found that Comply tips (or their equivalent knock-offs) kept them stuck in my head.  They had decent sound, but nothing special.  They had no problems connecting to my phone; they're just some okay earbuds that died a sweaty death.  Luckily, they came with a lifetime warranty, which I used to get my next earbuds:

Jaybird X2 [Dead after 9 months]

In 2017 when my OG Jaybird Xs died, the "X" line was no longer being manufactured.  As a result, Jaybird sent me the newer X2s as warranty replacements for the X.  For all intents & purposes, they seemed identical to the original X earbuds.  Unfortunately, they didn't live quite as long.

(2 pair) Jaybird X3 [Dead after 1 month & 8 months]

These were Warranty Replacement Rounds Two & Three for my original Jaybird Bluebud X earbuds.  The Jaybird X3 looked more streamlined than the prior generations.  They also used an annoying proprietary charging adapter, now.  Audio quality seemed better due to fancy EQ software you can install on your phone.  Connection quality took a huge nosedive (if using them outdoors, Jaybird says you need to keep the earbuds within 2 feet of your phone to keep the connection from dropping).  After using my first pair for a couple weeks, I noticed that overnight the battery would drain completely while they were powered off.  Then, eventually, they died like all of my previous Jaybirds.  After my second pair of X3s died in similar fashion, Jaybird (now owned by Logitech) said that I'd exhausted the limits of my original "lifetime warranty", and I was on my own.
So, after killing a fleet of "expensive" Jaybird earbuds, I moved on to the assortment of budget earbuds from Amazon.  Given my propensity to ruin more expensive earbuds, I decided to go easy on my wallet and ruin some cheaper ones.  An extremely annoying thing I've noticed when wading through the selection of budget Bluetooth earbuds on Amazon is that every single product is absolutely bombed with fake positive "reviews", which makes it difficult to find the real gems.
Taotronics TT-BH024 [Dead after 3 weeks]

For a year, I'd actually been using a pair of these for non-workout purposes, and I was pretty happy with them.  They had nice sound; a nice, secure fit; and much longer battery life than any of the Jaybirds.  They had no connectivity problems with my phone when using them outdoors, and they had easy-to-use button controls.  Since they're supposed to be IPX6-waterproofed, I decided to buy a second pair to use while running.  They bit the dust after less than a month.  On the bright side, that  quick death meant that I could just ship them back to Amazon for a refund.

Anker Soundcore Spirit X [Dead after 11 days]

I bought these on the advice of a Reddit post, where some dude claimed that he used them in the shower, and had no problems.  These are marketed as IPX7-waterproofed -- even more waterproofing than the Taotronics TT-BH024 that apparently weren't actually waterproof.  Unfortunately, these died even quicker than the Taotronics, and wouldn't power on or charge after using them for eight one-hour workouts.  These had nice, clear sound; but not a lot of bass.  The springy rubber earhooks provided a good fit; and there were also some extra ear-shaped doodads by the eartips to keep them extra-secured.  I'm not sure how well they worked outdoors, since they only survived long enough to use indoors on my treadmill.  But, again, their lifespan was short enough for an easy refund from Amazon.

Mpow Flame [Received Feb 27, 2019 - Lifespan TBD]

These ones are my most recent purchase.  At $17, they're the cheapest set of earbuds I've tried, and that price is appropriate when compared to the alternatives.  They aren't bad per se; they just aren't great.  Like the Taotronics TT-BH024, the buttons are easy to find -- but the volume up/down button functions on mine are reversed from what they should be (the + button in front lowers the volume, and the - button in back raises it).  There are no fancy HD codecs like aptX in play, and it shows.  The sound is completely average, and also a bit muddy.  The earhooks are non-adjustable, springy, molded rubber like the Anker Soundcore Spirit X, though the eartips don't give quite as good of a fit as the Ankers. The included cable retention clip is nice, though; and they also include a pair of memory foam eartips along with the usual rubber ones.  The flat cable tends to stick to the back of my sweaty neck and try to pull the left earbud out of my ear.
UPDATE: December 9th, 2019 - The Mpow Flames are still holding up. While they're the cheapest earbuds I've tried and they don't sound the best, they do seem to be resilient.

I'll preface this part with a warning. If I did it again, I don't think I'd do it this way.

The first thing I did was stack the frame, control panel, and the sides together, then I glued & screwed them together.  Then I attached each individual panel I'd previously built, along with furring strips to secure them in place

My badly-planned initial assembly step
If I do it again, my first step would be to attach the furring strips to both side pieces, and ensure that they are placed symmetrically on both sides.  The problem I ran into was that it was difficult to perfectly line up the furring strips on both sides.  On my final assembly, I have some panels that are slightly crooked.  I'd guess that I might be the only person to notice it, but it's annoying nonetheless.

For my assembly, I countersunk and screwed each piece into its respective furring strip from the outside.  Then I had to fill & sand each screw hole.  I'm sure other people could find more intelligent ways to do this without needing to fill dozens of screw holes.

Rear view.  I used the button-hole drill bit to add ventilation holes.
There's a computer living inside the cabinet, and computers create heat.  So, I also made sure to provide a bit of ventilation.

Front view.  Assembled and prepped for painting.
Once everything was assembled, I also routed the slot for the T-Molding.  I used a 1/16" width & 9/16" depth bit.  Because my router was old & rickety, I had to constantly keep an eye on where the slot was being routed, since my bit wanted to keep walking out of the collet.

Routing the T-Molding Slot

I had previously attached the artwork to the admin panel, so I made sure to tape this off before painting the entire cabinet.  I also previously painted the base.  I don't know why I previously painted the base. ¯\_(ツ)_/¯

With everything prepped & assembled, I first primed the entire cabinet with Kilz primer...

...and then I painted it with two coats of Rustoleum black satin paint.  I chose Rustoleum because it's enamel & not a latex paint, which means it's more durable once it dries.  Also of note: when painting & priming, I used foam rollers for the easy-to-paint areas, and a spray can for the not-so-easy areas with lots of edges & corners.

Below is a grab-bag of random features I included in my design:

The control panel is removable and can be placed on top of the cabinet.

I included a plain flat version of the control panel to allow mouse & keyboard gaming.  This also fits on top of the cabinet, and is swapped with the button-and-joystick panel.
The back access door has a bottom-hinge which is a pair of 12-inch piano hinges.  Note the power button.  More on that later...
A window sash latch is used to keep the back access door closed.
The front access door is hinged on a pair of Euro hinges, so the door can be inset from the front of the side panels.

The PC inside the cabinet is powered on/off with a regular arcade button.  To do this, I cut male/female patch panel wire in half, and soldered both halves to a single wire.  The other end of the wire has a connector for the arcade button.  The patch panel wires plug directly into the motherboard/case connections for the PC's power button.  This allows me to power on the PC with the button on the back of the cabinet, or the PC case's power button.
The sideart is printed on black self-adhesive vinyl from Souldraw.com. I used this guide to install the art. 
A shot of the final product in action...

A fair amount of effort went into the control panel.  I tested several mock layouts on paper until I found one that I liked.  Slagcoin.com is basically the online bible of arcade button layouts, and I made full use of it.

I started by cutting out the six sides of the control panel box, and attaching furring strips to keep them together.  I screwed and glued the strips on, screwing through the MDF and into the furring strips (since the wood of the furring strip will do a better job gripping the threads at the end of the screw than the MDF).

Arcade control panel side boards.
Then I glued & screwed all the pieces together.  The top is not attached, since it will be detachable on the finished product.  And the back panel also isn't actually screwed on for now, because I need to be able to access the underside of the top panel to formulate some kind of latching system. (Ultimately, I never actually made a latching system, and the control panel simply rests snugly in place.  Having the back panel detached did help immensely with the wiring process, however.)

Arcade control panel box assembled.
The next step is to prep the top panel for joysticks and buttons.  I printed a full size version of my control panel graphics, and clamped them to the top piece.

Graphic template clamped to control panel top piece.
Then I center punched all of the holes.  I want these holes to be drilled as accurately as possible, so I'm taking my time.

Center punching button holes.
With the holes center punched, I removed the graphic template, and used a small drillbit to drill pilot holes.

Button and joystick holes pilot drilled.
Now to drill the holes for the buttons and joysticks using a 1-1/8" forstner bit.  I started with one of the joystick holes, since any mistakes will be covered up by the joystick washer.  After drilling a couple holes, I noticed that the bit was tearing chunks out of the underside as the bit came through the MDF.  So, I started drilling about 1/4 of the way through the bottom first, then flipping the board over and drilling through the top.  This seemed to go more smoothly.

For the joystick attachment, I needed to rout out part of the underside for the joystick mounting plate, because un-routed 3/4" MDF would only leave a tiny nub of joystick sticking out. First, I drew a square that matched the size of the joystick's mounting plate, centered on the joystick pilot hole I'd drilled.  I actually marked out the area I needed to rout BEFORE I drilled the 1-1/8" holes (and after I'd drilled the pilot holes).  This is because it's a lot easier to find the center of a tiny drilled hole than a 1-1/8" hole.  Then I simply routed out the area inside the square that I drew.  You can either do this with a fancy template, or you can just do it by hand (since nobody will see the underside of your control panel anyways).

1/4" deep joystick inset routed on underside of control panel

Unfortunately, because I didn't drill my pilot holes with drill press, where they exited on the underside was just slightly off-center from the intended locations.  Luckily, it wasn't enough to be noticeable up against the art.

Test fitting joystick and buttons on cutting template
Once everything is drilled, I filed the front two corners so they were rounded, and then used my router to create a T-molding slot around the front & side edges of the control panel (more details on how to do this in the "Putting It All Together" post that's coming up), and primed/painted the control panel black.

My control panel art was ordered from GameOnGraphix, along with my admin panel art.  I created my own art in GIMP, and used their custom design service. [Click here to download the GIMP art file for my control panel] The polycarbonate-coated material they use is terrific for this application, and it was easy to apply.  The art is basically a big sticker. Peel off the back, and stick it to the control panel.  I lined up the holes from the underside by shining a light through the art to make sure everything was in place.  It was slightly off-center when I first started to applied it, but I was able to peel it up and reapply it with no problems.

Lining up the control panel art
Once the art was applied, I used a sharp X-Acto knife to cut around the edges and inside the button/joystick holes.

Cutting the control panel button holes

Control panel art applied and fully cut to fit
On the underside, I carefully aligned the joysticks where I wanted them to be, and marked where the screw holes needed to be placed.  Then I drilled my 0.4" deep holes (carefully, because the wood is only 0.5" inch thick here) and inserted EZ-Loks to secure the joysticks.

Joystick EZ-Loks
Now to attach all of the buttons and joysticks permanently.  My buttons and joysticks were all bought from GroovyGameGear. The buttons are Arcade PRIME buttons.  I splurged on "premium" micro-switches for the main 8 buttons for each player (GGG no longer sells the "premium" switches, it appears), but they were louder than the standard switches.  So, I kind of wish I'd stuck with all standard switches.  Leaf switches would've been quieter yet.  The joysticks are OMNI2 joysticks which can be switched between 4-way (old games like Pacman only had up/down/left/right movement) and 8-way mode.  Because essentially any game with a second joystick was an 8-way game, player two's joystick is permanently in 8-way mode (I contacted GGG and they gave me a $10 discount to get it this way).

The joysticks are screwed into place with screws and EZ-Loks.  The buttons are simply hand-tightened using the nuts that come with them (I bought a fancy nut-tightening tool for the buttons, but it was totally unnecessary).

Button and joysticks secured
The wiring isn't particularly difficult, but it was tedious and very time-consuming.  All of my controls interface with the computer running the arcade cabinet using an IPAC-2.  You can either buy these directly from Ultimarc; or in my case through FocusAttack, which saved quite a bit of money on shipping.  You could also try one of GGG's encoders, the cheaper Xin-Mo encoder (found commonly on eBay), or one of the much cheaper (but much more complicated to set up) Arduino Leonardo boards.
Ultimarc IPAC-2 Encoder Board
My control panel is actually detachable, so I needed to be able to easily plug/unplug all of the wiring.  I did this by wiring everything through M/F parallel cables (one for each player).  I cut the cable in half and wired the individual wires from one end into the buttons, and the corresponding-colored wires from the other end into the IPAC.  Then I plug it all in by connecting the male and female ends of the cable.

Control panel wiring for player one

Unfortunately, the wires inside the parallel cables are ridiculously thin, so I needed to solder a short length of thicker 22AWG wire to each wire so I could hook it up to the IPAC's screw terminals and into the quick disconnects attached to the buttons/joysticks.

Parallel cable wire soldered to 22AWG wire (note the extra piece of shrink tubing on the thinner wire so the main shrink tubing had something thick enough to grab onto on that side)
At this point, all I needed to do was attach the T-molding (again, more detail on this in the next post; and you can see the T-molding applied in the photo at the very top of this post).  I thought I'd need magnets or a latch to keep the control panel in place, but it was clear that I didn't need any of this once I got everything assembled.

The marquee serves no real functional purpose except to look really freakin' cool.  Building this part wasn't exactly rocket surgery (although I had a couple struggles).

Basically, I needed a ceiling and a floor for the marquee.  These are just strips of MDF held in place by metal L-brackets (if I'd used little blocks of wood to attach them, there'd be dead spots on the marquee where light couldn't shine through the wood).  Then I added some scrap wood to the back of the marquee area where I'd mount the backlight.

Marquee Construction
I ordered my marquee artwork, along with the side panel and keyboard surface art, from Souldraw.  The marquee art is printed on Backlit PVC Film.  My art had some scuffing and air bubbles, but for the price, I'm happy with what I got from Souldraw.  I had the art printed with about an inch of buffer space around all 4 edges, so I could cut it to size and not worry about it being too small.

Marquee art, full side panel art, and keyboard panel art: $88.46 shipped from Souldraw.com
The marquee art is simply sandwiched between two pieces of Plexiglas.  I left the protective film on the piece of Plexiglass behind the art, since it helped to diffuse the light somewhat.

You can buy specialized arcade marquee brackets to hold the art in place, but they tend to be somewhat overpriced.  I used clear plastic corner guards that I picked up from Home Depot for about 8 bucks.

Plastic Corner Guard
These brackets have little dimples dispersed across them to help nail them onto walls, so I had to cut the brackets in such a way that no dimples would show up on the front surfaces.  There are a couple dimples on the top & bottom, but they're totally not noticeable.

With the corner guards cut to size, I clamped them into place with the art/plexiglass in position.  Then I drilled three small-diameter pilot holes through the top and bottom surfaces.  Using these holes as guides, I added EZ-Loks to the cabinet (I love these things!).  Then I widened & slightly countersunk the holes on the brackets so I could screw machines screws into them (much like I did with the wooden ruler on the monitor glass retainer).

Next, I painted the inside surface of the brackets with black spraypaint, and then covered the dried paint with tape to protect it from scratching.  This gave the brackets a nice, glossy, black finish.

Now I needed to light my marquee.  

The LED Tape I Eventually Found to Light My Marquee
First I tried a fluorescent light fixture, but it was too big for the space I'd left.  Then I tried LED tape powered by an AC adapter, but every adapter I tried caused electrical interference with the sound system in my cabinet.  I eventually found USB-powered LED tape that worked great.  Also, since it's USB-powered, it automatically turns on and off with the PC powering my arcade machine.

Completed Marquee (Note the Flaw on the Lower-Right Corner)