Skip to content
/ rsnes Public

(WIP!) SNES emulator written in rust

License

Notifications You must be signed in to change notification settings

nat-rix/rsnes

Repository files navigation

rsnes

rsnes logo

A SNES emulator written in Rust

Implementation Status

Many games are already playable, but some graphics and sounds are faulty. Comparatively functioning games are e.g. Donkey Kong Country, Wolfenstein 3D, F-Zero, Super Mario World, Super Mario Kart, The Legend of Zelda, Super Street Fighter II.

Usage

In the default configuration, controller port 1 is connected to a standard controller and port 2 is left unconnected. These keyboard keys will drive controller 1:

Keyboard key on QWERTY Controller key
W
A
S
D
Q L
E R
Left Alt Start
Right Alt Select
J A
K B
L X
; * Y
0-9 Store Save State 0-9
Shift + 0-9 Load Save State 0-9

* the button right of L

Configuration

You can configure rsnes with a TOML configuration file. You can provide this file by using the option --config <PATH> or by placing it into one of these paths:

  • $HOME/.config/rsnes/config.toml
  • $HOME/.config/rsnes.toml
  • /etc/rsnes.toml

See emulator/example.toml for documentation.

Structure

This repository is a workspace consisting of two crates

  • rsnes - the SNES backend library (located in /rsnes/)
  • rsnes-emulator - a sample frontend implementation using winit and wgpu (located in /emulator/)

⚠️ Please note that the rsnes API is neither tested nor documented (well) ⚠️

⚠️ Also note, that rsnes-emulator is only tested on Linux/X11 ⚠️

Features

This is a set of features to be implemented in the future (sorted by priority)

  • Mode 7 support
  • Sprite support
  • Color math
  • S-DSP echo effect support
  • S-DSP noise effect support
  • PPU Mosaic effect
  • Save game to files
  • SA-1 support
  • Real gamepad input support for rsnes-emulator (see winit#944, maybe use unstable fork or branch?)
  • Improved documentation
  • Tests
    • 65816 processor instruction tests
    • SPC-700 processor instruction tests
    • Audio tests
    • Video output tests
  • configurable UI
    • configurable key bindings
  • emulator running also on WASM
  • DSP coprocessor support
    • DSP-1, DSP-1A, DSP-1B
    • DSP-2, DSP-3, DSP-4 (low priority)
    • ST010, ST011 (very low priority)
  • GSU coprocessor support (also known as Super FX)
    • GSU1
    • GSU2
  • Complete the 65816 instruction set
  • Complete the SPC700 instruction set
  • Complete the NEC μPD77C25 instruction set
  • Complete the GSU instruction set
  • Multitap (MP5) controller support
  • SNES Mouse support
  • SNES Super Scope support
  • Save States
  • Capcom CX4 coprocessor support (this processor is only used in Mega Man X2 and Mega Man X3)
  • SPC7110 data decompression chip

Contributing

Contributions of any kind (bug reports, feature requests, pull requests, …) are very welcome.

About

(WIP!) SNES emulator written in rust

Topics

Resources

License

Stars

Watchers

Forks