NES-GO
Another NES Emulator implemented in Golang
Dependencies
MacOS
brew install glfw
brew install portaudio
Linux/Unix Based Systems or Windows
Refer to https://www.glfw.org/
And http://www.portaudio.com/
Usage
go run cmd/nesgo/main.go <path-to-rom>
Key bindings
Currently the keys are statically mapped, dynamic mapping through a configuration file will be supported in the future. Only the first controller is supported.
Controller 1 (keyboard)
- A - N
- B - M
- Up/Down/Left/Right - WSAD
- Start - Enter
- Select - Backspace
Special keys
- E - enable/disable emulation
- L - enable/disable disassembler in stdout
- Space - Step one frame
- O - Cycle through: PPU rendered output - Pattern table 1 - Pattern table 2
- P - Cycle through palette index 0-7 (when showing pattern tables)
Progress:
- - CPU implementation
- - Basic cartridge / mapper implementation
- - GUI framework: glfw/gl
- - Basic controller support
- - PPU background rendering
- - PPU foreground rendering (sprites)
- - Framework for audio
- - APU (audio processing unit)
- - Multiple controller mappings
- - Dynamic controller mapping
- - Save state
- - Battery support
- - More mappers... (contributions are appreciated)
Notes:
-
The code is set up as simple as possible, depicting all steps in emulation, specially when rendering the image in the PPU, optimisations are omitted intentionally
References: