Nintendo 3DS static recompiler any3ds runs Pokémon X natively
Developer Mohammed Hajwani's any3ds project translates 3DS binaries into native C code, running Pokémon X through its opening towns with a Vulkan renderer.
Developer Mohammed Hajwani's open-source any3ds static recompiler now boots and plays Pokémon X natively through its initial towns using a custom PICA200 GPU interpreter and Vulkan renderer.
Unlike traditional emulators such as Citra or Lime3DS, which translate instructions on the fly during gameplay, static recompilation converts a game's binary into standard source code ahead of time. This specific tool joins a growing wave of 3DS translation efforts that began surfacing in late September and October 2026, alongside desktop-focused projects like 3dsrecomp and its companion Rust runtime, Zakuro.
While Zakuro targets desktop PCs and leans on an interpreter fallback for instructions its recompiler misses, any3ds is designed with a stricter constraint in mind: getting 3DS games running at full speed on iOS. Apple's operating system blocks Just-In-Time (JIT) compilation for standard apps, forcing mobile 3DS emulators to rely on slow CPU interpreters. Translating the entire binary before execution bypasses that roadblock entirely. For now, any3ds runs on Linux (including WSL2) and as a standalone Windows executable, with an iOS port via Metal planned once the core architecture matures.
Translating ARMv6K without a safety net

The pipeline starts with a Python-based recompiler built on the Capstone disassembly framework. It reads a user's decrypted cartridge dump, parsing both the main code.bin executable and the 3DS's relocatable CRO modules without needing debug symbols. Every ARMv6K and VFPv2 instruction gets converted into C functions operating on a CPU context struct, which Clang then compiles into a native executable.
Discovering every function inside a retail game binary is notoriously messy. Hajwani had to account for jump tables, literal pools, disguised calls, and the dispatch table for the game's internal script interpreter, writing new detection rules whenever a crash pointed to an untranslated memory address. To make sure the generated C code behaves identically to real hardware, the project uses differential testing that runs test programs instruction by instruction in lockstep with the Unicorn CPU emulator, comparing every register, flag, and memory write.
Everything surrounding the recompiled CPU code was written from scratch using public documentation from 3dbrew rather than borrowing from existing emulators. That includes a clean-room high-level emulation (HLE) operating system covering the kernel, threads, a deterministic scheduler, and system services, plus a custom implementation of the 3DS's DMP PICA200 graphics chip handling all 14 texture formats and per-pixel fragment lighting. Writing a clean-room OS and GPU stack just to avoid Apple's JIT restrictions is an absurd amount of work, though it's hard to argue with the results when a retail RPG actually boots.
Silent strolls through Lumiose City
Right now, 49 of devkitPro's 62 3DS homebrew examples render with accurate frames, and the 2013 Game Freak RPG Pokémon X is playable from the intro and name entry through Vaniville Town, Route 1, Aquacorde Town, and into Lumiose City. The newly added Vulkan backend translates the PICA200 pixel stage into a single GLSL shader using the exact same integer arithmetic as the project's software renderer, allowing frames to be compared directly between the two for accuracy.
That Vulkan renderer brings framerates in Lumiose City to between 42 and 75 fps on an RTX 4060 laptop, up from roughly 10 fps when drawing on the CPU. Vertex shading is still handled on the processor, which remains the main bottleneck preventing a locked 60 fps.
There's no audio yet. The system answers the DSP's AAC audio protocol with pure silence so the game doesn't hang. I'm curious how well the ahead-of-time compilation holds up once the player gets deeper into Pokémon X, where complex battle scripts and dynamic overlays tend to break fragile translation rules. Before tackling the iOS Metal backend, Hajwani plans to move vertex shading off the CPU, hook up sound output, and implement savestates. The source code is available under a GPL v2+ license and requires users to supply their own decrypted cartridge dumps.
Comments ()