Repaso de registros del VIC

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…

2 comentarios en «Repaso de registros del VIC»

    1. Hola de nuevo.

      Un uso interesante de VMCSB, concretamente de sus bits 4 – 7, consiste en hacer scroll avanzado.

      El scroll descrito en:

      Scroll horizontal y vertical

      es un scroll sencillo. Cuando ya se ha desplazado la pantalla 8 pixels a la izquierda o la derecha, hay que mover toda la pantalla una columna a la izquierda o derecha, y meter los datos nuevos por el otro extremo. Hacer esto directamente sobre la «pantalla visible» ($0400 – $07e7) puede notarse.

      Una alternativa consiste en usar «dos pantallas», una que se está viendo (ej. $0400 – $07e7) y otra que está oculta (ej. $3c00 – $3fe7).

      La que se está viendo es la que desplazamos pixel a pixel a izquierda o derecha, y la que no se está viendo es la que copiamos una columna a la izquierda o derecha. Además, esta copia no hace falta hacerla de golpe tras haber «escroleado» 8 pixels; se puede ir copiando poco a poco, a razón de 1000 / 8 = 125 bytes por cada desplazamiento de pixel.

      Por último, cuando ya se han «escroleado» 8 pixels y ya toca mover toda la pantalla una columna a izquierda o derecha, en vez de ponernos a copiar en ese momento, como ya tenemos el trabajo hecho sobre la «pantalla oculta», lo que hacemos es conmutar de la «pantalla visible» a la «pantalla oculta» actuando sobre el registro VMCSB.

      Este tipo de scroll se llama «scroll de doble buffer», y es mucho más suave que el scroll normal, porque se evita copiar 1000 caracteres de golpe tras haber desplazado 8 pixels. Esa copia se puede ir haciendo poco a poco, en cada desplazamiento de pixel y, además, se hace sobre una pantalla o buffer que todavía no se ve.

      Interesante…

      Saludos, HVSW.

      Me gusta

Deja un comentario