Por defecto, cuando trabajamos en modo SC2/SC4, la VRAM esta segmentada para hospedar los Tileset de Patrones de 3 bancos (Bank0 en 0000h, Bank1 en 0800h y Bank2 en 1000h) y sus correspondientes colores en otros 3 bancos (Bank0 en 2000h, Bank1 en 2800h y Bank3 en 3000h).
Podeis echarle un ojo a esta segmentacion de VRAM en diferentes modos en el
blog de AoranteSin embargo, si el juego es sencillo o se ha economizado en la cantidad de Patrones y
estos solo ocupan un Banco (Bank0), se puede activar un modo por el cual
podemos usar esos Patrones/Colores para dibujar en toda la pantalla. Del
siguiente documento sacamos el siguiente extracto donde lo comenta.
Control register #4 which sets the PG address of the PG has a different function in mode 2. Only bit 2, PG13, sets the address of the PG (so it's either address 0 or 2000h). Bits 0 and 1 are an AND mask over the character number. The character number is 0 - 767 (2FFh) and these two bits are ANDed over the two highest bits of this value (2FFh is 10 bits, so over bit 8 and 9). So in effect, if bit 0 of control register #4 is set, the second array of 256 patterns in the PG is used for the middle 8 rows of characters, otherwise the first 256 patterns. If bit 1 is set, the third array of patterns is used in the PG, otherwise the first.
The relation PN -> CT is the same as PN -> GT. Each byte in the CT sets the colour of one pixel line of a character. The high four bits set the foreground colour, the low the background colour. If either of these is 0, it is transparent and the colour of the backdrop (BD) is used.
Also control register #3 has a different meaning. Only bit 7 (CT13) sets the CT address. Somewhat like control register #4 for the PG, bits 6 - 0 are an AND mask over the top 7 bits of the character number. The TC in control register #7 is not used in this mode.
Un ejemplo con el Magical Tree. Modo normal, tres bancos de Patrones y Colores
Cada banco se usa para colorear el tercio correspondiente de pantalla.
Modo "1 banco" de Patrones y Colores
Un solo banco de patrones y colores es suficiente para dibujar en toda la pantalla.
Los "pros" son obvios, nos ahorramos la transferencia de los Patrones y Colores de 2 bancos (Bank1 y Bank2) con lo que ganamos en rapidez a la hora de escribir en VRAM y nos permite usar esos bancos para hacer copia de los Bancos ocultos al visible (de VRAM a VRAM). En contra tenemos la limitación de la cantidad de Patrones (y colores) que podremos emplear en hacer el juego.
Para poder activar este modo hay que tocar dos registros, tal y como nos decia el documento de arriba, configurando los bits del Registro #3 con 10011111 (o 9Fh) y los del Registro #4 con 00000000.
Ejemplo en ensamblador:
;seleccion de un solo bank de tiles
ld b,0 ;en B 00 para dejar solo el bank0 de tiles
ld c,4 ;en C se mete el numero de registro que queremos escribir
call WRTVDP ;escribe en VDP
;seleccion de un solo bank de color
ld b,10011111b ;en B 9F para dejar solo el bank0 de color
ld c,3 ;en C se mete el numero de registro que queremos escribir
call WRTVDP ;escribe en VDP
Y eso es todo
Si encontrais algun error o queréis colaborar para extender este mini-tuto, comentad en este hilo.
Ojo; en algunos modelos con VDP clon (Toshiba) es posible que esta configuración no funcione.
PD: Gracias a SapphiRe @z80st_software por descubrirme este "modo"