{"id":21243599,"url":"https://github.com/gabe565/gones","last_synced_at":"2025-07-10T20:31:58.724Z","repository":{"id":64297375,"uuid":"562984009","full_name":"gabe565/gones","owner":"gabe565","description":"🕹️ An NES emulator written in Go.","archived":false,"fork":false,"pushed_at":"2024-04-12T16:08:51.000Z","size":3838,"stargazers_count":15,"open_issues_count":19,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-04-13T20:50:29.464Z","etag":null,"topics":["6502-processor","emulation","emulator","nes","nintendo","nintendo-nes"],"latest_commit_sha":null,"homepage":"https://gones.gabe565.com","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gabe565.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2022-11-07T17:03:06.000Z","updated_at":"2024-04-15T17:34:59.407Z","dependencies_parsed_at":"2024-04-15T17:45:20.509Z","dependency_job_id":null,"html_url":"https://github.com/gabe565/gones","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabe565%2Fgones","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabe565%2Fgones/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabe565%2Fgones/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabe565%2Fgones/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gabe565","download_url":"https://codeload.github.com/gabe565/gones/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225653659,"owners_count":17502940,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["6502-processor","emulation","emulator","nes","nintendo","nintendo-nes"],"created_at":"2024-11-21T01:12:55.147Z","updated_at":"2024-11-21T01:12:55.704Z","avatar_url":"https://github.com/gabe565.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\u003ch1\u003e\n  \u003cimg src=\"assets/icon.svg\" width=\"192\" align=\"left\"/\u003e\n  GoNES\n\u003c/h1\u003e\n\n[![GitHub release (latest by date)](https://img.shields.io/github/v/release/gabe565/gones)](https://github.com/gabe565/gones/releases)\n[![Build](https://github.com/gabe565/gones/actions/workflows/build.yml/badge.svg)](https://github.com/gabe565/gones/actions/workflows/build.yml)\n[![Go Report Card](https://goreportcard.com/badge/github.com/gabe565/gones)](https://goreportcard.com/report/github.com/gabe565/gones)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=gabe565_gones\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=gabe565_gones)\n\n_An NES emulator written in Go._\n\n\u003c/div\u003e\n\n## Install\n\n### Homebrew (macOS)\n\n```shell\nbrew install gabe565/tap/gones --no-quarantine\n```\n\n### Binary\n\nAutomated builds are uploaded during the release process. See the [latest release](https://github.com/gabe565/gones/releases/latest) for download links.\n\n### Web\n\nGoNES supports emulation in a web browser by compiling to WASM.  \nA hosted instance is available at [gones.gabe565.com](https://gones.gabe565.com).\n\n### From Source\n\n\u003cdetails\u003e\n  \u003csummary\u003eClick to expand\u003c/summary\u003e\n\n#### Requirements\n\nRendering uses [hajimehoshi/ebiten](https://github.com/hajimehoshi/ebiten) which requires\nOpenGL development libraries to compile.\nSee [ebiten install steps](https://ebitengine.org/en/documents/install.html).\n\n#### Installation\nMake sure you have [Go](https://go.dev/doc/install) and the [requirements](#requirements) installed, then run:\n\n```shell\ngo install gabe565.com/gones@latest\n```\n\u003c/details\u003e\n\n## Usage\n### Application\nWhen started, GoNES will open a file picker. Choose the `.nes` file to start emulation.\n\n### Terminal\n\u003cdetails\u003e\n  \u003csummary\u003eClick to expand\u003c/summary\u003e\n\nGoNES also supports being launched from a terminal.\n\n```shell\ngones ROM_FILE\n```\n\nSee [docs](./docs/gones.md) for the full command line usage documentation.\n\u003c/details\u003e\n\n## Configuration\n\nA configuration file will be generated the first time GoNES is run. Depending on your operating system, the file will be available at:\n- **Windows:** `%AppData%\\gones\\config.toml`\n- **macOS:** `~/Library/Application Support/gones/config.toml`\n- **Linux:** `~/.config/gones/config.toml`\n\nAn example configuration is also available at [`config_example.toml`](config_example.toml).\n\n## Keybinds\n\nKeys are configurable, but the default values are listed below.\n\n### Player 1\n\n| Nintendo   | Emulator    |\n|------------|-------------|\n| A          | M           |\n| B          | N           |\n| Directions | WASD        |\n| Start      | Enter       |\n| Select     | Right Shift |\n| A (Turbo)  | K           |\n| B (Turbo)  | J           |\n\n### Player 2\n\n\u003cdetails\u003e\n  \u003csummary\u003eClick to expand\u003c/summary\u003e\n\n| Nintendo   | Emulator          |\n|------------|-------------------|\n| A          | Num Pad 3         |\n| B          | Num Pad 2         |\n| Directions | Home/Del/End/PgDn |\n| Start      | Num Pad Enter     |\n| Select     | Num Pad Plus      |\n| A (Turbo)  | Num Pad 6         |\n| B (Turbo)  | Num Pad 5         |\n\n\u003c/details\u003e\n\n### Other\n\n| Action            | Key      |\n|-------------------|----------|\n| Save State        | F1       |\n| Load State        | F5       |\n| Undo Save State   | Shift+F1 |\n| Undo Load State   | Shift+F5 |\n| Fast Forward      | F (Hold) |\n| Reset             | R (Hold) |\n| Toggle Fullscreen | F11      |\n| Screenshot        | \\        |\n\n#### Debugging\n\n\u003cdetails\u003e\n  \u003csummary\u003eClick to expand\u003c/summary\u003e\n\n| Action                                            | Key |\n|---------------------------------------------------|-----|\n| Toggle step debugging                             | `   |\n| Toggle stdout trace log (when step debug enabled) | Tab |\n| Step to next frame                                | 1   |\n| Run to next render                                | 2   |\n\n\u003c/details\u003e\n\n## Milestones\n\n- [x] CPU implementation\n  - CPU is stable, and `nestest.nes` passes.\n- [x] Cartridge implementation\n  - [x] Support for mappers\n  - [x] Common mappers implemented\n    - Supported mappers: 0, 1, 2, 3, 4, 7, 69, 71 (84.34% of official NES games)\n- [x] PPU implementation (graphics)\n  - [x] Background rendering\n  - [x] Sprite rendering\n- [x] GUI\n  - Rendering works, but menu options need to be added.\n- [x] Basic controller support\n  - [x] Player 1\n  - [x] Player 2\n  - [ ] External controllers\n- [x] APU implementation (audio)\n- [x] Save file for games with batteries\n- [x] Save states\n- [x] Configuration (remap controllers, video config, sound config, etc)\n  - [x] Config file\n  - [ ] Config UI\n- [ ] Cheats\n\n## References\n\n- [NESDev wiki](https://www.nesdev.org/wiki/Nesdev_Wiki)\n- [NESDev 6502 Reference](https://www.nesdev.org/obelisk-6502-guide/)\n- [NESDev Undocumented Opcodes](https://www.nesdev.org/undocumented_opcodes.txt)\n- [Writing an NES Emulator in Rust](https://bugzmanov.github.io/nes_ebook/)\n- [fogleman/nes](https://github.com/fogleman/nes)\n- [ltriant/nes](https://github.com/ltriant/nes)\n- [i82orbom/nesgo](https://github.com/i82orbom/nesgo)\n- [No-Intro](https://no-intro.org)\n- [NES Composite Palette Project](https://www.firebrandx.com/nespalette.html)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgabe565%2Fgones","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgabe565%2Fgones","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgabe565%2Fgones/lists"}