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,®,®); } 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. |