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
| Element | Description |
|---|
| Screen memory | One byte per character position |
| Character ROM | 256 pre-defined 8×8 patterns |
| Display | ROM pattern at screen position |
Custom characters
| Change | Result |
|---|
| Point to RAM | Use custom definitions |
| Define 8 bytes | Create 8×8 tile |
| Reference by number | Display anywhere |
Memory efficiency
| Display method | Memory for 40×25 screen |
|---|
| Bitmap (mono) | 8,000 bytes |
| Bitmap (colour) | 8,000+ bytes |
| Character mode | 1,000 + 2,048 (charset) |
Character mode uses far less RAM.
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 number | Represents |
|---|
| 0 | Empty space |
| 1 | Ground |
| 2 | Brick |
| 3 | Ladder |
| 4-7 | Decorations |
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 | Characters | Colours |
|---|
| C64 | 256 | Per-character |
| Spectrum | 256 | Per-8×8 block |
| BBC Micro | 256 | Mode-dependent |
| VIC-20 | 256 | Per-character |
Limitations
| Limitation | Workaround |
|---|
| 8×8 grid alignment | Sprite overlay |
| 256 character max | Bank switching |
| Colour restrictions | Careful palette |
Notable uses
| Game | Character graphics use |
|---|
| Boulder Dash | Entire playfield |
| Impossible Mission | Backgrounds |
| Manic Miner | Level tiles |
| Most platformers | Background scenery |
See also