Fecha actual Dom Ago 18, 2019 9:52 am

Definición Concisa de los Registros VGA Estándar y sus Campos de Bits

[html]Programacion/Hardware/Video/VGA/Description.txt[/html]


Usuarios leyendo este tema: Ninguno

Definición Concisa de los Registros VGA Estándar y sus Campos de Bits

Notapor ~ » Jue Feb 28, 2013 6:36 am

Definición Concisa de los Registros VGA Estándar y sus Campos de Bits


Índice Completo





Este documento contiene toda la información centralizada más fundamental sobre los todos registros de la VGA, su significado, el significado de sus campos de bits, y su uso.

Este también contiene una referencia, creada por mí basándome en distintas fuentes mínimas, pero principalmente viendo el efecto de programar a mano registros y conjuntos de registros, sobre la utilidad y el efecto concreto de cada registro y combinación de configuraciones de registros VGA.

Por ahora esta referencia solo tiene información sobre los registros de posición del cursor de texto, pero necesito terminarla para poder avanzar en la implementación de un emulador VGA completo, y desde ahí, retroalimentar para poder visualizar si la implementación de un emulador de PC es correcta.
Imagen
IP for hosts file (email udocproject@yahoo.com to get updates if website becomes offline):
Código: Seleccionar todo
190.150.9.244 archefire.org



See what I'm doing in real time:
Main Desktop 1
Main Desktop 2
Avatar de Usuario
~
Site Admin
 
Mensajes: 2958
Registrado: Sab Nov 10, 2012 1:04 pm

Re: Definición Concisa de los Registros VGA Estándar y sus Campos de Bits

Notapor ~ » Lun Jun 24, 2013 12:43 pm

Ahora necesito agregar las definiciones para el modo gráfico CGA 320x200x4 (modo 4h), y para eso voy a usar el siguiente código:

modes.c

Para esto, lo relevante del código anterior es la definición de los registros para el modo 320x200x4:
Código: Seleccionar todo
/*****************************************************************************
*** NOTE: the mode described by g_320x200x4[]
is different from BIOS mode 05h in two ways:
- Framebuffer is at A000:0000 instead of B800:0000
- Framebuffer is linear (no screwy line-by-line CGA addressing)
*****************************************************************************/
unsigned char g_320x200x4[] =
{
/* MISC */
   0x63,
/* SEQ */
   0x03, 0x09, 0x03, 0x00, 0x02,
/* CRTC */
   0x2D, 0x27, 0x28, 0x90, 0x2B, 0x80, 0xBF, 0x1F,
   0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x9C, 0x0E, 0x8F, 0x14, 0x00, 0x96, 0xB9, 0xA3,
   0xFF,
/* GC */
   0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x02, 0x00,
   0xFF,
/* AC */
   0x00, 0x13, 0x15, 0x17, 0x02, 0x04, 0x06, 0x07,
   0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
   0x01, 0x00, 0x03, 0x00, 0x00
};



NOTA: parece haber un error en el Registro 6 del Controlador Gráfico, que debería tener a 1 el bit 0 para activar el Modo Gráfico (debería ser 3h, pero tiene un valor de 2h, como si fuera para modo texto).

El Registro 16 del Controlador de Atributos también debería tener un valor impar para el modo gráfico y un modo par para el modo texto (es decir el bit 0 debe estar a 1 para entrar en Modo Gráfico), y este sí tiene un valor impar para el Modo CGA 4h, así que sí hay un error.

El Registro 4 del Secuenciador a primera vista también está involucrado en elegir un modo gráfico o de texto, pero este bit está reservado en la VGA y solo sirve en una EGA genuina (inexistente en sistemas actuales), y su bit 0 debe tener el valor contrario al de los 2 registros anteriores. Es decir que el valor de este registro debe ser impar (1) para el Modo Texto, y debe ser par (0) para el Modo Gráfico.

En otras palabras, estos dos registros siempre tiene un valor impar para los modos gráficos, y un valor par para los modos de texto.
Imagen
IP for hosts file (email udocproject@yahoo.com to get updates if website becomes offline):
Código: Seleccionar todo
190.150.9.244 archefire.org



See what I'm doing in real time:
Main Desktop 1
Main Desktop 2
Avatar de Usuario
~
Site Admin
 
Mensajes: 2958
Registrado: Sab Nov 10, 2012 1:04 pm

Re: Definición Concisa de los Registros VGA Estándar y sus Campos de Bits

Notapor ~ » Lun Jun 24, 2013 1:41 pm

Imagen
IP for hosts file (email udocproject@yahoo.com to get updates if website becomes offline):
Código: Seleccionar todo
190.150.9.244 archefire.org



See what I'm doing in real time:
Main Desktop 1
Main Desktop 2
Avatar de Usuario
~
Site Admin
 
Mensajes: 2958
Registrado: Sab Nov 10, 2012 1:04 pm

Re: Definición Concisa de los Registros VGA Estándar y sus Campos de Bits

Notapor ~ » Mié Jun 26, 2013 9:28 am

Necesito comprobar cómo funciona el modo 4h en cuanto a su escritura, así que he hecho el siguiente programa de prueba básico para escribir los mismos datos repetitivos en este modo gráfico:

mode4h.zip
Imagen
IP for hosts file (email udocproject@yahoo.com to get updates if website becomes offline):
Código: Seleccionar todo
190.150.9.244 archefire.org



See what I'm doing in real time:
Main Desktop 1
Main Desktop 2
Avatar de Usuario
~
Site Admin
 
Mensajes: 2958
Registrado: Sab Nov 10, 2012 1:04 pm

Re: Definición Concisa de los Registros VGA Estándar y sus Campos de Bits

Notapor ~ » Mié Jun 26, 2013 11:19 am

He comprobado que el modo 4h realmente usa 2 bits por pixel, para un total de 4 colores en modo indexado.

La dirección inicial está en 0xB8000.

Este modo usa un totaal de 16,000 bytes.

Cada byte controla 4 pixeles (2 bits por pixel).

Este modo también está separado en 2 bloques de exactamente 8192 bytes, de los cuales solo los primeros 8000 bytes realmente se usan y son visibles.

Los datos de color de las líneas pares se recuperan del primer bloque de 8192 bytes; y los datos de color de las líneas impares se recuperan del segundo bloque de 8192 bytes.
Imagen
IP for hosts file (email udocproject@yahoo.com to get updates if website becomes offline):
Código: Seleccionar todo
190.150.9.244 archefire.org



See what I'm doing in real time:
Main Desktop 1
Main Desktop 2
Avatar de Usuario
~
Site Admin
 
Mensajes: 2958
Registrado: Sab Nov 10, 2012 1:04 pm

Re: Definición Concisa de los Registros VGA Estándar y sus Campos de Bits

Notapor ~ » Mié Jun 26, 2013 11:50 am

Ahora necesito crear un programa de MS-DOS capaz de leer un archivo, el cual debe contener los datos a escribir en los registros de la VGA, para poder probar diferentes valores de registros sin la necesidad de recompilar un programa particular, sino que sea una utilería genérica.

También voy a necesitar crear otro programa de MS-DOS capaz de leer los registros de la VGA en el estado actual, y capaz de escribir estos valores a un archivo binario, en el mismo formato que el programa de carga de registros.
Imagen
IP for hosts file (email udocproject@yahoo.com to get updates if website becomes offline):
Código: Seleccionar todo
190.150.9.244 archefire.org



See what I'm doing in real time:
Main Desktop 1
Main Desktop 2
Avatar de Usuario
~
Site Admin
 
Mensajes: 2958
Registrado: Sab Nov 10, 2012 1:04 pm


Volver a Programación VGA

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 13 invitados


cron