Skip to content
šŸŽ® A NES emulator written in Go
Branch: master
Clone or download
Fetching latest commitā€¦
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

šŸŽ® awesomenes

A NES emulator written in Go.

dk smb


Getting and running

awesomenes uses sdl2 for rendering and input processing. It may be necessary to install it beforehand. On macOS, using homebrew:

$ brew install sdl2

Other systems/package managers should provide similar sdl2/libsdl2 packages. Then use the go get:

$ go get
$ awesomenes MY_ROM.nes


Games that use the mapper 0 (NROM) mostly work, although without audio so far. Games that use mapper 4 (mmc3) should work with some eventual glitches.

Tested games:

  • Donkey Kong (NROM)
  • Super Mario Bros. (NROM)
  • Super Mario Bros. 2 (mmc3)
  • Super Mario Bros. 3 (mmc3, with some glitches)

Controller inputs

Keyboard (controller 1)

Arrow keys  -> NES arrows
A           -> NES A
S           -> NES B
Enter       -> NES start
Right shift -> NES select

Nintendo Switch Joycon (controller 1)

Directional -> NES arrows
Down arrow  -> NES A
Right arrow -> NES B
SL          -> NES select
SR          -> NES start


āœ… CPU emulation

āœ… Video support (picture processing unit - PPU)

āœ… Keyboard input

āœ… Mapper 0

āœ… Joystick input (tested with Nintendo Switch Joycon)

āœ… Mapper 4 (...kinda)

āž– More mappers

āž– Save state

āž– Audio support (audio processing unit - APU)


All the information used to build this emulator was found on the awesome nesdev wiki.

You canā€™t perform that action at this time.