-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Rusty2600 is a cycle-accurate Atari 2600 (VCS) emulator written in pure Rust. It targets the Mesen2 / ares / higan accuracy bar: a master-clock lockstep scheduler running at TIA-color-clock resolution (3.579545 MHz NTSC), with the 6507 CPU advancing on every third clock and WSYNC/RDY beam-stalls freezing the CPU mid-cycle while the rest of the machine keeps running. It clears its bundled Klaus2m5 functional and decimal-mode oracles bit-exact and passes the trimmed SingleStepTests 6502 corpus 4,660/4,660 cases across all 233 opcodes, with the full ~10K-case-per-opcode corpus verified weekly in CI.
Race the beam. Get it exact.
Beyond reference accuracy, Rusty2600 is a real emulation platform: all 26 of the console's catalogued bankswitch schemes wired into automatic detection, a real debugger (live 6507/TIA/RIOT/memory panels, breakpoints, a standalone disassembler), a real RetroAchievements backend, save-states, rewind, and run-ahead, 2-player rollback netplay (direct-IP, STUN-assisted, and browser WebRTC), a Lua scripting engine, a growing shader stack (CRT scanline, NTSC composite YIQ decode, hqNx/xBRZ upscaling), and Android/iOS apps built on a shared UniFFI bridge.
All of this rests on a strict bit-determinism contract: same seed, ROM, and input sequence yield a bit-identical framebuffer and audio. The frontend is pure Rust (winit + wgpu + cpal + egui) with native binaries for Linux, macOS, and Windows, plus a WebAssembly build that runs in the browser.
Try it in your browser — no install required.
Rusty2600 combines accuracy-first emulation of one of the industry's oldest and most idiosyncratic consoles with modern tooling and the safety guarantees of Rust. The 2600 has no framebuffer of its own — the TIA races the electron beam and the program itself is responsible for timing every visible pixel — which makes cycle-exactness a correctness requirement, not a nice-to-have.
-
Reference-grade timing — an integer TIA-color-clock lockstep scheduler (not catch-up), the 6507 on every third clock,
WSYNC/RDYbeam-stalls modeled as a genuine sub-instruction freeze. - Determinism as a hard contract — same seed, ROM, and input sequence yield a bit-identical framebuffer and audio. This is what makes save-state round-trips, regression testing, TAS replay, and rollback netplay correct by construction.
- An honesty gate, not a marketing number — every bankswitch scheme is classified Core / Curated / BestEffort; a BestEffort scheme can never silently back the accuracy oracle, enforced structurally by CI.
-
Safe, modular Rust — the chip stack (
rusty2600-cpu,-tia,-riot,-cart,-core) isno_std + alloc, one-directional, and independently testable; the onlyunsafelives behind the frontend/FFI boundary.
Use the sidebar to navigate the documentation.
- New users should start with Getting-Started and Building-from-Source.
- Developers looking to understand the core engine should read the Architecture-Overview and the deep-dives into the CPU-6507, TIA (video and audio — a genuine structural difference from most consoles), and RIOT.
- See how the Cart-Catalogue closes all 26 of the console's bankswitch schemes under an honesty gate.
- Check Testing-Strategy to see how accuracy is verified layer by layer.
- Netplay-and-Rollback, Scripting-Engine, and Mobile-and-Cross-Platform cover the platform features built on top of the accurate core.
- Deferred-Features is an honest running list of what's explicitly out of scope or not yet done.
Rusty2600 is a cycle-accurate Atari 2600 (VCS) emulator written in pure Rust. Licensed under MIT OR Apache-2.0. | GitHub Repository | Web Demo