fogleman /nes

NES emulator written in Go.

★ 5,663⑂ 529👁 139⑃ 24● 34▤ 0
GoCreated 2015-03-03
5,663
stars
+0+0+4
529
forks
139
watchers
24
prs
34
issues
0
releases
–
discussions

README

Summary

This is an NES emulator written in Go.

 Screenshots

!Screenshots

 Title Screens

http://www.michaelfogleman.com/static/nes/

 Dependencies

    github.com/go-gl/gl/v2.1/gl
    github.com/go-gl/glfw/v3.1/glfw
    github.com/gordonklaus/portaudio

The portaudio-go dependency requires PortAudio on your system:

 To build portaudio-go, you must first have the PortAudio development headers
 and libraries installed. Some systems provide a package for this; e.g., on
 Ubuntu you would want to run apt-get install portaudio19-dev. On other systems
 you might have to install from source.

On Mac, you can use homebrew:

    brew install portaudio

 Installation

The go get command will automatically fetch the dependencies listed above,
compile the binary and place it in your $GOPATH/bin directory.

    go get github.com/fogleman/nes

 Usage

    nes [rom_file|rom_directory]

1. If no arguments are specified, the program will look for rom files in
the current working directory.

2. If a directory is specified, the program will look for rom files in that
directory.

3. If a file is specified, the program will run that rom.

For 1 & 2, the program will display a menu screen to select which rom to play.
The thumbnails are downloaded from an online database keyed by the md5 sum of
the rom file.

!Menu Screenshot

 Controls

Joysticks are supported, although the button mapping is currently hard-coded.
Keyboard controls are indicated below.

| Nintendo              | Emulator    |
| --------------------- | ----------- |
| Up, Down, Left, Right | Arrow Keys  |
| Start                 | Enter       |
| Select                | Right Shift |
| A                     | Z           |
| B                     | X           |
| A (Turbo)             | A           |
| B (Turbo)             | S           |
| Reset                 | R           |

 Mappers

The following mappers have been implemented:

 NROM (0)
 MMC1 (1)
 UNROM (2)
 CNROM (3)
 MMC3 (4)
 AOROM (7)

These mappers cover about 85% of all NES games. I hope to implement more
mappers soon. To see what games should work, consult this list:

NES Mapper List

 Known Issues

 there are some minor issues with PPU timing, but most games work OK anyway
 the APU emulation isn't quite perfect, but not far off

 Documentation

Interested in writing your own emulator? Curious about the NES internals? Here
are some good resources:

 NES Documentation (PDF)
 NES Reference Guide (Wiki)
 6502 CPU Reference

Snapshot: 2026-11-04T14:00:00Z · Data license Apache-2.0 · JSON