Unused Palette Configurations#
(See the Notes page for the used palette configurations.)
The ROM assigns color palettes to certain monochrome Game Boy games by computing a hash of the ROM's header title for every Nintendo Licensee game and checking it against an internal database of hashes. The resulting index is then used to obtain an entry ID (from 0x00 up to and including 0x1C) and shuffling flags (a 3-bit bitfield). An entry is a triplet of palettes, and the "shuffling flags" replace some of the triplet's palettes with others. In particular, shuffling flag value 0x05 causes all 3 members of a triplet to be used, and 0x00 causes both OBJ palettes to be overwritten with copies of the BG palette (which never budges). Since bit 2 of the shuffling flags overrides bit 1, values 0x06 and 0x07 are never used.
While not all combinations of entry ID and shuffling flags are used, almost all palettes can be seen in at least one used combination, including manual palette selection with the joypad. Triplets with one unreferenced palette that can't normally be seen are listed below; the unused palettes have their name in bold.
Entry |
Palettes |
Color 0 |
Color 1 |
Color 2 |
Color 3 |
|---|---|---|---|---|---|
0x04 |
BG |
0xFFFFFF |
0x7BFF00 |
0xB57300 |
0x000000 |
OBJ0 |
0xFFFFFF |
0xFF8484 |
0x943A3A |
0x000000 |
|
OBJ1 |
0xFFFFFF |
0xFF8484 |
0x943A3A |
0x000000 |
|
0x07 |
BG |
0xFFFFFF |
0xFFFF00 |
0xFF0000 |
0x000000 |
OBJ0 |
0xFFFFFF |
0x63A5FF |
0x0000FF |
0x000000 |
|
OBJ1 |
0xFFFFFF |
0x5ABDFF |
0xFF0000 |
0x0000FF |
|
0x0A |
BG |
0xB5B5FF |
0xFFFF94 |
0xAD5A42 |
0x000000 |
OBJ0 |
0x000000 |
0xFFFFFF |
0xFF8484 |
0x943A3A |
|
OBJ1 |
0x000000 |
0xFFFFFF |
0xFF8484 |
0x943A3A |
|
0x13 |
BG |
0x000000 |
0x008484 |
0xFFDE00 |
0xFFFFFF |
OBJ0 |
0xFFFFFF |
0xFF8484 |
0x943A3A |
0x000000 |
|
OBJ1 |
0xFFFFFF |
0x7BFF31 |
0x008400 |
0x000000 |
|
0x16 |
BG |
0xFFFFFF |
0xA5A5A5 |
0x525252 |
0x000000 |
OBJ0 |
0xFFFFFF |
0xA5A5A5 |
0x525252 |
0x000000 |
|
OBJ1 |
0xFFFFFF |
0xA5A5A5 |
0x525252 |
0x000000 |
|
0x17 |
BG |
0xFFFFA5 |
0xFF9494 |
0x9494FF |
0x000000 |
OBJ0 |
0xFFFFFF |
0x7BFF31 |
0x008400 |
0x000000 |
|
OBJ1 |
0xFFFFFF |
0x63A5FF |
0x0000FF |
0x000000 |
|
0x19 |
BG |
0xFFE6C5 |
0xCE9C84 |
0x846B29 |
0x5A3108 |
OBJ0 |
0xFFFFFF |
0xFFAD63 |
0x843100 |
0x000000 |
|
OBJ1 |
0xFFFFFF |
0xFFAD63 |
0x843100 |
0x000000 |
|
0x1B |
BG |
0xFFFFFF |
0xFFCE00 |
0x9C6300 |
0x000000 |
OBJ0 |
0xFFFFFF |
0xFFCE00 |
0x9C6300 |
0x000000 |
|
OBJ1 |
0xFFFFFF |
0xFFCE00 |
0x9C6300 |
0x000000 |
|
Most unused palettes are duplicates of others in the same triplet, but entries 0x07, 0x13, and 0x17 all have unique colors that can normally never be loaded!
Any combination of palette triplet and shuffling flags can be loaded using an emulator that supports the bootstrap ROM, such as BGB or SameBoy: enable GameShark code 01??08D0, where ?? is calculated as ID | flags << 5, and load a game without GBC compatibility. The selected palette will load regardless of whether any buttons have been pressed.
Version differences#
Three revisions of the Game Boy Color bootstrap ROM exist: CGB0, CGB, and CGB-AGB.
CGB0#
CGB0 is the nickname given to a different boot ROM present on some early GBC revisions (with a CPU marked CPU CGB), which has a few differences suggesting, along with its earlier release date, that it is an earlier version of the GBC boot ROM.
It has the following differences to the regular GBC boot ROM:
- The console's wave RAM is not initialized, causing for example different title screen music in R-Type DX.
- A less efficient loop is used to load the "GAME BOY" logo graphics.
- The palette triplet ID and shuffling flags are written to two extra variables in the console's RAM, which are never read from again. It is speculated that these might be debug remnants.
CGB-AGB#
CGB-AGB is a slightly revised version of the boot ROM, present inside Game Boy Advance consoles, and is run when the console is powered up in Game Boy Color compatibility mode.
It finally fixes the "logo TOCTTOU" issue that has plagued the console series since its very beginning, by having the logo be drawn on-screen from the copy made in the console's RAM instead of re-reading it from the cartridge. Curiously, the boot ROM still only compares the first half of the logo.
(Source: boot ROM disassembly)