https://github.com/retroenv/nesgoemu
Nintendo Entertainment System emulator written in Golang
https://github.com/retroenv/nesgoemu
Last synced: 5 months ago
JSON representation
Nintendo Entertainment System emulator written in Golang
- Host: GitHub
- URL: https://github.com/retroenv/nesgoemu
- Owner: retroenv
- License: apache-2.0
- Created: 2024-01-19T15:46:08.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2026-01-12T05:55:39.000Z (5 months ago)
- Last Synced: 2026-01-12T15:46:07.492Z (5 months ago)
- Language: Go
- Size: 268 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/funding.yml
- License: LICENSE
Awesome Lists containing this project
README
# nesgoemu - a pure Golang NES Emulator
[](https://github.com/retroenv/nesgoemu/actions)
[](https://pkg.go.dev/github.com/retroenv/nesgoemu)
[](https://goreportcard.com/report/github.com/retroenv/nesgoemu)
[](https://codecov.io/gh/retroenv/nesgoemu)
nesgoemu is a Nintendo Entertainment System (NES) emulator written in Go. It aims for accurate hardware emulation while maintaining clean, maintainable code.
The emulator runs NES ROMs and includes debugging tools for development work. It can run in console mode with no external dependencies, or with a SDL-based GUI for full gaming experience.
## Features
### NES Hardware Emulation
* 6502 CPU emulation using retrogolib
* PPU (Picture Processing Unit) with basic rendering
* APU (Audio Processing Unit) - basic structure implemented
* Memory mappers: NROM, MMC1, CNROM, UxROM, AxROM, GTROM, UNROM512
### Development Tools
* Web-based debugger with HTTP endpoints
* CPU instruction tracing to console/file
* Execution control (entry point, stop address)
* Memory and register inspection via debugger
### Implementation
* Written in pure Go with no CGO dependencies
* Console mode available (no GUI dependencies)
* Cross-platform support where Go and SDL2 are available
## Installation
### Requirements
* Go 1.22 or later
* SDL2 libraries (optional, for GUI mode)
### Install from Go
```bash
go install github.com/retroenv/nesgoemu@latest
```
This installs the binary to your `GOPATH/bin` directory.
### Build from Source
```bash
git clone https://github.com/retroenv/nesgoemu.git
cd nesgoemu
go install .
```
### GUI Dependencies
The emulator can run in console mode without any additional libraries. For the SDL-based GUI, you'll need to install SDL2 development libraries.
See [docs/gui.md](docs/gui.md) for detailed platform-specific installation instructions.
## Usage
### Basic Usage
Run a NES ROM:
```bash
nesgoemu game.nes
```
This opens the game in a SDL window with the default controls.
### Controls
- Arrow keys: D-Pad
- Z: A button
- X: B button
- Enter: Start
- Backspace: Select
## Documentation
- [docs/advanced-usage.md](docs/advanced-usage.md) - Debugging, automation, and advanced workflows
- [docs/development.md](docs/development.md) - Development guide, building, testing, and contributing
- [docs/gui.md](docs/gui.md) - GUI setup and SDL2 installation
## License
MIT License - see [LICENSE](LICENSE) file for details.
## Acknowledgments
- NESDev community for NES hardware documentation
- SDL2 for cross-platform multimedia support