Ingrese una cadena de texto compuesta de un carácter y un atributo, y una posición entre 0-3998 para escribir el carácter ASCII correspondiente con su color:
Cadena de Texto:
Posición de Memoria (0-3998):




Ingrese un valor de cursor entre 0 y 1999 para mover el cursor emulado en pantalla.





Modelando una VGA Estándar con HTML5 (Historia Informativa 4)

Cambiando Atributos de Color de los Caracteres


¿Cómo Funciona la Conversión de Color?

La conversión de color que llevamos en el emulador es de convertir valores RGB de 6 bits por componente, a 8 bits. Para esto, simplemente desplazamos el valor de 6 bits, 2 bits a la izquierda (lo cual multiplica los colores por 4).

La razón de esto es que HTML, y el esquema RGB normal, tiene una escala de 256 colores para el Rojo, el Verde y el Azul, con 8 bits por componente, para un total de 24 bits. Pero la tarjeta VGA estándar tiene una escala de 64 colores para el Rojo, el Verde y el Azul, con 6 bits por componente, para un total de solo 18 bits.

La escala de 64 colores es 1/4 que la del esquema RGB "moderno". Así que para hacer encajar este esquema de 64 colores con el de 256 colores, simplemente necesitamos multiplicar los colores de 6 bits por 4. Esto se logra simplemente desplazando ese valor de 6 bits, 2 bits a la izquierda.

Una consideración es que con esta conversión, los colores convertidos de 6 a 8 bits no llegarán a la escala máxima. Por ejemplo, el blanco convertido de 6 a 8 bits solo alcanzaría un valor de 252 (0xFC), e igualmente todos los demás colores, tendrían el valor, pero restándole 3.

Esto está bien para que la emulación sea rápida al máximo; pero si lo que queremos es tener colores un poco más aproximados a la escala máxima de 8 bits, simplemente debemos poner a 1 los 2 bits de menor peso, usando OR con el valor binario 11. Pero esto debe llevarse a cabo en todos los colores a excepción del negro (lo que implica un IF adicional).

Otra forma de ver esto es que los colores, siendo contados desde 0 a 63, son el valor esperado menos 1. Entonces, para tener la multiplicación correcta, simplemente le sumamos 1 a este valor, lo multiplicamos por 4, y a continuación le volvemos a restar 1 a ese valor, para tener un valor dentro del rango de 8 bits. Pero como se ve, es más fácil simplemente desplazar 2 bits a la izquierda y usar OR con 11 binario, excepto cuando el color es negro (0).