9 Texas Workforce Commission – Skills Development Fund
HOW IS THE OBJECTIVE MEASURED?
7. total number of jobs created or persons retained under the program:
7.4.1. - MODOS GRÁFICOS.
Dada la inmensidad de estándares gráficos existentes para los ordenadores compatibles, que sucedieron al primer adaptador que sólo soportaba texto (MDA), y que de hecho llenan varias estanterías en las librerías, sólo se tratará de una manera general el tema. Se considerarán los estándares más comunes, con algunos ejemplos de programación de la pantalla gráfica CGA con la BIOS y programando la VGA directamente para obtener la velocidad y potencia del ensamblador. Las tarjetas gráficas tradicionales administran normalmente entre 16 Kb y 1 Mb de memoria de vídeo, en el segmento 0B800h las CGA/Hércules y en 0A000h las VGA. En los modos de vídeo que precisan más de 64 Kb se recurre a técnicas especiales, tales como planos de bits para los diferentes colores, o bien dividir la pantalla en pequeños fragmentos que se seleccionan en un puerto E/S. Las tarjetas EGA y posteriores vienen acompañadas de una extensión ROM que parchea la BIOS normal del sistema para añadir soporte al nuevo sistema de vídeo. A continuación se listan los principales modos gráficos disponibles en MDA, CGA, EGA y VGA, así como en las SuperVGA Paradise, Trident y Genoa. No se consideran las peculiaridades del PCJr.
Modo Texto Resolución Colores Segmento Tarjeta
──── ───── ────────── ─────── ──────── ─────────────────────
04h 40x25 320x200 4 B800 CGA, EGA, MCGA, VGA 05h 40x25 320x200 4 grises B800 CGA, EGA
05h 40x25 320x200 4 B800 CGA, VGA
06h 80x25 640x200 2 B800 CGA, EGA, MCGA, VGA 0Dh 40x25 320x200 16 A000 EGA, VGA
0Eh 80x25 640x200 16 A000 EGA, VGA 0Fh 80x25 640x350 2 A000 EGA, VGA 10h 80x25 640x350 4 A000 EGA con 64K
10h 80x25 640x350 16 A000 EGA con 256K, VGA 11h 80x30 640x480 2 A000 VGA, MCGA
12h 80x30 640x480 16/256k A000 VGA
13h 40x25 320x200 256/256k A000 VGA, MCGA 27h 720x512 16 Genoa 29h 800x600 16 A000 Genoa 2Dh 640x350 256/256k A000 Genoa 2Eh 640x480 256/256k A000 Genoa 2Fh 720x512 256 Genoa 30h 800x600 256/256k A000 Genoa 37h 1024x768 16 A000 Genoa
58h 100x75 800x600 16/256k A000 Paradise VGA 59h 100x75 800x600 2 A000 Paradise VGA
5Bh 100x75 800x600 16/256k A000 Trident TVGA 8800, 8900 5Bh 640x350 256 Genoa 6400
5Ch 80x25 640x400 256 A000 Trident TVGA 8800 5Ch 640x480 256 Genoa 6400
5Dh 80x30 640x480 256 A000 Trident TVGA 8800 (512K) 5Eh 80x25 640x400 256 Paradise VGA
5Eh 800x600 256 Trident 8900 5Eh 800x600 256 Genoa 6400
5Fh 80x30 640x480 256 Paradise VGA (512K) 5Fh 1024x768 16/256k A000 Trident TVGA 8800 (512K) 5Fh 1024x768 16 Genoa 6400
61h 96x64 768x1024 16/256k A000 Trident TVGA 8800 (512K) 62h 1024x768 256 Trident TVGA 8900
6Ah 800x600 16 Genoa 6400 7Ch 512x512 16 Genoa 7Dh 512x512 256 Genoa
memoria de vídeo. Las tarjetas SuperVGA complican aún más el panorama. En general, un programa que desee aprovechar al máximo el ordenador deberá apoyarse en drivers o subprogramas específicos, uno para cada tarjeta de vídeo del mercado. Esto es así porque aunque la BIOS del sistema (o el de la tarjeta) soporta una serie de funciones estándar para trabajar con gráficos, existen bastantes problemas. En primer lugar, su ineficiente diseño lo hace extremadamente lento para casi cualquier aplicación seria. Bastaría con que las funciones que implementa la BIOS (pintar y leer puntos de la pantalla) fueran rápidas, ¡sólo eso!, para lo que tan sólo hace falta una rutina específica para cada modo de pantalla, que la BIOS debería habilitar nada más cambiar de modo; casi todas las demás operaciones realizadas sobre la pantalla se apoyan en esas dos y ello no requeriría software adicional para mantener la compatibilidad entre tarjetas. Sin embargo, los programas comerciales no tienen más remedio que incluir sus propias rutinas rápidas para trazar puntos y líneas en drivers apropiados (y de paso añaden alguna función más compleja). Además, y por desgracia, no existe NI UNA SOLA función oficial en la BIOS que informe a los programas que se ejecutan de cosas tan elementales como los modos gráficos disponibles (con sus colores, resolución, etc.); esto no sólo es problemático en las tarjetas gráficas: la anarquía y ausencia de funciones de información también se repite con los discos, el teclado, ... aunque los programadores ya estamos acostumbrados a realizar la labor del detective para averiguar la información que los programas necesitan. Sin embargo, con los gráficos no podemos y nos vemos obligados a preguntar al usuario qué tarjeta tiene, de cuántos colores y resolución, en qué modo... y lo que es peor: la inexistencia de funciones de información se agrava con el hecho de que las VGA de los demás fabricantes hayan asignado de cualquier manera los números de modo. De esta manera, por ejemplo, una tarjeta Paradise en el modo 5Fh tiene de 640x400 puntos con 256 colores, mientras que una Trident tiene, en ese mismo modo, 1024x768 con 16 colores. En lo único que coinciden todas las tarjetas es en los primeros modos de pantalla, definidos inicialmente por IBM. Muchas SuperVGA tienen funciones que informan de sus modos, colores y resoluciones, lo que sucede es que en esto no se han podido poner de acuerdo los fabricantes y la función de la BIOS de la VGA a la que hay que invocar para obtener información, ¡difiere de unas tarjetas a otras!. Afortunadamente, existe un estándar industrial en tarjetas SuperVGA, el estándar VESA, que aunque ha llegado demasiado tarde, múltiples VGA lo soportan y a las que no, se les puede añadir soporte con un pequeño driver residente. Hablaremos de él más tarde.
No conviene seguir adelante sin mencionar antes la tarjeta gráfica Hércules. Se trata de una tarjeta que apareció en el mercado muy poco después que la CGA de IBM, con el doble de resolución y manteniendo la calidad MDA en modo texto. Esta tarjeta no está soportada por la BIOS (manufacturada por IBM) y los fabricantes de SuperVGA tampoco se han molestado en soportarla por software, aunque sí por hardware. Está muy extendida en las máquinas antiguas, pero hoy en día no se utiliza y su programación obliga a acceder a los puertos de entrada y salida de manera directa al más bajo nivel.
7.4.2.- DETECCIÓN DE LA TARJETA GRÁFICA INSTALADA.
El siguiente procedimiento es uno de tantos para evaluar la tarjeta gráfica instalada en el ordenador. Devuelve un valor en BL que es el mismo que retorna la INT 10h al llamarla con AX=1A00h (ver funciones de la BIOS en los apéndices): 0 ó 1 para indicar que no hay gráficos; 2 si hay CGA; 3, 4 ó 5 si existe una EGA; 6 si detecta una PGA; 7 u 8 si hay VGA o superior y 10, 11 ó 12 si existe MCGA. Retorna 255 si la tarjeta es desconocida (muy raro). La rutina funciona en todos los ordenadores, con o sin tarjetas gráficas instaladas y del tipo que sean.
tipo_tarjeta PROC PUSH DS
MOV AX,1A00h
INT 10h ; solicitar información VGA a la BIOS CMP AL,1Ah ; BL = tipo de tarjeta
JE tarjeta_ok ; función soportada (hay VGA) MOV AX,40h
MOV DS,AX MOV BL,10h MOV AH,12h
INT 10h ; solicitar información EGA a la BIOS CMP BL,10h
JE no_ega ; de momento, no es EGA MOV BL,1 ; supuesto MDA
TEST BYTE PTR DS:[87h],8 ; estado del control de vídeo JNZ tarjeta_ok ; es MDA
MOV BL,4 ; supuesto EGA color OR BH,BH
JZ tarjeta_ok ; así es INC BL ; es EGA mono JMP tarjeta_ok
no_ega: MOV BL,2 ; supuesto CGA
CMP WORD PTR DS:[63h],3D4h ; base del CRT JE tarjeta_ok ; así es
DEC BL ; es MDA tarjeta_ok: POP DS
RET