0xreversed/with.ai
Research and benchmarksWorksSource available
Target: snes-recomp

snes-recomp Static SNES ROM Recompiler

by AlexPerez7 Repository0 views
Platform
Windows, Linux, macOS
Outcome
Works

Evidence at a glance

Loading source evidence…

What was done

snes-recomp is a static recompiler that translates SNES ROMs into C code, which is then compiled with a custom runtime to produce native executables. It supports features like widescreen and game-specific profiles, while maintaining strict separation from copyrighted game assets.

The snes-recomp project is a static recompiler written in Rust that translates SNES ROMs (CPU 65816) into C code. This generated C code is compiled alongside a custom runtime—which includes implementations for the bus, DMA/HDMA, PPU, SPC700, DSP, input, and save states—to produce a native executable. The project functions as an engine, requiring separate game-specific profiles to operate. The author reports that the engine successfully generates native ports, with The Legend of Zelda: A Link to the Past serving as the primary implementation example. The project documentation notes several technical limitations: the DSP interpolation uses a bell-shaped kernel rather than the exact hardware Gaussian table, the PPU does not emulate interlacing, and cycle-accurate behaviors are not reproduced as the clock is proportional by block. Commit history indicates that Claude Sonnet 5.5 was a co-author on numerous commits related to menu implementation, widescreen functionality, and documentation updates. The project maintains a strict legal stance, requiring users to provide their own legally obtained ROMs and explicitly prohibiting the distribution of generated C code or game assets.

Reproduce it

setup
Users must provide a valid SNES ROM and a corresponding game profile. The engine can be built using Rust's cargo. For the interactive frontend, SDL2 development files are required. The snes-port tool handles the build process, utilizing local compilers like gcc, clang, or MSVC, or optionally downloading TinyCC.