VIC-II Register Map — Quick Reference
VIC-II base address: $D000 (53248)
| Offset |
Address |
Dec |
Name |
Description |
| +0 |
$D000 |
53248 |
SP0X |
Sprite 0 X position |
| +1 |
$D001 |
53249 |
SP0Y |
Sprite 0 Y position |
| +2 |
$D002 |
53250 |
SP1X |
Sprite 1 X |
| +3 |
$D003 |
53251 |
SP1Y |
Sprite 1 Y |
| +4 |
$D004 |
53252 |
SP2X |
Sprite 2 X |
| +5 |
$D005 |
53253 |
SP2Y |
Sprite 2 Y |
| +6 |
$D006 |
53254 |
SP3X |
Sprite 3 X |
| +7 |
$D007 |
53255 |
SP3Y |
Sprite 3 Y |
| +8 |
$D008 |
53256 |
SP4X |
Sprite 4 X |
| +9 |
$D009 |
53257 |
SP4Y |
Sprite 4 Y |
| +A |
$D00A |
53258 |
SP5X |
Sprite 5 X |
| +B |
$D00B |
53259 |
SP5Y |
Sprite 5 Y |
| +C |
$D00C |
53260 |
SP6X |
Sprite 6 X |
| +D |
$D00D |
53261 |
SP6Y |
Sprite 6 Y |
| +E |
$D00E |
53262 |
SP7X |
Sprite 7 X |
| +F |
$D00F |
53263 |
SP7Y |
Sprite 7 Y |
| +10 |
$D010 |
53264 |
MSIGX |
Sprites X MSB (bit N = sprite N X bit 8) |
| +11 |
$D011 |
53265 |
SCROLY |
Vertical scroll/control |
| +12 |
$D012 |
53266 |
RASTER |
Raster counter / IRQ line |
| +13 |
$D013 |
53267 |
LPENX |
Light pen X (read-only) |
| +14 |
$D014 |
53268 |
LPENY |
Light pen Y (read-only) |
| +15 |
$D015 |
53269 |
SPENA |
Sprite enable (bit N) |
| +16 |
$D016 |
53270 |
SCROLX |
Horizontal scroll/control |
| +17 |
$D017 |
53271 |
YXPAND |
Sprite Y expansion (bit N) |
| +18 |
$D018 |
53272 |
VMCSB |
Memory control (screen/char base) |
| +19 |
$D019 |
53273 |
VICIRQ |
IRQ status (read/ack) |
| +1A |
$D01A |
53274 |
IRQMSK |
IRQ mask enable |
| +1B |
$D01B |
53275 |
SPBGPR |
Sprite-BG priority |
| +1C |
$D01C |
53276 |
SPMC |
Sprite multicolor enable |
| +1D |
$D01D |
53277 |
XXPAND |
Sprite X expansion |
| +1E |
$D01E |
53278 |
SPSPCL |
Sprite-sprite collision (clears on read) |
| +1F |
$D01F |
53279 |
SPBGCL |
Sprite-BG collision (clears on read) |
| +20 |
$D020 |
53280 |
EXTCOL |
Border color |
| +21 |
$D021 |
53281 |
BGCOL0 |
Background color 0 |
| +22 |
$D022 |
53282 |
BGCOL1 |
Background color 1 |
| +23 |
$D023 |
53283 |
BGCOL2 |
Background color 2 |
| +24 |
$D024 |
53284 |
BGCOL3 |
Background color 3 |
| +25 |
$D025 |
53285 |
SPMC0 |
Sprite multicolor 0 |
| +26 |
$D026 |
53286 |
SPMC1 |
Sprite multicolor 1 |
| +27 |
$D027 |
53287 |
SP0COL |
Sprite 0 color |
| +28 |
$D028 |
53288 |
SP1COL |
Sprite 1 color |
| +29 |
$D029 |
53289 |
SP2COL |
Sprite 2 color |
| +2A |
$D02A |
53290 |
SP3COL |
Sprite 3 color |
| +2B |
$D02B |
53291 |
SP4COL |
Sprite 4 color |
| +2C |
$D02C |
53292 |
SP5COL |
Sprite 5 color |
| +2D |
$D02D |
53293 |
SP6COL |
Sprite 6 color |
| +2E |
$D02E |
53294 |
SP7COL |
Sprite 7 color |
$D011 — SCROLY Bit Fields
| Bit |
Name |
Description |
| 7 |
RST8 |
Raster line bit 8 |
| 6 |
ECM |
Extended Color Mode |
| 5 |
BMM |
Bitmap Mode |
| 4 |
DEN |
Display Enable |
| 3 |
RSEL |
Row select: 1=25 rows, 0=24 rows |
| 2-0 |
YSCL |
Vertical fine scroll (0-7) |
$D016 — SCROLX Bit Fields
| Bit |
Name |
Description |
| 4 |
MCM |
Multicolor Mode |
| 3 |
CSEL |
Column select: 1=40 cols, 0=38 cols |
| 2-0 |
XSCL |
Horizontal fine scroll (0-7) |
$D018 — VMCSB Memory Control
| Bits |
Name |
Description |
| 7-4 |
VM |
Screen RAM base: value × $0400 within VIC bank |
| 3-1 |
CB |
Char set base: value × $0800 within VIC bank |
Default $10: screen at $0400, chars at $1000 (ROM mirror in bank 0).
$D019 — VICIRQ / $D01A — IRQMSK
| Bit |
Event |
| 3 |
Light pen |
| 2 |
Sprite-BG collision |
| 1 |
Sprite-sprite collision |
| 0 |
Raster IRQ |
To acknowledge: read $D019, then write the value back (write-1-to-clear).