From GbdevWiki
Jump to: navigation, search

Part of a series of articles on


For DOS/Windows

jsGB by Imran Nazar
JSGB by by Pedro Ladaria
GameBoy Online

For Handhelds
Lameboy DS for NDS
Goomba for GBA
Rin for PSP
TI-Boy SE for TI-83+ SE/TI-84


Goomba is a Game Boy emulator for the GBA, later updated to include GBC emulation under the name Goomba Color. It was created despite the fact that the GBA already has a GBC mode.

Goomba was written by Flubba in 2003 in ARM Assembly Language. Based off the source code structure of PocketNES, NES emulation code was replaced with Game Boy emulation code. In 2006, Dwedit created Goomba Color, a new version of Goomba which emulates the GBC.


How it works

Goomba Color works by emulating the CPU, then transforming the GBC's graphics requests into GBA format, so the GBA's own tile and sprite based hardware do all the graphics rendering. Goomba Color transforms tilemaps, tile graphics, palettes, and line-by-line scrolling for the GBA to render it.

Color 0 and High priority tiles

On the GBA, the transparent color is shared by all palettes. Because the GBA can not render a separate background color for each palette, Goomba Color underlays all tiles with a solid tile which contains the tile's background color. Additionally, the GBA can not selectively choose display tiles as high priority, so Goomba Color creates another layer containing only high priority tiles, and overlays that layer on top of main tiles.

These use up 3 background layers.


The GBA only has 4 background layers, so it can not provide 6 required layers to two screens side by side.

Goomba Color decides if a scanline contains:

  • Only the BG
  • Only the Window
  • Both the BG and Window

If the scanline contains only BG or Window, a full 3 background layers are allocated fully emulate the tilemap. If the scanline contains both a BG or Window side by side, high priority tiles are sacrificed so that color 0 will display correctly.


  • Emulation has many accuracy and timing flaws.
  • Goomba Color does not accurately emulate HDMA or Timers.
  • The last scanline and scanline 0 are emulated incorrectly. The last scanline lasts a full scanline length instead of 8 cycles, and scanline #0 starts later, and does not last nearly two scanlines worth of time.
  • In older versions of Goomba prior to Goomba Color, LYC interrupts on scanline 0 were not supported at all.


(To do)