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

Folders and files

NameName
Last commit message
Last commit date

Latest commit

05b68de · Mar 21, 2022
Jan 6, 2022
Nov 3, 2021
Mar 21, 2022
Mar 21, 2022
Jan 5, 2022
Feb 5, 2022
Aug 28, 2021
Dec 31, 2021
Mar 12, 2022
Mar 12, 2022
Aug 28, 2021

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