Todo lo que hemos visto en la entrada anterior tiene que ver con los mapas de memoria direccionados por el microprocesador 6510. Como hemos visto, se pueden direccionar bancos de ROM o sustituirlos por la RAM que está “debajo”.
Por si esto fuera poco, el VIC también admite diferentes configuraciones de memoria. Para empezar, el VIC es capaz de direccionar 16K y, como el C64 direcciona 64K, eso significa que admite cuatro configuraciones básicas o cuatro bancos.
Pero es que, además, para cada uno de los cuatro bancos posibles, es posible recolocar los juegos de caracteres personalizados, los bitmaps, la RAM de pantalla, los sprites, etc. No ocurre lo mismo con la RAM de color, que siempre tiene que estar en el rango $d800 – $dbe7.
Bancos del VIC:
La forma de seleccionar el banco de 16K direccionado por el VIC es actuando sobre los bits 0 y 1 del registro CI2PRA = $dd00 del CIA2:
- %00: $c000 – $ffff
- %01: $8000 – $bfff
- %10: $4000 – $7fff
- %11: $0000 – $3fff (valor por defecto)
Juegos de caracteres personalizados:
La forma de ubicar los juegos de caracteres personalizados, como ya vimos en su momento, es actuando sobre los bits 1, 2 y 3 del registro VMCSB = $d018. Esto da lugar a 2^3 = 8 posibles valores o ubicaciones.
Estas ocho posibles ubicaciones, lógicamente, son relativas al comienzo del banco de 16K que esté direccionando el VIC:
Bitmaps:
La forma de ubicar los bitmaps, como también vimos en su momento, es actuando sobre el bit 3 del registro VMCSB = $d018. Esto da lugar a dos posibles valores o ubicaciones.
Estas dos posibles ubicaciones, nuevamente, son relativas al comienzo del banco de 16K que esté direccionando el VIC:
RAM de pantalla y punteros de sprites:
La forma de ubicar la RAM de pantalla es actuando sobre los bits 4, 5, 6 y 7 del registro VMCSB = $d018. Esto da lugar a 2^4 = 16 posibles valores o ubicaciones:
- %0000: $0000 – $03ff
- %0001: $0400 – $07ff (valor por defecto)
- %0010: $0800 – $0bff
- …
- %1111: $3c00 – $3fff
Estas dieciséis posibles ubicaciones, una vez más, son relativas al comienzo del banco de 16K que esté direccionando el VIC:
La RAM de pantalla, en realidad, no ocupa 1K = 1.024 bytes, sino que sólo ocupa 1.000 bytes (25 filas x 40 columnas). Por tanto, sobran 24 bytes. Entre esos 24 bytes están los ocho punteros a los sprites. Más concretamente, los punteros a los sprites son los últimos ocho bytes de los 1.024 configurados en VMCSB.
Definición de los sprites:
No sólo es posible reubicar los punteros de los sprites dentro de los 16K direccionados por el VIC, cambiando la ubicación de la RAM de pantalla.
Por supuesto, también es posible reubicar la propia definición gráfica de los sprites (64 bytes por sprite). Esto es posible, precisamente, porque esa definición no ocupa una posición fija, sino que ocupa una posición variable (siempre dentro de los 16K direccionados por el VIC) que viene indicada o especificada por los punteros de los sprites.
En definitiva, entre las posibilidades de configuración de la memoria del 6510 y las del VIC, la flexibilidad es casi absoluta, como hemos visto.