wth I didn’t realise I had to make a devlog so early. I’m making a custom handheld console for using a Raspberry Pi Zero 2 W and a 64 GB microSD card that I already have (actually got it from a HackClub event last year!) I wanted to try a more involved hardware project after making my MacroNAVI hackpad (which hopefully gets approved), combining custom PCBs, a printed enclosure, and retro game emulation.
I started by deciding which systems I wanted to support. Initially, I considered everything available in the Delta emulator that I currently have on my phone, including Nintendo DS and Nintendo 64, but narrowed the scope to NES, Game Boy, Game Boy Color, Game Boy Advance, SNES, and Sega Genesis. I also wanted a vertical layout inspired by Delta’s SNES controller skin, with a D-pad, ABXY, Start, Select, and two shoulder buttons. My original size target was roughly an iPhone 13, although I eventually accepted a thicker case to make room for the components.
A lot of the planning involved researching displays and figuring out how they would connect to the Pi. I considered several Waveshare displays using HDMI, DSI, and DPI before choosing the 3.5-inch 640×480 HDMI LCD. I also decided to use the headphone jack which the display includes with an opening in the case.
For power, I planned around a PiSugar 3 Air and an external 3.7 V, 3000 mAh battery measuring 9.6 × 40 × 60.4 mm. I’m using a short internal USB-C extension so the charging port can be accessible from the enclosure. I have a rough idea of how everything is going to fit on the inside, and hopefully there’ll be no issues with some of the assumptions I’ve made in terms of measurements.
I began modelling the enclosure in FreeCAD, the current enclosure is 84 × 147 × 34 mm. I positioned the display, Pi, power board, battery, and controller PCB, then built the front and rear shells around them. This included the screen opening, button openings, mounting posts, screw holes, and heat-set insert holes. I also added battery supports and a retainer, plus a holder and retaining bracket for the charging socket.
For the controls, I wanted soft controller-style buttons using silicone membranes. I contacted RetroSix about membrane dimensions, and they were really helpul and pointed me toward an open-source SNES controller PCB. That gave me a useful reference for the contact footprints, although I still need to verify the physical membranes and their fit.
In KiCad I created the main controller schematic and PCB, assigned the button contact footprints, arranged the controls, and routed the connections. This involved learning about track widths, vias, copper zones, and running the design rule checker. I also ran into problems updating the PCB from the schematic on Arch Linux; switching to Windows resolved that issue. The main board currently passes DRC.
More recently, I designed a small shoulder-button PCB that can be used twice, once for L and once for R. I initially considered putting both switches on one board, but separate boards made placement around the display hardware easier. I adjusted the board outline and mounting holes to clear the display supports, checked it in KiCad, and imported both copies into FreeCAD.
The latest work was adding four supports for those shoulder PCBs and their insert holes in the rear shell. Both boards are now positioned in the assembly, and I’ve planned the rear button locations. The next stage is working out the shoulder button caps and membrane retention, then checking the remaining clearances and wiring.