Turn your uConsole into a
retro gaming handheld.
NES to PSP — full RetroArch setup, per-system core configs, input mapping for the built-in keyboard, performance tuning, and standalone emulators. Everything you need to play on the 5" screen.
- 1.What You Can Emulate — Compatibility Table
- 2.Installing RetroArch & Cores
- 3.Display Configuration for the 5" Screen
- 4.Controller & Input Setup
- 5.Per-System Setup & Recommended Cores
- 6.Performance Optimization
- 7.ROM Management & BIOS Files
- 8.Standalone Emulators (PPSSPP, Duckstation)
- 9.Troubleshooting Common Issues
- 10.Get Pre-Configured Emulation
What you can emulate.
The uConsole is a surprisingly capable emulation machine. The CM4's BCM2711 (quad Cortex-A72 @ 1.5 GHz) handles everything up to PS1 perfectly and most N64/PSP titles playably. The CM5 pushes that further with its faster cores. Here's what to expect.
The 5" 720×1280 display (rotated to 1280×720 landscape) is actually ideal for retro gaming — the pixel density makes even low-resolution systems look sharp, and CRT shaders look beautiful at this size.
| System | Core | CM4 | CM5 | Notes |
|---|---|---|---|---|
| NES / Famicom | FCEUmm | ★★★★★ Perfect | ★★★★★ Perfect | 100% full speed, all titles |
| SNES / SFC | Snes9x | ★★★★★ Perfect | ★★★★★ Perfect | 100% full speed, all titles |
| Game Boy / Color | Gambatte | ★★★★★ Perfect | ★★★★★ Perfect | Pixel-perfect on 5" screen |
| Game Boy Advance | mGBA | ★★★★★ Perfect | ★★★★★ Perfect | Perfect, great screen fit |
| Sega Genesis / MD | Genesis Plus GX | ★★★★★ Perfect | ★★★★★ Perfect | Includes 32X, Sega CD |
| PlayStation 1 | PCSX-ReARMed | ★★★★☆ Great | ★★★★★ Perfect | 95%+ games full speed on CM4 |
| Nintendo 64 | Mupen64Plus-Next | ★★★☆☆ Playable | ★★★★☆ Great | Many titles need per-game tweaks |
| PSP | PPSSPP | ★★★☆☆ Playable | ★★★★☆ Great | 2D games great, 3D varies by title |
| Nintendo DS | DeSmuME | ★★★☆☆ Playable | ★★★★☆ Great | Single-screen mode recommended |
| Arcade (CPS1/2/3) | FinalBurn Neo | ★★★★★ Perfect | ★★★★★ Perfect | Street Fighter, Marvel vs Capcom |
| Sega Dreamcast | Flycast | ★★☆☆☆ Slow | ★★★☆☆ Playable | Some 2D titles ok, 3D struggles |
Best bang for your buck: 8-bit and 16-bit systems (NES, SNES, Genesis, GBA) run flawlessly and look incredible on the 5" screen. PS1 is the sweet spot for "most impressive system that runs perfectly."
Installing RetroArch & cores.
One frontend to rule them all
RetroArch is a single application that bundles dozens of emulator "cores" behind one unified interface. It handles input mapping, save states, shaders, screenshot capture, and more — all in one place. It's the easiest way to set up emulation on the uConsole.
Step 1: Update your system
sudo apt update && sudo apt upgrade -y
Step 2: Install RetroArch
The Debian/Bookworm repos include RetroArch. Install it along with the core set:
# Install RetroArch + common cores sudo apt install -y retroarch \ libretro-snes9x \ libretro-mgba \ libretro-nestopia \ libretro-gambatte \ libretro-genesis-plus-gx \ libretro-pcsx-rearmed \ libretro-desmume \ libretro-fbneo
For N64 and additional cores not in the repos, use RetroArch's built-in core downloader:
# Launch RetroArch retroarch # Then navigate: # Main Menu → Online Updater → Core Downloader # Install these cores: # - Mupen64Plus-Next (N64) # - PPSSPP (PSP) # - FCEUmm (NES — alternative to Nestopia) # - Flycast (Dreamcast)
Step 3: Verify installation
# List installed cores (apt-installed) ls /usr/lib/libretro/ # You should see files like: # snes9x_libretro.so # mgba_libretro.so # pcsx_rearmed_libretro.so # genesis_plus_gx_libretro.so # Cores from the downloader go here: ls ~/.config/retroarch/cores/
⚠ Note: If you get dependency errors on Bookworm, try adding the armhf architecture: sudo dpkg --add-architecture armhf && sudo apt update. Some emulator cores require 32-bit libraries.
Display config for the 5" screen.
Resolution, shaders, and aspect ratio tuning
The uConsole's 720×1280 display (1280×720 in landscape) is a great match for retro gaming, but you need to configure RetroArch to use it properly. Out of the box, the defaults might give you a stretched or oddly-positioned image.
Core display settings
# ─── Video Driver ─── # Use GL for best compatibility on the uConsole video_driver = "gl" # ─── Resolution ─── # Match the uConsole's native landscape resolution video_fullscreen_x = "1280" video_fullscreen_y = "720" video_fullscreen = "true" # ─── Aspect Ratio ─── # Keep original aspect ratio — no stretching aspect_ratio_index = "22" # 22 = "Core Provided" — each system uses its native ratio # NES/SNES = 4:3, GBA = 3:2, etc. # ─── VSync ─── # Enable for tear-free, disable if you need more performance video_vsync = "true" # ─── Smooth Scaling ─── # Bilinear filtering — false for pixel-perfect, true for smoothed video_smooth = "false" # ─── Integer Scaling ─── # Keeps pixels crisp by only scaling to integer multiples video_scale_integer = "true"
Recommended shader presets
Shaders add CRT scanlines, LCD grids, or other effects that make retro games look authentic. Download shaders through RetroArch's Online Updater first.
| System | Shader | Perf Hit | Look |
|---|---|---|---|
| NES / SNES / Genesis | crt-pi | ~2% | Subtle CRT scanlines, great for 5" |
| GBA / GBC | lcd3x | ~1% | LCD pixel grid — authentic handheld feel |
| PS1 / N64 | crt-pi | ~5% | Smooths 3D, adds CRT warmth |
| PSP | none | 0% | PSP games look great raw at 1x |
| All (if struggling) | none | 0% | Integer scaling alone looks clean |
# In RetroArch: # Quick Menu → Shaders → Load Shader Preset # Navigate to: # shaders_glsl/crt/crt-pi.glslp (for CRT effect) # shaders_glsl/handheld/lcd3x.glslp (for LCD grid) # To auto-load for a specific core: # Quick Menu → Shaders → Save → Save Core Preset
Tip: At the uConsole's screen size, even the simplest shader makes a noticeable difference. crt-pi was designed specifically for low-powered ARM devices and runs with almost zero performance cost.
Controller & input setup.
Map the built-in keyboard + add external gamepads
The uConsole's keyboard is functional for gaming but needs custom mapping. The tiny QWERTY layout plus trackball can work as a gamepad. For serious sessions, a USB or Bluetooth controller is recommended.
Recommended keyboard mapping
| Key | Gamepad Button | Use |
|---|---|---|
| W / A / S / D | D-Pad | Movement |
| J | B / Cross | Primary action |
| K | A / Circle | Secondary action |
| U | Y / Square | Tertiary action |
| I | X / Triangle | Quaternary action |
| Q | L1 / L Shoulder | Left bumper |
| E | R1 / R Shoulder | Right bumper |
| Tab | Select | Select / Back |
| Return | Start | Start / Pause |
| Trackball | Right Analog | Camera (N64, PSP) |
| F1 | — | RetroArch menu |
# ─── uConsole Keyboard Bindings ─── input_player1_up = "w" input_player1_left = "a" input_player1_down = "s" input_player1_right = "d" input_player1_b = "j" input_player1_a = "k" input_player1_y = "u" input_player1_x = "i" input_player1_l = "q" input_player1_r = "e" input_player1_select = "tab" input_player1_start = "return" # ─── RetroArch Hotkeys ─── input_menu_toggle = "f1" input_save_state = "f2" input_load_state = "f4" input_state_slot_increase = "f7" input_state_slot_decrease = "f6" input_toggle_fast_forward = "space" input_rewind = "r" input_exit_emulator = "escape"
USB & Bluetooth gamepads
RetroArch auto-detects most controllers. The best options:
8BitDo SN30 Pro+ — Best overall. USB-C and Bluetooth. RetroArch auto-maps it. Compact enough to pair with the uConsole.
Xbox Core Controller — USB or Bluetooth. Excellent support. Larger but great for extended sessions.
PS4/PS5 DualSense — Pair via bluetoothctl. See our Bluetooth guide for pairing help.
# Start the Bluetooth service sudo systemctl enable bluetooth sudo systemctl start bluetooth # Open the pairing tool bluetoothctl # Inside bluetoothctl: power on agent on scan on # Put your controller in pairing mode, then: pair XX:XX:XX:XX:XX:XX trust XX:XX:XX:XX:XX:XX connect XX:XX:XX:XX:XX:XX exit
Per-system setup & recommended cores.
Optimal settings for each console
Each system has its own best-performing core and optimal settings. Here's the recommended configuration for each on the uConsole.
▸ NES / Famicom
FCEUmm is the recommended NES core — fast, accurate, and has the best mapper support. Full speed on both CM4 and CM5 with zero configuration.
# Set default core for .nes files: # Settings → Directory → Core Info # Then: Quick Menu → Set Core Association → FCEUmm # Recommended core options (Quick Menu → Core Options): # Region: Auto # Turbo Enable: On (for speedrunning) # Palette: Composite Direct (authentic colors)
▸ SNES / Super Famicom
Snes9x is lighter than bsnes and runs every commercial SNES game at full speed. Use Snes9x over bsnes for the extra performance headroom on the uConsole.
# Recommended core options: # SuperFX Overclock: 100% (increase to 200% if # Star Fox / Yoshi's Island run slow) # Hires Blending: Merge (for transparency effects) # Lightgun Mode: Touchscreen (for Super Scope games)
▸ Game Boy Advance
mGBA is the gold standard — fast, accurate, and supports Game Boy and Game Boy Color too. The uConsole screen is almost the perfect size for GBA games.
# Recommended core options: # Solar Sensor Level: 0 (increase for Boktai games) # Allow Opposing Directions: Off # Use BIOS if Available: On (put gba_bios.bin in system/) # Color Correction: Game Boy Advance # Interframe Blending: Smart (fixes GBA transparency tricks)
▸ PlayStation 1
PCSX-ReARMed is optimized for ARM processors, making it the best PS1 core for the uConsole. Runs 95%+ of games at full speed on CM4 and essentially everything on CM5.
BIOS required: Place scph1001.bin in your RetroArch system directory for best compatibility.
# Recommended core options: # Use BIOS: On (much better compatibility) # NEON Enhanced Resolution: 1x (keep at 1x on CM4) # Frameskip Type: Auto # Frameskip Threshold: 95% # Threaded Rendering: On # Speed Hack: On (helps with demanding games) # Analog Mode: DualShock (for analog stick support) # # CM5 users: try 2x resolution for sharper 3D
▸ Nintendo 64
N64 is the most demanding "playable" system on CM4. Mupen64Plus-Next with GLideN64 gives the best speed/compat balance. Mario 64, Ocarina of Time, and Mario Kart 64 all run well with tuning.
# Recommended core options: # GFX Plugin: GLideN64 # RSP Plugin: HLE (faster than LLE) # Resolution: 320x240 (native — don't upscale on CM4) # Framebuffer Emulation: On # Texture Filter: None (saves CPU) # Threaded Renderer: On # VI Output Mode: Non-filtered (fastest) # CPU Core: Dynamic Recompiler # # CM5: try 640x480 for a much sharper image # Per-game tips for tricky titles: # GoldenEye — frameskip 1, disable expansion pak # Perfect Dark — needs CM5 for playable speeds # Conker — native resolution, frameskip 1
▸ PlayStation Portable (PSP)
PSP is demanding but many popular titles are playable. 2D games and visual novels run great. 3D-heavy titles like God of War need the CM5 or standalone PPSSPP (Section 8).
# Recommended core options: # Internal Resolution: 1x PSP (480x272) on CM4, 2x on CM5 # Frame Skipping: 1 (for 3D games on CM4) # Auto Frameskip: On # Backend: OpenGL # Texture Scaling: Off on CM4, 2x on CM5 # Hardware Transform: On # Software Skinning: On # Vertex Cache: On # I/O Threading: On # Games that run great on CM4: # - Persona 3 Portable, Final Fantasy Tactics # - Patapon, LocoRoco, Lumines # - Monster Hunter (with frameskip 1)
Pro tip: Save per-game overrides for N64 and PSP. In RetroArch: Quick Menu → Overrides → Save Game Override. Fine-tune per title without affecting other games.
Performance optimization.
Squeeze every frame out of the hardware
These optimizations can be the difference between "choppy" and "perfectly playable" for N64 and PSP. Apply them all for maximum performance.
CPU governor — lock to performance mode
# Set performance governor (all cores) echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor # Verify cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor # Should output: performance # Make persistent — add to /etc/rc.local before "exit 0": echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor echo performance > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor echo performance > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor echo performance > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
Overclocking for emulation
Overclocking to 1800 MHz gives ~20% more performance that directly translates to better emulation frame rates:
⚡Safe & aggressive profiles, thermal management, step-by-step.
RetroArch performance settings
# ─── Threading ─── video_threaded = "true" # ─── Audio ─── audio_latency = "64" audio_driver = "alsa" # ─── Rewind (disable to save CPU) ─── rewind_enable = "false" # ─── Run-Ahead (reduces input lag — only for 8/16-bit) ─── # run_ahead_enabled = "true" # run_ahead_frames = "1"
System-level tweaks
# Close unnecessary services sudo systemctl stop cups avahi-daemon ModemManager # Kill compositors killall picom compton 2>/dev/null # Increase GPU memory (CM4 — add to /boot/config.txt) gpu_mem=256 # Disable Bluetooth if not using BT controller sudo systemctl stop bluetooth sudo rfkill block bluetooth
| Optimization | FPS Gain | Effort | Tradeoff |
|---|---|---|---|
| Performance governor | +5-10% | Easy | Higher idle power draw |
| Overclock to 1800 MHz | +15-20% | Moderate | More heat, less battery |
| Threaded video | +10-15% | Easy | Slight input lag increase |
| gpu_mem=256 | +5-10% | Easy | Less system RAM |
| Kill background services | +5% | Easy | No printing/discovery |
| Disable shaders | +2-5% | Easy | Raw pixels only |
| All combined | +40-50% | — | Worth it for N64/PSP |
ROM management & BIOS files.
Organize your library the right way
A well-organized ROM directory makes scanning and browsing your library easy. RetroArch can auto-detect games and download thumbnails when files are properly structured.
Recommended directory structure
mkdir -p ~/roms/{nes,snes,gba,gbc,genesis,psx,n64,psp,ds,arcade}
# Set RetroArch to scan:
# Settings → Directory → File Browser → ~/roms
# Structure:
# ~/roms/
# ├── nes/ ← .nes, .zip
# ├── snes/ ← .sfc, .smc, .zip
# ├── gba/ ← .gba, .zip
# ├── gbc/ ← .gbc, .gb, .zip
# ├── genesis/ ← .md, .gen, .zip
# ├── psx/ ← .bin/.cue, .chd, .pbp
# ├── n64/ ← .n64, .z64, .v64
# ├── psp/ ← .iso, .cso
# ├── ds/ ← .nds
# └── arcade/ ← .zip (FBNeo romset names)BIOS files
Some systems need BIOS files for accurate emulation. You must source these yourself. Place them in RetroArch's system directory:
mkdir -p ~/.config/retroarch/system # Verify path in RetroArch: # Settings → Directory → System/BIOS
| System | Filename | Required? | Notes |
|---|---|---|---|
| GBA | gba_bios.bin | Optional | Better startup accuracy |
| PS1 | scph1001.bin | Recommended | US BIOS — best compat |
| PS1 | scph5500.bin | Optional | Japan BIOS |
| PS1 | scph5502.bin | Optional | Europe BIOS |
| NDS | bios7.bin, bios9.bin | Optional | More accurate with |
| Arcade | neogeo.zip | Required | For Neo Geo in FBNeo |
| Sega CD | bios_CD_U.bin | Required | Region-specific |
PS1: convert BIN/CUE to CHD
CHD compresses multi-file BIN/CUE into a single file — 40-60% smaller, faster loading, no pairing issues:
sudo apt install -y mame-tools chdman createcd -i game.cue -o game.chd
⚠ Legal note: Only use ROMs and BIOS files you have legally obtained. Dumping your own cartridges and discs is the legal approach.
Standalone emulators.
PPSSPP & Duckstation — when RetroArch cores aren't enough
Standalone emulators can run 10-20% faster than RetroArch cores. They get more frequent updates and system-specific optimizations. The tradeoff is managing separate apps.
▸ PPSSPP Standalone (PSP)
Standalone PPSSPP runs 15-20% faster than the RetroArch core with better per-game settings and a nicer game browser UI.
# From Debian repos (quick) sudo apt install -y ppsspp # Or build from source (latest, recommended) sudo apt install -y build-essential cmake git \ libsdl2-dev libvulkan-dev libgl-dev git clone --recurse-submodules https://github.com/hrydgard/ppsspp.git cd ppsspp && mkdir build && cd build cmake -DUSING_EGL=ON -DUSING_GLES2=ON .. make -j$(nproc) # Run: ./PPSSPPSDL /path/to/game.iso
# Graphics: # Backend: OpenGL # Resolution: 1x PSP (CM4) / 2x (CM5) # Frame Skipping: Auto, Max 1 # Hardware Transform: On # Vertex Cache: On # Lazy Texture Caching: On # System: # I/O Threading: On # Fast Memory: On # Multithreaded: On
▸ Duckstation (PS1)
More accurate than PCSX-ReARMed with PGXP geometry correction (fixes 3D wobble) and true color rendering. Heavier on CPU — best suited for CM5.
# Download ARM64 AppImage wget https://github.com/stenzek/duckstation/releases/latest/download/DuckStation-aarch64.AppImage chmod +x DuckStation-aarch64.AppImage ./DuckStation-aarch64.AppImage # First run setup: # 1. Set BIOS path: Settings → BIOS → ~/.config/retroarch/system # 2. Add game directory: Settings → Game List → Add # 3. Configure controller mapping
# Graphics: # Renderer: OpenGL # Internal Resolution: 1x (CM4) / 2x (CM5) # PGXP Geometry Correction: On (fixes 3D wobble) # True Color: On (removes PS1 color banding) # Texture Filtering: Nearest (authentic look) # Advanced: # Enable Recompiler: On # Recompiler Fast Memory: On
| Feature | RetroArch | Standalone |
|---|---|---|
| Performance | Good | 10-20% better |
| Unified interface | Yes — one app | Separate apps |
| Save states | RA-managed | Per-app |
| Shader support | RA shaders | Built-in |
| Updates | Slower | More frequent |
| Best for | 8/16-bit, PS1 | PSP, PS1 (CM5) |
Our recommendation: Use RetroArch for everything except PSP. Standalone PPSSPP gives noticeably better performance for 3D games. On CM5, Duckstation is also worth trying for PS1.
Troubleshooting.
Common issues and how to fix them
Black screen when launching RetroArch
Video driver mismatch. Set it to GL:
# Edit ~/.config/retroarch/retroarch.cfg video_driver = "gl" # Or in GUI: Settings → Drivers → Video → gl
No audio or crackling sound
Audio latency too low or wrong driver:
# In retroarch.cfg: audio_driver = "alsa" audio_latency = "128" # increase to 256 if still crackling
Games running too slow
Check in order:
- 1.Set CPU governor to
performance - 2.Enable
video_threaded = "true" - 3.Disable shaders
- 4.Use lighter core (Snes9x over bsnes)
- 5.Overclock your CM4
- 6.Close background apps and services
Screen rotation is wrong
# In retroarch.cfg: video_rotation = "0" # 0=normal, 1=90°, 2=180°, 3=270° # If using X11: xrandr --output DSI-1 --rotate right
N64 games crash or have glitches
- ▸Switch between GLideN64 and Rice GFX plugins
- ▸Disable Framebuffer Emulation for speed
- ▸Try
Parallel-N64core as alternative - ▸Save per-game overrides for problem titles
Bluetooth controller has input lag
# Edit /etc/bluetooth/main.conf: [LE] MinConnectionInterval=6 MaxConnectionInterval=9 ConnectionLatency=0 sudo systemctl restart bluetooth # Or use USB if your controller supports it
Get the Toolkit with RetroArch
pre-configured and ready to play.
The Pocket Forge Toolkit includes RetroArch with optimized per-system core settings, keyboard mappings, display config, performance governor, shader presets, and the directory structure. Flash the SD card and start playing in 15 minutes.
Overclocking Guide
Squeeze 15-30% more performance for demanding emulators like N64 and PSP.
Read guide →Battery Life Guide
Optimize battery so your gaming sessions last longer between charges.
Read guide →i3 & Sway Setup
Lightweight WM base — more resources for emulators.
Read guide →Bluetooth Audio
Get wireless audio working for immersive retro gaming.
Read guide →More guides are coming.
We're writing guides on QMK keyboard firmware, portable pentesting, SDR radio, and more. Join the waitlist to get notified — plus early access to new tools.
Also check out our Overclocking Guide and Battery Life Guide
Your email is stored securely and used only for Pocket Forge updates. Unsubscribe anytime.