Page D0

VIC-II Registers
AddressNameBit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0Description
D000VIC2M0XM0XX Coordinate Sprite 0
D001VIC2M0YM0YY Coordinate Sprite 0
D002VIC2M1XM1XX Coordinate Sprite 1
D003VIC2M1YM1YY Coordinate Sprite 1
D004VIC2M2XM2XX Coordinate Sprite 2
D005VIC2M2YM2YY Coordinate Sprite 2
D006VIC2M3XM3XX Coordinate Sprite 3
D007VIC2M3YM3YY Coordinate Sprite 3
D008VIC2M4XM4XX Coordinate Sprite 4
D009VIC2M4YM4YY Coordinate Sprite 4
D00AVIC2M5XM5XX Coordinate Sprite 5
D05BVIC2M5YM5YY Coordinate Sprite 5
D00CVIC2M6XM6XX Coordinate Sprite 6
D00DVIC2M6YM6YY Coordinate Sprite 6
D00EVIC2M7XM7XX Coordinate Sprite 7
D00FVIC2M7YM7YY Coordinate Sprite 7
D010VIC2MNXM7X8M6X8M5X8M4X8M3X8M2X8M1X8M0X8Bit 8 of X coordinates
D011VIC2CR1RST8[1]ECMBMMDENRSELYSCROLLControl register 1
D012VIC2RASTERRASTER[1]Raster counter
D013VIC2LPXLPXLight pen X
D014VIC2LPYLPYLight pen Y
D015VIC2SPEM7EM6EM5EM4EM3EM2EM1EM0ESprite Enabled
D016VIC2CR2RES[3]MCMCSELXSCROLLControl register 2
D017VIC2SPYEM7YEM6YEM5YEM4YEM3YEM2YEM1YEM0YESprite Y expansion
D018VIC2MPTRVM13VM12VM11VM10CB13CB12CB11Memory pointers
D019VIC2INTRIRQILPIMMCIMBCIRSTInterrupt Register
D01AVIC2INTEIRQELPEMMCEMBCERSTInterrupt Enabled
D01BVIC2SPDPM7DPM6DPM5DPM4DPM3DPM2DPM1DPM0DPSprite data priority
D01CVIC2SPMCM7MCM6MCM5MCM4MCM3MCM2MCM1MCM0MCSprite multicolour
D01DVIC2SPXEM7XEM6XEM5XEM4XEM3XEM2XEM1XEM0XESprite X expansion
D01EVIC2SPSPCOLM7MM6MM5MM4MM3MM2MM1MM0MSprite-Sprite collision[2]
D01FVIC2SPDCOLM7DM6DM5DM4DM3DM2DM1DM0DSprite data collision[2]
D020VIC2BORDERECBorder colour
D021VIC2B0CB0CBackground colour 0
D022VIC2B1CB1CBackground colour 1
D023VIC2B2CB2CBackground colour 2
D024VIC2B3CB3CBackground colour 3
D025VIC2SPMM0MM0Sprite multicolour 0
D026VIC2SPMM1MM1Sprite multicolour 1
D027VIC2SPCOL0M0CSprite 0 colour
D028VIC2SPCOL1M1CSprite 1 colour
D029VIC2SPCOL2M2CSprite 2 colour
D02AVIC2SPCOL3M3CSprite 3 colour
D02BVIC2SPCOL4M4CSprite 4 colour
D02CVIC2SPCOL5M5CSprite 5 colour
D02DVIC2SPCOL6M6CSprite 6 colour
D02EVIC2SPCOL7M7CSprite 7 colour
D02E0xFF on read, write ignoredUnused
D02F0xFF on read, write ignoredUnused
D0300xFF on read, write ignoredUnused
D0310xFF on read, write ignoredUnused
D0320xFF on read, write ignoredUnused
D0330xFF on read, write ignoredUnused
D0340xFF on read, write ignoredUnused
D0350xFF on read, write ignoredUnused
D0360xFF on read, write ignoredUnused
D0370xFF on read, write ignoredUnused
D0380xFF on read, write ignoredUnused
D0390xFF on read, write ignoredUnused
D03A0xFF on read, write ignoredUnused
D03B0xFF on read, write ignoredUnused
D03C0xFF on read, write ignoredUnused
D03D0xFF on read, write ignoredUnused
D03E0xFF on read, write ignoredUnused
D03F0xFF on read, write ignoredUnused

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
0xD0400xD07FSame as 0xD000…0xD03F
0xD0800xD0BFSame as 0xD000…0xD03F
0xD0C00xD0FFSame as 0xD000…0xD03F
0xD1000xD13FSame as 0xD000…0xD03F
0xD1400xD17FSame as 0xD000…0xD03F
0xD1800xD1BFSame as 0xD000…0xD03F
0xD1C00xD1FFSame as 0xD000…0xD03F
0xD2000xD23FSame as 0xD000…0xD03F
0xD2400xD27FSame as 0xD000…0xD03F
0xD2800xD2BFSame as 0xD000…0xD03F
0xD2C00xD2FFSame as 0xD000…0xD03F
0xD3000xD33FSame as 0xD000…0xD03F
0xD3400xD37FSame as 0xD000…0xD03F
0xD3800xD3BFSame as 0xD000…0xD03F
0xD3C00xD3FFSame as 0xD000…0xD03F

Notes:

  1. RST8 in 0xD011 is bit 8 of the RASTER register in 0xD012.
  2. Registers 0xD01E & 0xD01F cannot be written and are cleared on reading
  3. RES in 0xD016 stops the VIC on the 6566. It has no function on the 6567 or 6569
  4. Bit's with no label are not connected and return 1 on a read.