A decent multiplatform NES emulator built using Rust. Try it now in your browser.
- Web
- Android
- Desktop
- Embedded (ESP32)
- Supports iNES 1.0 file format
- Supports basic mappers
- Fairly decent audio quality
- Implements some of the original hardware quirks
Important
The Rust toolchain is required to build the main library.
Requirements:
Scripts:
npm run wasm # build the WASM artifacts using wasmpack
npm run dev # run the dev server
npm run build # build the website
Requirements:
- Android studio
- NDK
aarch64-linux-android
andx86_64-linux-android
Rust targets
Setup:
Edit your global cargo config in ~/.cargo/cargo.toml
and use linkers from NDK:
[target.aarch64-linux-android]
linker = "your-ndk-pah/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android34-clang"
[target.x86_64-linux-android]
linker = "your-ndk-pah/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android34-clang"
Gradle scripts:
buildRustArm64
: Build the shared library for arm64buildRustx86_64
: Build the shared library for x86_64buildRs
: Runs both
This project wouldn't have been possible without the help of the following ressources:
- nesdev.org: Covers everything needed to build a NES emulator.
- 6502 instruction set reference: A detailed reference for the MOS6502 CPU.
- Displaced Gamers: Has a lot of interesting technical video about the NES.
- javidx9's NES emulator series: Guided me at the beginning of my journey.