CONTROLADORES DE VIDEO

Jesús Antonio Jiménez Aviña

 

Hunab.

 

ESCOM IPN.

México D.F. a 6 de Mayo de 1996.

 

Los compiladores de C y Pascal cuenta con los controladores de video *.bgi, los cuales nos permiten manejar el modo gráfico para varios tipos de tarjetas, desde CGA y EGA hasta VGA. A pesar de que en una tarjeta normal VGA la memoria consta de 256K estos controladores solo permiten una resolución máxima de 640X480 pixeles y 16 colores.

 

Si queremos realizar un trabajo de mejor calidad tendríamos que ocupar el controlador VGA256.BGI o SVGA256.BGI, este par de controladores aumenta el manejo de colores de 16 a 256. y dependiendo del tipo de tarjeta aumenta la resolución.

 

Como es difícil conseguir estos controladores, otra opción que tenemos es.construir nuestro propio controlador. Para lo cual debemos programar directamente la tarjeta de video.

 

Si contamos con una tarjeta VGA tenemos ya por default 256 colores y una resolución de 320X200 (modo 13h), lo cual da un total de 64K de memoria convencional, Por lo que, un primer ejercicio de programación de la tarjeta de video consiste en cambiar nuestra tarjeta al modo 13h (dependiendo del lenguaje los números hexadecimales se indican con un $ en Pascal, 0x en C o una h en ensamblador)

 

CAMBIO DEL MODO DE VIDEO.

Para poner la computadora en un modo de video se puede usar la siguiente rutina:

 

void modogra(int modo)//inicia el modo de video para tarjetas hasta vga

{

 union REGS reg;

 reg.h.ah=0;

 reg.h.al=modo;

 int86(0x10,&reg,&reg);

}

 

y si dentro del programa se llama a la instrucción

 

modogra(0x13)

 

la maquina se pone en modo 13h

 

Antes de terminar el programa es conveniente regresar a la computadora a un modo normal, para lo cual se puede usar por ejemplo las instrucciones:

 

  modogra(0x12);//regresa a modo de video 12h  640*480*16 colores

  textmode(C80);//pasa a modo texto

 

MEMORIA DE VIDEO.

La memoria de video en modo gráfico empieza en la dirección   A000:0000h.

 

Si estamos en modo 13h y mandamos escribir un valor en esta localidad podremos ver un punto en la parte superior del monitor. La ventaja de mandar a escribir directamente a memoria, es que agiliza bastante el manejo de información.

 

Para accesar a la memoria de video en C se debe usar una instruccion como la siguiente:

char far *apun= (char far *) 0xA0000000;

 

Para mandar escribir un punto a una localidad se usa una instrucción como

*(apun+j*320+i)=c;

 

donde apun es la base o inicio de la memoria de video, i nos indica la columna, j el renglón donde se quiere poner el punto y c es el índice del color que se quiere poner.

 

PALETA DE COLORES.

Otro ejercicio sencillo consiste en cambiar directamente los valores de la paleta de colores, para lograr que tome valores entre 256 K posibles colores.

 

La paleta de colores no es mas que una tabla de 256 registros con 3 componentes cada registro. Los componentes son R, G, B (rojo, verde, azul).

 

La tarjeta de video cuenta con un DAC (Digital Analogic Conversor) el cual permite el acceso a la paleta de colores mediante los puertos 3C7h, 3C8h, 3C9, la función de los puertos es la siguiente:

 

            3C7h  Lectura.

            3C8h  Escritura.

            3C9h  Componentes del color (R, G, B)

 

Cada ves que se hace la llamada al puerto 3C9h realiza el cambio de registro automáticamente. Con un par de funciones podemos modificar los colores o crear nuevas tonalidades que antes no podíamos realizar.

 

//Rutina para leer un color especifico

void R_C(int C, int R, int G, int B)

 {

   outportb(0x3c7,C); //Escribimos el índice del color

   R= inportb(0x3c9);  //Leemos componente Roja

   G= inportb(0x3c9);  //Leemos componente Verde

   B= inportb(0x3c9);  //Leemos componente Azul

 }

//Rutina para escribir un color con componente R, G, B.

void W_C(int C, int R, int G, int B)

 {

  outportb(0x3c8,C);  //Escribimos el índice del color

  outportb(0x3c9,R);  //Escribimos componente Roja

  outportb(0x3c9,G);  //Escribimos componente Verde

  outportb(0x3c9,B);  //Escribimos componente Azul

 }

Con estas funciones podemos tener un total de 256 K combinaciones de colores en una tarjeta de video VGA.

 

PROCESAMIENTO DE IMÁGENES.

 

Al tener una imagen, podemos analizarla punto por punto, y representar a estos por medio de lineas con X grado de inclinación. Gracias a esto obtenemos una perspectiva de la imagen. Ciertas partes de acuerdo a su color toman un efecto de profundidad o de sobresalir en la imagen.

 

XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.

 

Para poder manejar imágenes o sonido tenemos que manejar una gran cantidad de información ya almacenada por algún otro medio como algún scanner para imágenes o una tarjeta de sonido para audio. Estos dispositivos cuentan con formatos propios o estandares entre los mas usuales para imágenes son: GIF, TIFF, JPG, PCX, BMP etc. para sonido VOC, MOD, MIDI, WAV, SB etc. Algunos de estos formatos cuentan con cierto tipo de compactación, por lo cual es difícil para nosotros manejar si no contamos con la información del formato. Pero otros son mas simples como es el caso del formato BMP para imagen y WAV para sonido.

 

Dentro del encabezado del formato encontramos: identificación del formato longitud del cuerpo, paleta de colores o frecuencia a reproducir, tamaño de la imagen o duración del sonido etc.

 

Se podría decir que es muy distinto manejar sonido a manejar imágenes. Lo único distinto que tiene es la forma de como lo percibimos ya que la computadora lo maneja de igual forma como cadenas de 0's y 1's. Si manejamos imágenes tendremos que sacar la información por medio del monitor y en el caso del sonido por medio de la tarjeta de sonido o por la bocina interna de la PC.

 

Para manejar cualquiera de estos dos tipos de información, debemos de tomar en cuenta, el como programar los dispositivos de entrada o salida. La información para programarlos se encuentra muy dispersa y es difícil de conseguir.

 

Seria aconsejable tener nociones de como se transmite el sonido o como se generan los colores. Al saber esto se facilita el manejo de la información.

 

XXXXXXXXXXXXXXXXXXXXXXXXXXXX.

 

Programando directamente los puertos de la PC, obtenemos la respuesta en un menor tiempo.

 

Al aumentar la velocidad de respuesta se pueden realizar animaciones en tiempo real, y una interactividad mejor.