Mount a joypad on your Pi Zero to get retro gaming
Ever since its arrival, the tiny Pi Zero has been used for mini retro gaming projects, usually involving inserting one inside an old joypad. Adafruit’s Joy Bonnet offers a much simpler, quicker route to pocket-sized retro gaming, however. Coming fully assembled, it simply stacks on top of your Raspberry Pi Zero. Naturally, you’ll need to solder (or hammer) a GPIO header to the latter first. A couple of plastic spacers and screws keep the Bonnet firmly in place – which is pretty essential as you’ll be pressing its buttons continuously and therefore pushing it down on the Pi. While it’s comfortable enough to hold in your hand, you may want to add the bottom of a Pi Zero case for extra comfort – although we had problems keeping the mini-HDMI display adapter fully inserted through the hole in an official case.
The full article can be found in The MagPi 58 and was written by Phil King.
You’re then ready to install a retro gaming OS. Adafruit recommends using RetroPie or Emulation Station – just flash your microSD card as usual. With wireless set up, you can then SSH in and use a single command to install the Joy Bonnet Python library and software. It takes a little while and offers options to disable overscan (to remove the black border on some monitors) and install a gpio-halt utility for safe shutdown.
Upon rebooting, the OS (we used RetroPie) should sense the Joy Bonnet. We were somewhat surprised to see it recognised as a keyboard: it turns out that the Bonnet’s buttons emulate keys such as Z, X, and ENTER. Another interesting point to note is that the mini joystick is actually analogue, although its directions produce cursor key presses – more on this later. Once you have assigned the various buttons and joystick directions to functions in RetroPie, you’re ready to play – naturally, you’ll need to have added a few game ROMs in the relevant system folders in RetroPie to make them appear in the on-screen menus.
We started off with a quick game of Galaga ’88 running on the MAME arcade emulator. Everything worked fine and the controls were responsive enough. Upon switching to Street Fighter II on SNES, however, we encountered a slight drawback. In place of L and R shoulder buttons, the Joy Bonnet has a couple of tiny buttons labelled 1 and 2, located in the middle of the top of the board – so not that easy to reach in the heat of battle. The four main buttons (X, Y, A, and B) worked well, although they’re far smaller than the ones on original joypads, so not that comfortable. While not quite so critical, the Select and Start buttons are the same small size.
Next, we thought we’d have a blast with classic vertically scrolling shmup, 1942. Here we came across a bugbear that spoilt our enjoyment until we figured out a fix. As mentioned previously, the mini joystick is analogue but emulates digital presses, and we found it extremely difficult to obtain diagonal directions for our plane in the game. Fortunately, we managed to sort this out by editing the Joy Bonnet’s Python library and reducing the positive and negative thresholds for the analogue stick. Setting these at -300 and 300, rather than the original -600 and 600, we found the stick considerably more sensitive and were therefore able to obtain the diagonal directions. It’s also possible to edit the key presses produced by the buttons in this file, which might come in useful when playing a Spectrum or C64 game with unorthodox keyboard controls.
Note that the Pi Zero is not capable of emulating more powerful consoles such as the N64 and PlayStation. You could always use the Joy Bonnet with a Raspberry Pi 3, although it wouldn’t exactly be handheld.
Not as comfortable to hold or responsive as a regular game console joypad, the Joy Bonnet is unlikely to net you many high scores. Still, it is a cute concept that makes it easy to quickly get retro gaming on a Pi Zero: a neat portable solution that you can carry around with you to plug into any TV. You might want to invest in a longer HDMI cable so you don’t have to stand quite so close to the screen, though.