rust-nes-emulator icon indicating copy to clipboard operation
rust-nes-emulator copied to clipboard

NES Emulator written in Rust

rust-nes-emulator

Test Deploy Build for Windows

NES Emulator written in Rust

Super Mario Bros. Donkey Kong Mario Bros.
mario-gif donkey-gif mariobros-gif

Let's Play

rustc 1.39.0-nightly required (for embedded optimization...)

Desktop Application

High Performance.

desktop

$ cd desktop
$ cargo run --release

Build on Docker

$ docker-compose run build-desktop-release

WebAssembly Application

wasm

Playgound

Build locally

environment(for ubuntu)
$ sudo apt install nodejs npm
$ sudo npm install -g n
$ sudo n 10.15.1
$ cargo install wasm-pack
build
$ cd wasm
$ wasm-pack build --release
$ npm install
$ npm run build

Build on Docker

$ docker-compose run build-wasm-release
$ docker-compose run build-wasm-webpage

Embedded for stm32f769

embedded

STM32F769I-DISCO - STMicroelectronics

Work in Progress...

The following are derived repositories that are analyzing and implementing improvements to the performance issues.

kamiyaowl/rust-nes-emulator-embedded - GitHub

Build locally

environment(for ubuntu)
$ rustup install nightly
$ rustup run nightly rustup target add thumbv6m-none-eabi thumbv7m-none-eabi thumbv7em-none-eabi thumbv7em-none-eabihf
$ sudo apt install gcc-arm-none-eabi gcc g++
build
$ cd embedded
$ rustup run nightly cargo build --release
$ make clean && make

Build on Docker

$ docker-compose run build-embedded-lib
$ docker-compose run build-mbed

Build Artifacts

see Github Actions#Deploy.


Screenshot (Operation checked)

Super Mario Bros.

mario

Donkey Kong

donkey

Mario Bros.

mariobros

Ice Climber.

iceclimber

nestest (unofficial opcode)

nestest_extra

nestest (official opcode)

nestest_normal

Hello World

hello


Feature & Known Issue

  • [x] CPU
    • [x] Register
    • [x] Interrupt
    • [x] Official opcode
    • [x] Unofficial opcode
  • [x] Cassette(Mapper)
    • [x] NROM(Mapper0)
    • [ ] UNROM
    • [ ] MMC1
    • [ ] MMC3
  • [x] PPU
    • [x] OAM DMA
    • [x] BG
      • [x] Nametable Mirroring
      • [x] Scroll
        • [ ] Vertical Scroll Bug(#87)
    • [x] Sprite
      • [x] 8*8
      • [x] 8*16
      • [ ] Sprite 0 hit bug(#40)
  • [x] PAD
    • [x] Joypad1
  • [ ] APU
    • [ ] Pulse Wave1
    • [ ] Pulse Wave2
    • [ ] Tri Wave
    • [ ] Noise
    • [ ] DMC
  • [ ] Emulation feature
    • [x] Snapshot
    • [x] Restore
    • [ ] ROM Selection Bootloader

Test ROMs

Thank you for the wonderful !

path from url
roms/other/hello.nes コンソールゲーム機研究所 http://hp.vector.co.jp/authors/VA042397/nes/sample.html
roms/nes-test-roms christopherpow/nes-test-roms - GitHub https://github.com/christopherpow/nes-test-roms