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.
- 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
- Web-based debugger with HTTP endpoints
- CPU instruction tracing to console/file
- Execution control (entry point, stop address)
- Memory and register inspection via debugger
- Written in pure Go with no CGO dependencies
- Console mode available (no GUI dependencies)
- Cross-platform support where Go and SDL2 are available
- Go 1.22 or later
- SDL2 libraries (optional, for GUI mode)
go install github.com/retroenv/nesgoemu@latest
This installs the binary to your GOPATH/bin
directory.
git clone https://github.com/retroenv/nesgoemu.git
cd nesgoemu
go install .
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 for detailed platform-specific installation instructions.
Run a NES ROM:
nesgoemu game.nes
This opens the game in a SDL window with the default controls.
- Arrow keys: D-Pad
- Z: A button
- X: B button
- Enter: Start
- Backspace: Select
- docs/advanced-usage.md - Debugging, automation, and advanced workflows
- docs/development.md - Development guide, building, testing, and contributing
- docs/gui.md - GUI setup and SDL2 installation
MIT License - see LICENSE file for details.
- NESDev community for NES hardware documentation
- SDL2 for cross-platform multimedia support