gones
gones copied to clipboard
🕹️ An NES emulator written in Go.
Install
Homebrew (macOS)
brew install gabe565/tap/gones --no-quarantine
Binary
Automated builds are uploaded during the release process. See the latest release for download links.
From Source
Click to expand
Requirements
Rendering uses hajimehoshi/ebiten which requires OpenGL development libraries to compile. See ebiten install steps.
Installation
Make sure you have Go and the requirements installed, then run:
go install github.com/gabe565/gones@latest
Usage
Application
When started, GoNES will open a file picker. Choose the .nes
file to start emulation.
Terminal
Click to expand
GoNES also supports being launched from a terminal.
gones ROM_FILE
See docs for the full command line usage documentation.
Configuration
A configuration file will be generated the first time GoNES is run. Depending on your operating system, the file will be available at:
-
Windows:
%AppData%\gones\config.toml
-
macOS:
~/Library/Application Support/pwgen-go/config.toml
-
Linux:
~/.config/gones/config.toml
An example configuration is also available at config_example.toml
.
Keybinds
Keys are configurable, but the default values are listed below.
Player 1
Nintendo | Emulator |
---|---|
A | M |
B | N |
Directions | WASD |
Start | Enter |
Select | Right Shift |
A (Turbo) | K |
B (Turbo) | J |
Player 2
Click to expand
Nintendo | Emulator |
---|---|
A | Num Pad 3 |
B | Num Pad 2 |
Directions | Home/Del/End/PgDn |
Start | Num Pad Enter |
Select | Num Pad Plus |
A (Turbo) | Num Pad 6 |
B (Turbo) | Num Pad 5 |
Other
Action | Key |
---|---|
Save State | F1 |
Load State | F5 |
Undo Save State | Shift+F1 |
Undo Load State | Shift+F5 |
Fast Forward | F (Hold) |
Reset | R (Hold) |
Toggle Fullscreen | F11 |
Debugging
Click to expand
Action | Key |
---|---|
Toggle step debugging | ` |
Toggle stdout trace log (when step debug enabled) | Tab |
Step to next frame | 1 |
Run to next render | 2 |
Milestones
- [x] CPU implementation
- CPU is stable, and
nestest.nes
passes.
- CPU is stable, and
- [x] Cartridge implementation
- [x] Support for mappers
- [x] Common mappers implemented
- Supported mappers: 0, 1, 2, 3, 4, 7, 69, 71 (84.34% of official NES games)
- [x] PPU implementation (graphics)
- [x] Background rendering
- [x] Sprite rendering
- [x] GUI
- Rendering works, but menu options need to be added.
- [x] Basic controller support
- [x] Player 1
- [x] Player 2
- [ ] External controllers
- [x] APU implementation (audio)
- [x] Save file for games with batteries
- [x] Save states
- [x] Configuration (remap controllers, video config, sound config, etc)
- [x] Config file
- [ ] Config UI
- [ ] Cheats