The go-getting Game Boy emulator - This is a mirror
Go 98.5%
Makefile 1.5%
Other 0.1%
278 1 0

Clone this repository

https://tangled.org/mx4ke.xyz/gogo-gb https://tangled.org/did:plc:d3ruypgmx2ilsybrtdrq2xpk/gogo-gb
git@knot.tangled.wizardry.systems:mx4ke.xyz/gogo-gb git@knot.tangled.wizardry.systems:did:plc:d3ruypgmx2ilsybrtdrq2xpk/gogo-gb

For self-hosted knots, clone URLs may differ based on your setup.

Download tar.gz
README.md

gogo-gb#

a gameboy (color) emulator for funsies

Current status#

  • Games are playable.
  • CPU cycle accuracy, but memory timings not correct.
  • Scanline rendering, so some games/homebrew using mid-scanline effects may look funky/broken.
    • This most visibly affects color games changing palettes mid-scanline.
  • No audio.

Usage#

$ gogo-gb --help
gogo-gb is a scrappy Game Boy emulator written in the Go programming language.

This is a side-project for fun with indeterminate goals and not a stable emulator.

Usage:
  gogo-gb [command]

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  help        Help about any command
  inspect     Inspect cartridges, emulator internals, etc.
  run         Run a cartridge

Flags:
  -h, --help         help for gogo-gb
      --log string   Path to log file. Default/empty implies stdout

Use "gogo-gb [command] --help" for more information about a command.

TODO#

  • Pass all of Blargg's cpu_instrs ROMs (verified via gameboy-doctor)
  • Implement MBC1
  • Implement MBC2
  • Implement MBC5
  • Implement MBC3 (w/o RTC)
  • Implement serial port (w/ option to log to console)
  • Implement timer
  • Pass Blargg's instr_timing.gb ROM (manually verified)
  • Implement a basic interactive debugger
  • Implement LCD
  • Implement (scanline) PPU, VRAM, OAM, etc.
  • Implement Joypad
  • Implement SRAM save & restore
  • Implement watch in debugger for memory & register changes
  • Implement RTC for MBC3
  • Pass dmg-acid2 test ROM
  • Pass cgb-acid2 test ROM
  • Implement GBC
  • FIFO-based rendering PPU (currently scanline)
  • Implement PPU registers debugging
  • Implement Sound/APU

Later/Maybe Never?#

Just being realistic about my likelihood of getting to these:

  • Pass Blargg's mem_timing ROMs (manually verified)
  • Pass Blargg's mem_timing-2 ROMs (manually verified)
  • Implement emulation for every known DMG bug
  • Implement SGB mode
  • Implement MBC6
  • Implement MBC7
  • Implement MBC1M, MMM01, other multicarts, or Hudson carts
  • Implement (any) accessories

Inspiration Material#