

El modo 13h es el modo estándar de 256 colores en el hardware gráfico VGA introducido en 1987 con el IBM PS/2 . Tiene una resolución de 320 × 200 píxeles . [ 1 ] "13h" se refiere al número del modo en la BIOS VGA . La "h" significa hexadecimal .
El modo 13h proporciona a los programadores un bloque lineal de memoria de vídeo de 320 × 200 , donde cada byte representa un píxel. Esto facilita la programación a costa del acceso a otras funciones útiles del hardware VGA.
Dada la relación de aspecto de una pantalla con resolución de 320 × 200 para su uso en una pantalla 4:3 , el Modo 13h no tiene píxeles cuadrados . [ 2 ]
Detalles técnicos
El modo 13h es algo peculiar, ya que la VGA es un dispositivo planar desde el punto de vista del hardware y no es adecuada para operaciones gráficas complejas. La VGA tiene 256 KiB de memoria de vídeo, que constan de 4 bancos de 64 KiB, conocidos como planos (o "mapas" en la documentación de IBM). La disposición de la memoria planar divide los píxeles horizontalmente en grupos de cuatro. Para cualquier byte dado en la apertura de memoria de vídeo de 64 KiB del PC , se puede acceder a cuatro píxeles en pantalla seleccionando el o los planos necesarios. Esto es más complejo para el programador, pero permite el acceso a toda la memoria de vídeo disponible y otras ventajas (véase el modo X ).
El modo 13h, sin embargo, permite al programador acceder a la VGA de forma lineal, donde cada dirección consecutiva en la apertura representa un píxel consecutivo en la pantalla. No es necesario manipular los planos para seleccionar los píxeles correctos que se van a modificar o leer. Esto se logra utilizando la configuración VGA 'Chain 4', en la que los dos bits menos significativos de la dirección de apertura de 16 bits se utilizan para seleccionar el plano en el que escribir o del que leer. La ventaja es que el programador dispone de un modelo de acceso sencillo; la desventaja es que ahora solo se puede acceder a 2 × 14 (16 KiB) del espacio de direcciones del plano de vídeo (los otros 2 bits se utilizan para seleccionar los planos), por lo que solo se puede direccionar un total de 64 KiB (4 × 16 KiB). Los 48 KiB superiores de cada plano permanecen sin utilizar en este modo.
A diferencia de SVGA y otras profundidades de color superiores, el Modo 13h, que forma parte del conjunto de modos de vídeo MCGA , tiene 18 bits de color , 6 por canal RGB. Los datos de la paleta de colores no se almacenan en la memoria propiamente dicha , sino que se modifican, leen y escriben mediante llamadas a los puertos de E/S de bajo nivel, en los registros del convertidor digital -analógico (DAC) .
Los datos de la paleta se copiaban a menudo de los puertos de bajo nivel, uno a uno, a una ubicación en la memoria después de los datos de la pantalla , de modo que los colores se pudieran guardar junto con los píxeles a los que pertenecían. Una captura de pantalla en modo 13h consta simplemente de 64 000 bytes de valores del 0 al 255, cada uno un índice de un color de una paleta conocida de múltiples colores. Si la paleta de colores está desordenada o es totalmente incorrecta, una hoja verde aparecerá azul, o de cualquier otro color posible, dependiendo de para qué color en particular se haya configurado, cuál de los 256.
Debido a la forma en que se asignan los bloques de memoria en dicho entorno, los bytes en el segmento 0xA000 desde el desplazamiento 64000 hasta el 64768 se pueden escribir sin efectos negativos. Esto permite al programador guardar los bytes adicionales, 256 (colores) × 3 (canales de color) = 768 bytes, al final del archivo de captura de pantalla. Estos deben leerse nuevamente y escribirse en el puerto de color para que cambien cuando se carga una imagen que contiene un pie de página con información de color. Un método utilizado con esto era tener una paleta global y hacer coincidir los colores de una paleta de color antigua con una nueva. Esto implicaba cambiar el índice de cada píxel, donde apuntaría a una coincidencia casi perfecta de un color del conjunto de colores antiguo al nuevo. Esto también tenía inconvenientes, ya que a veces no había suficientes gradientes y aparecían artefactos y otros problemas.
No es imprescindible configurar el modo gráfico a través de la BIOS; es posible cambiar el modo gráfico en modo protegido de 32 bits, aunque resulta un poco más complicado. Esto implica escribir datos de tamaño en el controlador VGA.
Variantes
Se puede obtener un modo planar alternativo de 256 colores desactivando el modo Cadena 4 (desencadenamiento). Los modos de vídeo creados con esta técnica se denominan colectivamente Modo X , aunque el término se usó originalmente para un modo VGA que también tenía píxeles cuadrados. Si bien IBM no documentó específicamente estos modos (junto con muchos otros modos VGA posibles), las funciones y características del hardware VGA utilizadas para implementarlos se documentaron al menos desde 1988 en la Referencia Técnica de la Interfaz de Hardware PS/2 .
Notación
13hSe refiere al número 19 escrito en notación hexadecimal en un formato típico del código ensamblador para procesadores Intel. En el lenguaje de programación C , el número hexadecimal 13 se escribe 0x13.
En lenguaje ensamblador x86, el modo de video se ingresa configurando el registro AL a 13h, el registro AH a 0 y luego llamando a la interrupción 10h de la BIOS . [ 1 ] Los dos registros de 8 bits AL y AH componen el registro AX de 16 bits .
Aunque 13 en hexadecimal es 19 en decimal, en el esquema de numeración de modos de pantalla de QuickBASIC es simplemente modo de pantalla 13 (no hexadecimal). [ 3 ] Muchos modos de pantalla de QuickBASIC tienen números que difieren de los modos BIOS en los que se basan. [ 4 ]
Ejemplos de código fuente
Código de ensamblaje para entrar en el Modo 13h:
mov ax , 0013 h int 10 hComo ejemplo del modo 13h en el código fuente de un videojuego, Wolfenstein 3D incluye esta función en un archivo llamado "ID_VL.C". Entra en el modo 13h usando dos instrucciones de ensamblador (con el prefijo asm) incrustadas en el código fuente C y cambia a un modo planar personalizado que permite el triple búfer. [ 5 ]
void VL_SetVGAPlaneMode ( void ) { asm mov ax , 0x13 asm int 0x10 VL_DePlaneVGA (); VGAMAPMASK ( 15 ); VL_SetLineWidth ( 40 ); }Código fuente de Wolfenstein 3D (alrededor de 1992) que llama a la BIOS para cambiar al modo 13h.
Referencias
- ^ a b Brown, Ralf D. "La lista de interrupciones de Ralf Brown" . Recuperado el 24 de agosto de 2018 .
- ^ Fabien Sanglard, GAME ENGINE BLACK BOOK: WOLFENSTEIN 3D, 2.ª edición, Capítulo Hardware, página 59, disponible gratuitamente en https://fabiensanglard.net/gebb/index.html
- ^ "Microsoft QuickBasic 4.5 Advisor" . Microsoft . 1990. Archivado del original el 5 de enero de 2009. Consultado el 19 de julio de 2007 .
- Un ejemplo importante es el modo de pantalla 0 de QuickBASIC, que abarca todos los modos de texto de la BIOS 00h a 03h. Además, los modos de pantalla 1 y 2 de QuickBASIC corresponden a los modos de la BIOS CGA 04h a 06h. Cabe destacar que QuickBASIC tiene modos para el modo gráfico Hercules , que no cuenta con soporte estándar en la BIOS, y para los modos gráficos CGA extendidos de Olivetti/AT&T .
- ^ https://github.com/id-Software/wolf3d/blob/master/WOLFSRC/ID_VL.C#L108
Enlaces externos
- Programación VGA de 256 colores en C de David Brackeen
- Introducción a VGA... Modo 13h
- Ensamblador para principiantes: Modo 13h
- Referencia técnica de la interfaz de hardware IBM PS 2
- Estándares de visualización de computadoras