← all projects

gba-recomp

RustC11ARM/Thumb

Zero-interpreter static recompiler and runtime for Game Boy Advance

A Rust toolkit that translates GBA cartridges ahead of time into native executables. A custom ARMv4T/Thumb decoder lifts every reachable block to IR and emits C11, backed by a complete hardware model — PPU, APU, DMA, timers, saves — with no JIT anywhere.

~27k LOC

Rust

10 crates

Workspace

~170k

Functions mapped

Highlights

  • 01Solves static-recompilation's undecidable control-flow problem with a per-game function map: ~170,000 functions mapped in four days by an automated Ghidra + LLM pipeline, each verified by reassembly.
  • 02Dual-ISA lifting — ARM and Thumb into one IR — with runtime-resolved indirect branches and RAM-resident code capture for hot IWRAM routines.
  • 03First-principles color science: CIE colorimetry from real-panel measurements reproduces each hardware revision's screen, down to an analytic subpixel grid.
  • 04Shadow-mixer audio engines identify the game's audio middleware by byte signature and re-render per-voice in float, continuously cross-checked against the real mixer.
  • 05Cycle-accurate scheduling with AOT-summed cycles per basic block; enhancements are opt-in and output is bit-exact to hardware with them off.
  • 06Polished egui launcher with drag-and-drop, gamepad hot-plug, and one-click packaging of games into standalone native executables.
Launcher UI
The launcher forging native code for a cartridge — recently played shelf, drag-and-drop loading.
LCD subpixel color simulation
Panel simulation: measured-colorimetry color correction with an analytic subpixel grid.
Color correction comparison
Hardware-revision color reproduction, from reflective launch panel to backlit.
Development view
Development tooling during bring-up.