Youssef Abdallah

Builds/002

Handheld Retro Console

Field-tested

A 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
FIG 01 — The finished console — 4+ hours of runtime, everything up to the PS1 era running smooth

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

ItemQtyNotes
Raspberry Pi 41The brains. Enough horsepower for stable pre-PS2 emulation.
7-inch HDMI LCD1Driven over HDMI, not DSI — keeps the display path simple.
4,000 mAh UPS battery HAT1UPS-style board: play while charging, no brownouts.
Tactile buttons + D-pad + joysticks1 setConsole-style controls, wired straight to GPIO.
Heatsink1Passive cooling sized into the enclosure design.
PLA filament~1 spoolFor the SolidWorks-designed two-shell enclosure.
HDMI / USB / audio / TV-out breakouts1 eachRouted 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.

FIG 02 — First boot on the bare 7-inch panel, before any of the hardware existed around it

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.

FIG 03 — Nearly every GPIO pin in use — each wire is one button or axis

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.

FIG 04 — The loom, planned and bundled before it disappeared into the case forever

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:

  1. Screen brightness is the biggest single draw — the 7-inch panel pulls more than the Pi under emulation load.
  2. CPU governor settings matter: pre-PS1 systems don’t need full clocks, so letting the governor scale down buys real minutes.
  3. 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.

FIG 05 — The enclosure model — internal mounts, port cutouts, and the heatsink cavity all designed in before printing

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.
FIG 06 — Both shell halves in PLA — the moment a CAD model becomes a real object never gets old

Assembly & first boot

Final assembly was the moment of truth: loom folded in, screen seated, battery board stacked, shells closed. Then the power button.

FIG 07 — Everything in its place — the loom folds into the gap between the battery and the screen

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.