Part of a series of articles on
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.
- Homepage: http://www.dwedit.org/gba/goombacolor.php
- Type: Emulator
- Platform: GBA
- License: Public Domain/GPL
- Current version: 2008-03-31
- Last updated: 2008-03-31
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.