Skip to content
Techniques & Technology

Character Graphics

Building worlds from 8×8 blocks

Character graphics used redefined text characters as game graphics, enabling colourful displays with minimal memory on systems designed primarily for text.

commodore-64sinclair-zx-spectrumbbc-microcommodore-vic-20 graphicsmemorytechnique 1977–present

Overview

Before dedicated graphics hardware, computers displayed text using character sets—grids of 8×8 pixel patterns. Programmers realised they could redefine these characters to create game graphics, building entire worlds from 256 small tiles. The technique was memory-efficient and surprisingly flexible.

How it works

Standard text mode

ElementDescription
Screen memoryOne byte per character position
Character ROM256 pre-defined 8×8 patterns
DisplayROM pattern at screen position

Custom characters

ChangeResult
Point to RAMUse custom definitions
Define 8 bytesCreate 8×8 tile
Reference by numberDisplay anywhere

Memory efficiency

Display methodMemory for 40×25 screen
Bitmap (mono)8,000 bytes
Bitmap (colour)8,000 + 1,000 colour RAM
Character mode1,000 (screen) + 1,000 (colour RAM at $D800-$DBE7) + 2,048 (charset) = 4,048 bytes

Character mode uses far less RAM. The C64 has dedicated colour RAM at $D800-$DBE7 (one nibble per cell, hard-wired and not configurable) that holds the per-character colour for text and multicolour modes.

C64 implementation

Pointing to custom charset

    lda #$1c        ; Bits 1-3 select charset
    sta $d018       ; Character at $3000

Defining a character

; Character 0 = solid block
    lda #$ff
    sta $3000       ; Row 0
    sta $3001       ; Row 1
    ; ... continue for 8 rows

Building game screens

Tile-based levels

Tile numberRepresents
0Empty space
1Ground
2Brick
3Ladder
4-7Decorations

Screen composition

Level data: 32 × 8 = 256 bytes per screen
Charset: 64 tiles × 8 = 512 bytes
Total: 768 bytes vs 8KB bitmap

Multicolour character mode

On C64:

  • Each character uses 4 colours
  • Half horizontal resolution
  • Richer graphics
  • 160×200 effective pixels

Animation techniques

Character cycling

Animate by changing character definitions:

  • Water ripples
  • Fire flickering
  • Blinking lights

Character swapping

Change which character displays:

  • Player animation frames
  • Different tiles same position

Platform variations

PlatformCharactersColoursCustom-character method
C64256Per-character (text mode) or per-cell colour RAMPoint $D018 bits 1-3 to RAM-based charset
Spectrum256Per-8×8 attribute blockPoint CHARS to RAM, OR use the 21 UDGs (codes 144-164) — the cleaner approach for small sets
BBC Micro256Mode-dependentOSWORD calls or direct VDU 23 redefine commands
VIC-20256Per-characterPoint character pointer to RAM

The Spectrum's UDG (User-Defined Graphics) system gives 21 redefinable characters in the upper printable range — sufficient for small games without disturbing the rest of the character set. Larger graphics need full charset replacement.

Limitations

LimitationWorkaround
8×8 grid alignmentSprite overlay
256 character maxBank switching
Colour restrictionsCareful palette

Notable uses

GameCharacter graphics use
Boulder DashEntire playfield
Impossible MissionBackgrounds
Manic MinerLevel tiles
Most platformersBackground scenery

See also