A tool to statically recompile SNES games into native executables. It works by reading the raw bytes of a ROM and then generate C++ code of the game. The project is in a very early stage. So while C++ code generation is okay as of now. It still needs a few more polishing to be compiled without any errors.
Demonstration of the tool itself using a clean dump of Super Mario World without a 512-byte header.
2026-03-29.19-54-43.mp4
SNES emulation is already accurate enough that technically a Static Recompiler isn't really "needed". The reason most game consoles like the N64 have a Static Recompiler is because N64 emulation is still a mess in 2026. And most recompiled N64 games offer enhancements like Mods, Ray Tracing and 120 FPS support. However. There are some benefits of a Statically Recompiled SNES game.
Static recompilation converts SNES machine code into native C or machine code ahead of time. For most game consoles like the N64 or PS2. This can matter alot. But for the SNES. it’s like putting a jet engine on a bicycle. So it's kind of pointless here.
Recompiled games can run as standalone apps (no emulator needed) and be ported to weird platforms (mobile, web, consoles). Basically: turning ROMs into programs, not just data for an emulator
A static recompiler allows you to modify a game in C++ instead of Assembly. Which makes the process of making mods for the game much easier. The bad news is a Static Recompiler does not generate readable human code. You have function names like sub_0xXXXX address names like addr_0xXXXX. The good news is that we are been planning to release a Table that documents these recompiled functions and lists a possible function name for the specific function in each game. Like UpdateMarioPhysics() or HandleMarioPhysics().
The only game that currently works with this tool is Super Mario World. If you try to use the tool with a different game like Donkey Kong Country. You will get empty generated CPP code. The tool itself has only been tested with a clean dump of Super Mario World that does not include a 512-Byte header. So the generated CPP code might be different if you do have a dump of Super Mario World that includes a 512-Byte header (Usually present in .smc files).
First. Download MSYS2 and CMake. Ninja is also heavily recommended.
Open the UCRT64 terminal and enter
git clone https://github.com/ExpansionPak/SuperRecomp.git
Now. Inside your cloned repo. Enter
mkdir build && cd build
cmake ..
cmake --build . --target RecompTool
Or. If you have Ninja. Enter ninja RecompTool instead pf cmake --build . --target RecompTool
./RecompTool <path/to/rom>
