gbadev
Game Boy Advance homebrew development forum
Member
Joined:
Posts: 24

short for "character block" - as far as I can tell, this isn't official Nintendo terminology. It doesn't seem to be in either the Game Boy original or the Game Boy Advance dev manuals. But there is a consensus online that it is 16KB:

https://www.copetti.org/writings/consoles/game-boy-advance
https://ianfinlayson.net/class/cpsc305/notes/13-tiles
https://www.coranac.com/tonc/text/regbg.htm

Does anyone know who introduced this term and what the motivation was? I notice that the size of VRAM_B and VRAM_C are also both 16Kbyte - could this be the reason?

Administrator
avatar
Joined:
Posts: 47

I'm pretty sure it was coined by Cearn in Tonc, but the term 'character' on Nintendo consoles to mean graphical data for a tile goes at least as far back as the NES, where it was called CHR memory. Makes sense given actual character glyphs would often be stored there, but also I guess it would've been inherited from the computers of the time, themselves rendering text using tile grids with predefined character sets.

One reason Tonc uses 'charblock' and 'screenblock' is because they provide a clear distinction between 'tile pixel data' and 'tile map data' where informally both of those might be called 'tiles' which would get confusing.

Charblocks are 16KB because that's the level of granularity with which you can choose a base tile to start rendering from in the BG control registers. In that sense, a charblock is a real unit that the GBA hardware uses. Likewise, screenblocks (2KB chunks of map data) are also a unit used by the hardware. See the CBB and SBB fields of the BG Control Registers to make sense of this.