Game Boy Color Image

The Game Boy Color builds its picture from 8×8 tiles, the same two-bit tiles as the Game Boy, but held across two banks of video RAM and coloured through eight background palettes of fifteen bit colour. A background layer and a window layer draw them, each cell picking a palette through the attribute map. This page covers the tile data, the banks, and the colour.

Game Boy Color Image

Overview

The screen is 160×144 pixels, 20×18 tiles. Every tile is 8×8 pixels at two bits a pixel, sixteen bytes, the same format the Game Boy uses. The Color holds two 8 KB video RAM banks, so twice as many tiles fit, and it colours a tile through a background palette chosen per cell rather than one grey ramp for the whole screen.

PropertyValue
Screen160 × 144 pixels, 20 × 18 tiles
Tile8 × 8 pixels, 2 bits a pixel, 16 bytes
Video RAM2 banks of 8 KB
Tiles resident512 (256 a bank)
Background palettes8, of 4 colours each
Colour space15-bit, 32768 colours

Tile data and banks

Tile data sits at $8000 in video RAM, sixteen bytes a tile, two bytes a row: the two bytes give the low and high bit of each of the eight pixels, so a pixel is a value from zero to three. Both video RAM banks hold tile data, selected by the VBK register, and a background cell's attribute bit picks which bank its tile comes from. That doubles the tiles a screen draws from to 512.

Colour and palettes

Colour lives in a palette memory, not in the tiles: a tile's two-bit pixels index into one of eight background palettes of four colours. Each colour is fifteen bits, five a channel. The palettes are written through an index and a data port, BCPS and BCPD, which auto-increment so a whole palette streams in. Object colour works the same way through a separate object palette memory.

The background layer

The background is a 32×32 tile map windowed onto the screen and scrolled, its cells coloured and oriented by the parallel attribute map. The Window is a second, non-scrolling tilemap layer over it. Both are described in the Map page; the picture is those maps drawn through the tile data and palettes here.

Display registers

The display control register LCDC turns the layers and objects on and chooses the map and tile-data regions, as on the Game Boy. The Color adds VBK to select the video RAM bank for writes, and the palette ports BCPS/BCPD and OCPS/OCPD for the background and object palettes.

RegisterUse
LCDCLayer and object enable, map and tile-data select.
VBKVideo RAM bank for CPU access, 0 or 1.
BCPS / BCPDBackground palette index and data, auto-incrementing.
OCPS / OCPDObject palette index and data.