Para poner el modo texto:
1º) desactivar el modo bitmap, desactivando el bit 5 en $d011
2º) ajustar las posiciones de la RAM de video si fueran distintas (usualmente lo son). La RAM de color es siempre fija en $d800. Por supuesto el banco del VIC debe cambiarse al que pertenezca la dirección de la nueva RAM de video.
3º) ajustar la dirección del generador de caracteres. Esto es, el lugar de memoria donde se alojan los patrones de pixels (bits) de cada caracter, en el modo de texto estándard, la memoria de video es un indice directo a esta tabla del generador de caracteres.
4º) ajustar el banco en el VIC
5º) informar el SO (kernal) de la nueva dirección de la RAM de video (sólo si pretendes usar el editor de pantalla en BASIC correctamente, o rutinas relacionadas del kernal/basic)
Aquí te pongo mi código para cambiar al modo texto:
// --------------------------------------
// Modo texto estandard 40 x 25
// --------------------------------------
modo_texto:
:set_vic_bank(VIC_BANK_TXT)
//configura ram video y memoria generador caracteres ($d018)
lda #[[txtmem & $3fff] / 64] | [[chmem & $3fff] / 1024]
sta $d018
lda #[txtmem/256]
sta $0288 // informamos al kernal de la nueva mem. pantalla
lda $d011 // valor estandar para modo texto (modo bmp off, etc)
and #%11011111 // modo bitmap (bit5) = 0
sta $d011
lda #$08
sta $d016 // valores estandar VIC modo texto
rts
txtmem, es la dirección donde comienza mi ram de video (del modo texto)
chmem, es la dirección donde comienza mi generador de caracteres (del modo texto)
La macro para cambiar de banco, ya la puse antes, y bueno seguro que ya sabes como hacerlo, a tu manera.
El bit 4 en $d016, controla el modo multicolor (on/off). Podria haberlo configurado con máscaras binarias, pero me resulta más práctico, en este caso, poner el valor estándar del modo texto en $d016. Este valor, simplemente se averigua haciendo un PEEK en basic, nada más encender el ordenador.
Espero que te sirva.