En las entradas anteriores hemos revisado las funcionalidades principales del VIC. El objetivo de esta entrada es hacer un repaso sistemático de sus registros, para que sirva de referencia, y para prepararnos ya para cambiar de temática y pasar a tratar la música y el sonido con el SID.
Además de indicar las direcciones de los registros, indicaremos sus nombres según el libro “Mapping the Commodore 64”.
Los registros principales del VIC son:
REGISTRO | DIRECCIÓN | FUNCIÓN |
SP0X, SP0Y, SP1X, SP1Y, … | $d000 – $d00f | Coordenadas X e Y de los ocho sprites. |
MSIGX | $d010 | Bits más significativos de las coordenadas X de los ocho sprites. |
SCROLY | $d011 | Bits 0, 1 y 2: Scroll en la dirección Y.
Bit 3: Modo 24 o 25 filas (1=25, 0=24). Bit 4: Blanqueo de pantalla (0=blanqueo). Bit 5: Modo bitmap (1=activo). Bit 6: Modo carácter con color de fondo extendido (1=activo). Bit 7: Bit más significativo –bit 8– del RASTER ($d012). |
RASTER | $d012 | Bits 0 – 7 del RASTER. |
SPENA | $d015 | Bits para activar / desactivar los ocho sprites (1=activo). |
SCROLX | $d016 | Bits 0, 1 y 2: Scroll en la dirección X.
Bit 3: Modo 38 o 40 columnas (1=40, 0=38). Bit 4: Modo bitmap multicolor (1=activo). |
YXPAND | $d017 | Bits para expandir los ocho sprites en la dirección Y (1=expandido). |
VMCSB | $d018 | Bits 1, 2 y 3: Ubicación de los 2K de los juegos de caracteres personalizados.
Bit 3: Ubicación de los 8K del bitmap. Bits 4, 5, 6 y 7: Ubicación de la RAM de pantalla. |
VICIRQ | $d019 | Información sobre las interrupciones VIC generadas:
Bit 0: RASTER. Bit 1: Colisión sprite – fondo. Bit 2: Colisión sprite – sprite. Bit 3: Lápiz óptico. Bit 7: Cualquier fuente. |
IRQMSK | $d01a | Programación de las interrupciones del VIC:
Bit 0: RASTER. Bit 1: Colisión sprite – fondo. Bit 2: Colisión sprite – sprite. Bit 3: Lápiz óptico. |
SPBGPR | $d01b | Bits para controlar la prioridad entre sprites y fondo (0=sprite, 1=fondo). |
SPMC | $d01c | Bits para controlar el multicolor de los ocho sprites (1=multicolor). |
XXPAND | $d01d | Bits para expandir los ocho sprites en la dirección X (1=expandido). |
SPSPCL | $d01e | Bits para controlar las colisiones sprite – sprite (1=sí). |
SPBGCL | $d01f | Bits para controlar las colisiones sprite – fondo (1=sí). |
EXTCOL | $d020 | Color del borde de la pantalla. |
BGCOL0 | $d021 | Color de fondo 0. |
BGCOL1 | $d022 | Color de fondo 1. |
BGCOL2 | $d023 | Color de fondo 2. |
BGCOL3 | $d024 | Color de fondo 3. |
SPMC0 | $d025 | Color compartido 0 de los sprites multicolor. |
SPMC1 | $d026 | Color compartido 1 de los sprites multicolor. |
SP0COL, SP1COL, … | $d027 – $d02e | Colores propios de los ocho sprites. |
El VIC tiene algún registro adicional, y alguno de los registros vistos también tiene algún bit adicional, pero lo recogido en la tabla de arriba es más del 90%.
Y a partir de ahora, música y sonido…