Builds/002
Handheld Retro Console
Field-testedA Raspberry Pi 4 handheld that plays everything up to the PS2 era
- Logged
- 2024.12
- Timeframe
- 2024
- Role
- Solo build
- Stack
- Raspberry Pi 4RetroPie OSGPIOSolidWorks3D printingSoldering
- Source
- —
Photo pending — final-assembled.jpg
The goal
I wanted a handheld that could play the entire pre-PlayStation 2 library — NES through PS1 — without feeling like a science project. That meant three hard requirements: it had to run for 4+ hours on battery, it had to have real console-style controls (not a USB gamepad strapped to a screen), and it had to look and feel like a finished product you could hand to a friend.
Off-the-shelf retro handhelds existed, but building one meant I got to make every tradeoff myself: the screen, the battery chemistry, the button layout, the enclosure ergonomics. This build ended up teaching me more about hardware integration than any single project before it.
Parts & materials
Everything in this build is off-the-shelf except the enclosure, which is custom-designed and 3D-printed.
Bill of materials
| Item | Qty | Notes |
|---|---|---|
| Raspberry Pi 4 | 1 | The brains. Enough horsepower for stable pre-PS2 emulation. |
| 7-inch HDMI LCD | 1 | Driven over HDMI, not DSI — keeps the display path simple. |
| 4,000 mAh UPS battery HAT | 1 | UPS-style board: play while charging, no brownouts. |
| Tactile buttons + D-pad + joysticks | 1 set | Console-style controls, wired straight to GPIO. |
| Heatsink | 1 | Passive cooling sized into the enclosure design. |
| PLA filament | ~1 spool | For the SolidWorks-designed two-shell enclosure. |
| HDMI / USB / audio / TV-out breakouts | 1 each | Routed through the enclosure walls for dock-style use. |
Brains: Pi 4 + RetroPie
The Raspberry Pi 4 runs RetroPie, a Linux distribution built around the EmulationStation front-end. It boots straight into a console-style UI, and everything up to the PS1 era runs at full speed with room to spare.
Photo pending — retropie-boot.jpg
Setting up the software first was deliberate: I wanted a known-good baseline before I started soldering. If something broke later, I’d know it was my wiring — not the OS.
Soldering controls across nearly every GPIO pin
This is where the build got serious. Instead of a USB controller board, every button, the D-pad, and both joysticks are wired directly to the Pi’s GPIO header — which meant using nearly all 40 pins.
Photo pending — gpio-soldering.jpg
Direct GPIO input has two big advantages:
- Latency — there’s no USB polling or controller firmware between the button and the OS. A GPIO driver reads the pins directly, and RetroPie sees them as a native input device.
- Space — no controller PCB to fit inside an already-crowded enclosure.
The cost is wiring complexity. Forty-odd hand-soldered joints in a handheld that flexes when you grip it means every joint needs strain relief, and the loom has to be planned before the enclosure closes.
Photo pending — wiring-loom.jpg
Power: the 4,000 mAh problem
The runtime target was 4+ hours, and the Pi 4 is not a low-power chip. The 4,000 mAh UPS battery HAT hit the target, but only after some tuning:
- Screen brightness is the biggest single draw — the 7-inch panel pulls more than the Pi under emulation load.
- CPU governor settings matter: pre-PS1 systems don’t need full clocks, so letting the governor scale down buys real minutes.
- The UPS topology means the console charges while playing and survives plug/unplug without a reboot — essential for something that’s supposed to feel like a product.
Final result: a bit over 4 hours of mixed SNES/PS1 play on a full charge.
Designing the enclosure in SolidWorks
The enclosure is the part I’m proudest of. I modeled it in SolidWorks around three constraints: grip ergonomics, port access, and heat.
Photo pending — cad-enclosure.jpg
Design decisions that made it work:
- Internal mounts hold the Pi, battery board, and screen without a single hot-glued component — everything screws into printed bosses.
- Port routing: HDMI-out, USB expansion, headphone audio, and TV-out all pass through the case walls, so the handheld doubles as a dockable console on a TV.
- Heatsink cavity with ventilation keeps the Pi passively cooled through long sessions — no fan, no noise.
- Ergonomics: the grip curves came from tracing comfortable hand positions on cardboard mockups before committing to a 10+ hour print.
Photo pending — printed-shell.jpg
Assembly & first boot
Final assembly was the moment of truth: loom folded in, screen seated, battery board stacked, shells closed. Then the power button.
Photo pending — assembly.jpg
It booted. Buttons worked on the first try (the labeling discipline paid off), and the first game I played start-to-finish on it was exactly the kind of dumb, satisfying validation a year-long parts drawer of a project deserves.
Where it landed: stable emulation for everything pre-PS2, 4+ hours of battery, TV-out for couch play, and an enclosure that survives being tossed in a backpack.
What I’d do differently
- Design the wiring loom in CAD too. I modeled the enclosure carefully but treated the wiring as “figure it out during assembly.” A planned loom with measured lengths would have saved hours of re-routing.
- Custom PCB instead of point-to-point wiring. Forty hand-soldered joints work, but a simple carrier PCB for the buttons would be more durable and faster to assemble. (This itch is part of why I got into KiCad later — see the race-car PCB log.)
- Battery headroom. 4 hours meets spec; 6 would feel effortless. A slightly thicker case for a bigger cell is a trade I’d now take.