Continuando con el importante tema de los registros VGA, que se dejará zanjado definitivamente al término de este artículo, se describirán a continuación los más importantes registros del Cathode Ray Tube Controller.
En las tablas siguientes están descritos los registros a los que se tiene acceso mediante la programación del CRTC Controller y el significado de sus bits junto con los puertos índice en los que están situados.
En los ejemplos incluidos en el CD de la revista se pueden encontrar listados pensados para ayudar a comprender el resultado que comportaría la modificación de algunos de estos registros, pero conviene que la base de esta experimentación la realice el lector, ya que mediante la librería VGAREGS.H y gracias a las tablas publicadas tiene total control sobre su tarjeta y debería ir investigando el significado de cada registro y el uso que podría dar de cada uno de ellos en sus programas.
Para ayudar en esta experimentación, y para comprender los valores que toman estos registros cuando tenemos iniciado un modo gráfico estándar, el autor incluye en el CD de la revista una sencilla utilidad (VGAREGS.EXE) que le va a permitir al lector explorar los registros de los modos estándar y unchained de la VGA.
La utilidad VGAREGS gestiona (carga y salva) estos ficheros y es capaz de mostrar los valores de los registros VGA en el modo de vídeo que se le indique, además de ofrecer la posibilidad de modificar estos valores y generar un .UNC preparado para hacer pruebas con los nuevos registros establecidos.
También puede ser usado para estudiar el valor que toman los registros en cualquier modo estándar. Por ejemplo, podemos estudiar cómo está compuesto internamente el modo 13h cargándolo en Vgaregs mediante la tecla M (de modo) y escribiendo 19 como respuesta al modo (siempre en formato decimal 13h = 19d) que queremos cargar. A continuación aparecen en pantalla los valores que los registros toman por defecto en ese modo.
Esto es tan sólo un ejemplo de lo que podemos hacer con esta sencilla utilidad, además de la posibilidad de crear nuestros propios modos X.
No obstante, existe una utilidad shareware técnicamente más completa que Vgaregs, y ésta es Tweak. Si podeís conseguirla, adelante, es una herramienta casi profesional de Robert Schmidt.
- InitRegTable(): Inicializa la estructura RegTable con los valores
iniciales que necesita.
- LoadRegTable( char *filename ): Carga un fichero .UNC dentro de la
estructura RegTable en memoria, leyendo todos sus registros y cargándolos.
- SaveRegTable( char *filename ): Salva hacia un archivo el contenido
actual de la tabla en memoria.
- InRegTable():Lee el valor de todos los registros
que son importantes para el modo X en la estructura.
- OutRegTable(): Manda hacia los registros VGA los valores que contiene
la tabla.
Si quisiéramos cargar el fichero generado con Vgaregs 256x240.unc en un programa propio, por ejemplo, bastaría con que se encontrara en el mismo directorio que el .EXE generado desde un listado que incluyera las líneas:
InitRegTable(); LoadRegTable( "256x240.unc" ); OutRegTable();Con esta librería se pretende proporcionar al lector un control sobre todos los modos X, aunque en los artículos se profundice sobre los 320 píxels horizontales de resolución.
Enmascarar significa tapar, cubrir. Esto es lo que hace la función MaskPlanes() que permite prohibir el acceso a cualquiera de los 4 planos de la VGA. A esta función se le pasa como parámetro un byte cuyos últimos cuatro bits indican 1 (acceso permitido) o 0 (acceso no permitido), de manera que el bit 0 representa al plano 0, el bit 1 al plano 1, etc...
Si quisiéramos permitir sólo la escritura a los planos 0 y 2, se le debería pasar como parámetro el valor 5 (0101b). Es decir, cada bit actúa como interruptor para un plano ( el bit 0 para el plano 0, etc... ). Para permitir la escritura en los cuatro planos, bastaría con escribir MaskPlanes( 0xF ); ( 0xf = 15 = 1111b ), tal y como hace la función EnableAllPlanes().
El enmascaramiento de los planos se realiza mediante el Map Mask Register del VGA Sequencer, como se puede ver en las tablas de registros publicadas en el número anterior de la revista Sólo Programadores.
Un ejemplo de enmascaramiento de planos lo podemos ver en el listado del disco ejemplo4.c, donde realizamos un dibujo después de enmascarar el plano 0, que como se refleja en el resultado, resulta protegido contra escritura.
De Michael Abrash podemos encontrar los listados SETMODEX.ASM y SHOWPAGE.ASM. El primero muestra la inicialización del modo X que diseñó el "padre" de los modos unchained. El segundo muestra la función llamable desde C que M. Abrash creó para cambiar el Start Address Register.
De Robert Schmidt podemos encontrar MODEX.TXT, un documento que resulta una excelente introducción al modo X, extraido del programa TWEAK. El documento VGA.DOC, de diversos autores, resulta imprescindible pues acumula la definición de todos los registros VGA, incluyendo sus puertos, índices y el valor de sus bits. Una extracción de los registros que controla el CRTC se ha realizado hacia el documento CRTC.DOC.
Pulse aquí para bajarse los ejemplos y listados del
artículo (12 Kb).
Pulse aquí para bajarse la utilidad VGARegs (25
Kb).
Tabla 1: "Registros del CTR Controller (I)."
Tabla 2: "Registros del CTR Controller (II)."
Tabla 3: "Registros del CTR Controller (III)."
Tabla 4: "Registros del CTR Controller (IV)."
Tabla 5: "Registros del CTR Controller (V)."
Santiago Romero