An NES emulator written in Rust, including a GUI debug mode.
- Multithreading
- Memory decomp + editor
- Pattern tables viewer
- Debug UI powered by
egui - CLI ROM loading
- Expandable mapper support
- Built-in screenshotting
demo.webm
Mapper support will grow in the future.
Currently implemented:
- Mapper 0 (NROM)
In progress:
- Mapper 1
CrabNES was written as an educational learning project for myself.
I originally wanted to dig deeper into the Rust programming language by building projects. As someone who already wrote a Game Boy emulator over a year ago, an NES emulator was the perfect project for this role as it was already on my list.
My primary focus with this emulator was memory safety. Coming from C++, I wanted to build an emulator that was immune to things like segfaults and dangling points. Rust proved to be a fantastic language for this purpose, especially due to its excellent developer experience which made it a blast to use.
| Emulator | Keyboard |
|---|---|
| Toggle Debug Mode | m |
| Take Screenshot | o |
In debug mode, you can use the Cartridge Loader to select a valid ROM and load it into the emulator.
Tip
You can optionally provide a path to this ROM as an argument when executing the binary. When the emulator boots, it will automatically load this ROM.
| NES | Keyboard |
|---|---|
| A | Z |
| B | X |
| Select | Shift |
| Start | Enter |
| D-pad | Arrows |
Pre-built binaries for Windows, macOS, and Linux are already available in the releases section.
To compile a binary yourself, simply run cargo build --release.