What is the purpose the checksum feature?
To provide limited colorization to a selection of legacy, Nintendo-published games, as well as show the Nintendo logo for two specific games, explained later. This feature allows individual games to get a light touchup, by assigning a single palette to the background layer, and two palettes mapped onto the two sprite palettes available for black and white Game Boy games. A notable example of this is that Pokémon Blue and Red, which are not GBC enhanced titles, will receive a blue and red tint by default, respectively. However, this pre-specified palette can be modified by the user by pressing a direction on the D pads during startup, just like with any other legacy game.
This feature is only applied to legacy games, as GBC enhanced games are able to set the color palettes freely, and have hardware access to many more palettes, up to 8 for the background layer, and 8 for sprites. Because no further legacy games were to be released at this point, the full back catalog was known and no further accommodations needed to be made for legacy games after the release of the GBC.
For this feature to be enabled by the boot ROM, a number of conditions need to be true:
- The Game Boy Color enabled flag must not be set in the ROM header, ie address
0x0143 must have bit 7 set to 0.
- The licensee id, in either the old or new licensee field of the ROM header must be set to
0x01, indicating a first party game published by Nintendo.
- The checksum of the ROM title must exactly match one of the entries in the table.
The Cutting Room Floor has a list of all used palette configurations and their respective games.
A Nintendo logo is shown for two games
A lesser known effect is that two games are specified to have the Nintendo logo shown on screen on startup. Earlier versions of the boot ROM left a Nintendo on screen, whereas the GBC boot ROM clears the screen by default. However, two games (Chessmaster and X) rely on that initially shown logo being there for their own intro animation. If you left it out, the screen would look empty (see the examples below) so Nintendo made the GBC boot ROM display the logo for those particular games. They could have shown the logo for all games, but that would make the logo quickly show and disappear in a flash before the game boots for many games, which would have been ugly.
Why check only for a checksum and not the full title?
To save space in the boot ROM. Putting a boot ROM on the silicon die of the CPU chip is expensive, so there's an incentive to make it as small as possible to make the physical size of the die as small as possible. Storing only the checksum takes one byte per game, whereas storing the full title would take 16 bytes per game. This means that there will be hash collisions, however...
- The full catalog was known and no future non-Color games would be released at this point, so future hash collisions were not an issue.
- Only Nintendo-published games are included, making the collision risk much lower.
- Some hash collisions do exist and are checked specifically by the boot ROM. In this case, the 4th byte of the title is used as a decider.