Más pruebas extrañas en MS_DOS, en este caso quise comprobar si el modo texto se podria utilizar como un modo "map/tile" de consolas. Estos modos utilizan una parte de la memoria de video para guardar caracteres o tiles, y otra parte para guardar un mapa de como dibujarlos en pantalla.
En el caso de la VGA, el modo texto puede guardar unos 512 caracteres de 8x8 pixeles (dos colores cada uno), pero solo he conseguido que acceda a 256 caracteres. Puede mostrar mapas compuestos de 80x50 tiles (con caracteres de 8x8 pixeles), en resoluciones de 720x400 (dejando separaciones entre los tiles), o 640x400 (sin separaciones, este modo no funciona en monitores modernos).
Los caracteres se cargan desde imagenes png, modificando unos puertos de la VGA, que están pensados para cambiar la fuente del texto, pero también sirven para esto .
Además podemos utilizar el scroll por hardware y actualizar una columna o una fila de tiles fuera de la parte visible, en un proceso muy rápido que a penas utiliza CPU. Sólamente tenemos que actualizar 80+50 => 130 x 2 = 260 bytes, ya que cada celda corresponde a dos bytes, un byte para el caracter y otro para definir los dos colores (16 colores para el fondo, 16 para el "texto").
Este modo VGA solo tiene un sprite rectangular que parpadea y solo se puede poner en posiciones multiplos de 8 (o sea, el cursor). Dibujar sprites "de verdad "se puede lograr reservando unos cuantos caracteres para guardar y actualizar gráficos, pero en las pruebas que he hecho, el proceso es muy lento, o se ve muy mal, haciendo que este modo sea poco práctico para hacer juegos bonitos.
Parece ser que la tarjeta EGA no es compatible con este modo de caracteres 8x8, aunque debería funcionar igual.
No he subido aun el código fuente a ningún sitio, porque está muy desordenado, he comprobado que funciona en vga real, y no necesita a penas cpu para mostrar el mapa, (los sprites ya son otra historia).
Marcadores