SNES Fonts

The SNES has no font hardware. Text is drawn the same way as any other picture: a font is a set of tiles in VRAM, and words are laid out by writing their tile numbers into a background tilemap. The tile bit depth chosen for the layer sets how many colours each glyph can use.

SNES Fonts

Overview

Because there is no dedicated character generator, a font is just artwork. Each glyph is drawn as one or more 8×8 tiles and stored in VRAM alongside the game's other tiles. To print a string the program writes the matching tile numbers into a tilemap, and the PPU draws that text as an ordinary background layer. A font can therefore be any style the artist draws, in any of the tile colour depths.

Glyph tiles

A glyph is a background tile in the same character format as any other tile: an 8×8 block stored as bitplanes, its byte count set by the depth. Most fonts are 2bpp, giving four levels: a transparent index, the letter body, and one or two shades for an outline or shadow. Taller or wider letters are built from several tiles, arranged as a small block in the tilemap.

DepthColoursTypical use
2bpp4Plain text with an outline or shadow.
4bpp16Anti-aliased or multi-colour display text.

Laying out text

Text is placed by writing tilemap entries. Each character cell in the map holds a tile number, so a routine converts a string into tile numbers, usually by subtracting an ASCII base and adding the tile index of the first glyph, then stores those into the map cells for the text row. Because the map cell also carries a palette and flip, the same font tiles can be recoloured per word without new artwork.

Colour and depth

A glyph's colours come from the layer's palette exactly like any tile. On a 4bpp layer a font tile picks one of sixteen 16-colour sub-palettes through its tilemap entry, so different lines of text can use different colours from the same glyph tiles. Index 0 stays transparent, letting a picture or a lower layer show behind the letters, which is how text overlays a scene.

Variable width

Fixed 8×8 cells give even spacing but look blocky for prose. Games that want proportional text render into a small off-screen buffer of tiles, packing each glyph at its true width and shifting the following letters, then upload those tiles and point the tilemap at them. This variable-width approach still uses ordinary tiles; only the software packing differs.