One or more
Header (48 B) Configuration (48 B)
GBC SRAM or savestate
(LZO compressed)
(Goomba only) Uncompressed SRAM of most recently played game
*Contains the checksum of the ROM whose SRAM is at 0xE000 (if any)
Goomba / Goomba Color emulator
(8–32 KB)
(8–32 KB)

Goomba ROM & save formats

Goomba is an emulator for the original Game Boy that runs on Game Boy Advance hardware. It supports SRAM (up to 8KB) and savestates. A fork, Goomba Paletted, also supports custom palettes and borders.(1)

Goomba Color is a version of Goomba that can emulate the Game Boy Color and handle games with 32KB SRAM. It does not support savestates, however.

Both versions use the same file structure: raw Game Boy ROMs are concatenated to the end of the emulator ROM, and this combined image can then be run on a GBA. They also have a similar SRAM format. The range 0xE000–0xFFFF is used for a copy of the Game Boy game's SRAM which is updated in real-time,(2) while the remainder is used for storing settings and compressed save data. When L+R is pressed, the SRAM is compressed and saved into the main area.

Save data header (48 bytes)
Size in bytes (header + data) 0=savestate 1=sram Goomba: compressed size of data
Goomba Color: uncomp. size
Frame count (not used for SRAM) Checksum of ROM
Title of ROM (32 bytes available)
Configuration header (48 bytes)
Size in bytes (header + data) Always 2 Border index Palette index Misc byte Unused
Checksum of ROM whose data is at 0xE000 (or zero if empty) Always 0
Always "CFG"
Misc byte
80 Gamma (0 through 4)
10 Autoload state (on/off)
2 Sleep
(5m, 10m, 30m, off)

Extracting and replacing SRAM

Goomba Save Manager was built to find, extract, and replace Game Boy SRAM inside Goomba and Goomba Color save files. It knows how to deal with the 0xE000 region (the GUI will offer to "clean" the save file for you.) A command-line application is available, as well as C#(3) and GTK+-based GUI applications.


Using the SRAM directly

My updated version of TGB Dual includes the code from Goomba Save Manager, which provides automatic support for Goomba ROMs and save files. See the TGB Dual page for more information.

I also have a version of the NRage input plugin for N64 emulators which integrates Goomba SRAM support into the Transfer Pak emulation (useful for trading Pokémon between save files with Pokémon Stadium 2.) A raw Game Boy ROM (not a Goomba ROM) is also required.

  1. I made the JGoombaBuilder GUI to make it easier to add custom borders and palettes to Goomba Paletted.
  2. 0xE000–0xFFFF is not used when playing a game that uses 32KB SRAM. Goomba won't save any SRAM for these games; in Goomba Color, you must press L+R before shutting off the GBA, or the save data won't be updated.
  3. Writing the C# application also served as an exercise in creating a C++/CLI wrapper library. goombasav_net includes goombasav.c and exposes .NET classes to represent the Goomba file and each header within it.