Game Boy Fonts
The Game Boy has no font hardware. Text is drawn exactly like the rest of the picture: each character is an 8×8 tile in video RAM, and a line of text is a row of tile indices written into the tile map. A font is simply the set of tiles a game loads for its letters. This page covers the glyph format, loading a font, printing text and using shades for style.
Overview
There is no character generator and no text mode. Every letter you see is a tile, and every tile that spells out text was placed in the tile map the same way a picture is. A font is therefore a block of tile data holding one 8×8 glyph per character, plus a mapping from a character code to the tile that draws it. The machine treats those tiles no differently from scenery, so text can scroll, use the window, or appear as an object.
| Property | Value |
|---|---|
| Glyph size | 8 × 8 pixels (one tile) |
| Bytes per glyph | 16 (2 bits per pixel) |
| Storage | Tile store in VRAM $8000–$97FF |
| Font hardware | None; text is tiles |
Glyph format
A glyph is one tile: 8×8 pixels, 2 bits each, 16 bytes. It uses the identical two-byte-per-row, two-bit-plane layout as any other tile, described on the images page. The most significant bit of each byte is the leftmost pixel of the row.
| Item | Value |
|---|---|
| Width | 8 pixels |
| Height | 8 pixels |
| Depth | 2 bits per pixel |
| Size | 16 bytes |
Most text fonts use only two of the four pixel values: value 0 for the paper and one other for the ink, leaving the glyph crisp and easy to recolour. A proportional look is not possible from the tile grid alone; letters sit on fixed 8-pixel columns unless a game draws them as objects placed by pixel.
Loading a font
Before any text appears, the glyph tiles must be copied into the tile store in video RAM. A game reserves a run of tile slots for its font, then copies the glyph bytes there during a moment when the display is not reading VRAM, usually the vertical blank between frames.
The character code of a letter and the tile slot it lands in are related by a fixed offset the game chooses. If the letter A is loaded into tile 65, and the font follows ASCII order, then printing routines can turn a character code straight into a tile index by adding a base. Games often store text as these tile indices already, so no translation is needed at print time.
Printing text
Printing a string means writing its tile indices into consecutive cells of the tile map. To place text at column cx, row cy of the background map at $9800, a routine writes each glyph's tile index to $9800 + cy * 32 + cx and the following cells. The display then draws those tiles on the next frame.
Because the map is 32 cells wide but the screen shows 20, text can be written just off screen and scrolled in, or placed in the fixed window layer so a message box stays put while the background moves. Writing to the map must also wait for a safe moment, so text routines commonly run during vertical blank.
Shades and style
Text takes its colour from whichever palette draws the tile. Background text uses BGP ($FF47); text drawn as objects uses OBP0 or OBP1. Changing the palette recolours all the text at once without editing a single glyph, so a game can flash a word or dim a menu by adjusting one register.
| Use | Palette |
|---|---|
| Background and window text | BGP ($FF47) |
| Text drawn as objects | OBP0 ($FF48) or OBP1 ($FF49) |
With four shades available, a font can carry a light outline or a drop shadow inside its glyphs, using two ink values against the paper. Object text gains transparency, since object colour 0 shows the background through it, letting a caption float over a scene.