Address | Name | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | Description |
---|---|---|---|---|---|---|---|---|---|---|
D000 | VIC2M0X | M0X | X Coordinate Sprite 0 | |||||||
D001 | VIC2M0Y | M0Y | Y Coordinate Sprite 0 | |||||||
D002 | VIC2M1X | M1X | X Coordinate Sprite 1 | |||||||
D003 | VIC2M1Y | M1Y | Y Coordinate Sprite 1 | |||||||
D004 | VIC2M2X | M2X | X Coordinate Sprite 2 | |||||||
D005 | VIC2M2Y | M2Y | Y Coordinate Sprite 2 | |||||||
D006 | VIC2M3X | M3X | X Coordinate Sprite 3 | |||||||
D007 | VIC2M3Y | M3Y | Y Coordinate Sprite 3 | |||||||
D008 | VIC2M4X | M4X | X Coordinate Sprite 4 | |||||||
D009 | VIC2M4Y | M4Y | Y Coordinate Sprite 4 | |||||||
D00A | VIC2M5X | M5X | X Coordinate Sprite 5 | |||||||
D05B | VIC2M5Y | M5Y | Y Coordinate Sprite 5 | |||||||
D00C | VIC2M6X | M6X | X Coordinate Sprite 6 | |||||||
D00D | VIC2M6Y | M6Y | Y Coordinate Sprite 6 | |||||||
D00E | VIC2M7X | M7X | X Coordinate Sprite 7 | |||||||
D00F | VIC2M7Y | M7Y | Y Coordinate Sprite 7 | |||||||
D010 | VIC2MNX | M7X8 | M6X8 | M5X8 | M4X8 | M3X8 | M2X8 | M1X8 | M0X8 | Bit 8 of X coordinates |
D011 | VIC2CR1 | RST8[1] | ECM | BMM | DEN | RSEL | YSCROLL | Control register 1 | ||
D012 | VIC2RASTER | RASTER[1] | Raster counter | |||||||
D013 | VIC2LPX | LPX | Light pen X | |||||||
D014 | VIC2LPY | LPY | Light pen Y | |||||||
D015 | VIC2SPE | M7E | M6E | M5E | M4E | M3E | M2E | M1E | M0E | Sprite Enabled |
D016 | VIC2CR2 | RES[3] | MCM | CSEL | XSCROLL | Control register 2 | ||||
D017 | VIC2SPYE | M7YE | M6YE | M5YE | M4YE | M3YE | M2YE | M1YE | M0YE | Sprite Y expansion |
D018 | VIC2MPTR | VM13 | VM12 | VM11 | VM10 | CB13 | CB12 | CB11 | Memory pointers | |
D019 | VIC2INTR | IRQ | ILP | IMMC | IMBC | IRST | Interrupt Register | |||
D01A | VIC2INTE | IRQ | ELP | EMMC | EMBC | ERST | Interrupt Enabled | |||
D01B | VIC2SPDP | M7DP | M6DP | M5DP | M4DP | M3DP | M2DP | M1DP | M0DP | Sprite data priority |
D01C | VIC2SPMC | M7MC | M6MC | M5MC | M4MC | M3MC | M2MC | M1MC | M0MC | Sprite multicolour |
D01D | VIC2SPXE | M7XE | M6XE | M5XE | M4XE | M3XE | M2XE | M1XE | M0XE | Sprite X expansion |
D01E | VIC2SPSPCOL | M7M | M6M | M5M | M4M | M3M | M2M | M1M | M0M | Sprite-Sprite collision[2] |
D01F | VIC2SPDCOL | M7D | M6D | M5D | M4D | M3D | M2D | M1D | M0D | Sprite data collision[2] |
D020 | VIC2BORDER | EC | Border colour | |||||||
D021 | VIC2B0C | B0C | Background colour 0 | |||||||
D022 | VIC2B1C | B1C | Background colour 1 | |||||||
D023 | VIC2B2C | B2C | Background colour 2 | |||||||
D024 | VIC2B3C | B3C | Background colour 3 | |||||||
D025 | VIC2SPMM0 | MM0 | Sprite multicolour 0 | |||||||
D026 | VIC2SPMM1 | MM1 | Sprite multicolour 1 | |||||||
D027 | VIC2SPCOL0 | M0C | Sprite 0 colour | |||||||
D028 | VIC2SPCOL1 | M1C | Sprite 1 colour | |||||||
D029 | VIC2SPCOL2 | M2C | Sprite 2 colour | |||||||
D02A | VIC2SPCOL3 | M3C | Sprite 3 colour | |||||||
D02B | VIC2SPCOL4 | M4C | Sprite 4 colour | |||||||
D02C | VIC2SPCOL5 | M5C | Sprite 5 colour | |||||||
D02D | VIC2SPCOL6 | M6C | Sprite 6 colour | |||||||
D02E | VIC2SPCOL7 | M7C | Sprite 7 colour | |||||||
D02E | 0xFF on read, write ignored | Unused | ||||||||
D02F | 0xFF on read, write ignored | Unused | ||||||||
D030 | 0xFF on read, write ignored | Unused | ||||||||
D031 | 0xFF on read, write ignored | Unused | ||||||||
D032 | 0xFF on read, write ignored | Unused | ||||||||
D033 | 0xFF on read, write ignored | Unused | ||||||||
D034 | 0xFF on read, write ignored | Unused | ||||||||
D035 | 0xFF on read, write ignored | Unused | ||||||||
D036 | 0xFF on read, write ignored | Unused | ||||||||
D037 | 0xFF on read, write ignored | Unused | ||||||||
D038 | 0xFF on read, write ignored | Unused | ||||||||
D039 | 0xFF on read, write ignored | Unused | ||||||||
D03A | 0xFF on read, write ignored | Unused | ||||||||
D03B | 0xFF on read, write ignored | Unused | ||||||||
D03C | 0xFF on read, write ignored | Unused | ||||||||
D03D | 0xFF on read, write ignored | Unused | ||||||||
D03E | 0xFF on read, write ignored | Unused | ||||||||
D03F | 0xFF on read, write ignored | Unused |
Multiple address ranges
The VIC-II chip has 64 addressable registers. In the C64 memory map it is mapped to the range 0xD000…0xD3FF with it's registers repeated every 64 bytes.
This means that the following address ranges match those of the first 64 bytes at 0xD000…0xD03F:
Address Range | Equivalent | |
---|---|---|
0xD040 | 0xD07F | Same as 0xD000…0xD03F |
0xD080 | 0xD0BF | Same as 0xD000…0xD03F |
0xD0C0 | 0xD0FF | Same as 0xD000…0xD03F |
0xD100 | 0xD13F | Same as 0xD000…0xD03F |
0xD140 | 0xD17F | Same as 0xD000…0xD03F |
0xD180 | 0xD1BF | Same as 0xD000…0xD03F |
0xD1C0 | 0xD1FF | Same as 0xD000…0xD03F |
0xD200 | 0xD23F | Same as 0xD000…0xD03F |
0xD240 | 0xD27F | Same as 0xD000…0xD03F |
0xD280 | 0xD2BF | Same as 0xD000…0xD03F |
0xD2C0 | 0xD2FF | Same as 0xD000…0xD03F |
0xD300 | 0xD33F | Same as 0xD000…0xD03F |
0xD340 | 0xD37F | Same as 0xD000…0xD03F |
0xD380 | 0xD3BF | Same as 0xD000…0xD03F |
0xD3C0 | 0xD3FF | Same as 0xD000…0xD03F |
Notes:
- RST8 in 0xD011 is bit 8 of the RASTER register in 0xD012.
- Registers 0xD01E & 0xD01F cannot be written and are cleared on reading
- RES in 0xD016 stops the VIC on the 6566. It has no function on the 6567 or 6569
- Bit's with no label are not connected and return 1 on a read.