Skip to content

gabe565/gones

Repository files navigation

GoNES

GitHub release (latest by date) Build Go Report Card Quality Gate Status

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

  • CPU implementation
    • CPU is stable, and nestest.nes passes.
  • Cartridge implementation
    • Support for mappers
    • Common mappers implemented
      • Supported mappers: 0, 1, 2, 3, 4, 7, 69, 71 (84.34% of official NES games)
  • PPU implementation (graphics)
    • Background rendering
    • Sprite rendering
  • GUI
    • Rendering works, but menu options need to be added.
  • Basic controller support
    • Player 1
    • Player 2
    • External controllers
  • APU implementation (audio)
  • Save file for games with batteries
  • Save states
  • Configuration (remap controllers, video config, sound config, etc)
    • Config file
    • Config UI
  • Cheats

References