5. El hardware de video, modos, y el sistema de cursor. 5.1. Modos de video. 5.2. Organizaci¢n del modo texto. 5.3. Elementos del programa de la pr ctica 5. 5.3.1. Rutina de Display Mejorada. 5.3.2. Gr ficos alfanum‚ricos. 5.3.3. Seleccionando un modo de video. 5.3.4. Limpiando el display de video. 5.3.5. Escribiendo el conjunto de caracteres. 5.3.6. Listado conteniendo el c¢digo. +----------------------+ | 5.1. Modos de video. | +----------------------+ Los programas contruidos para la computadora IBM pueden dividirse en dos grupos: a) Los que trabajan en modo texto o alfanum‚rico. b) Los que lo hacen en modo gr fico. Los modos de video disponibles dependen de la clase de adaptador gr fico que tenemos instalado en nuestro ordenador. Los modos estandard originales de IBM son: +----------------------------+ | TABLA 5.1. Modos de video. | +----------------------------+ ADAPTADOR BW/ NUMERO SOPORTADO PARRAFO MODO TIPO COLOR COLORES RESOLUCION FILAS COLUMNAS B.I.O.S. COMIENZO EXTENSION ------------------------------------------------------------------------------------------------- 0 texto BW 1 320x200 40 25 todos B800H 2000 1 texto color 16 320x200 40 25 3,4,5,6 B800H 2000 2 texto BW 1 640x200 80 25 B800H 4000 3 texto color 16 640x200 80 25 B800H 4000 4 gr fico color 4 320x200 B800H 16000 5 gr fico color 2 320x200 B800H 16000 6 gr fico color 2 640x200 B800H 16000 7 texto BW 1 720x250 80 25 0,1 B000H 4000 13 gr fico color 16 320x200 A000H 32000 14 gr fico color 4 640x200 A000H 64000 15 gr fico color 2 640x350 A000H 56000 16 gr fico color 16 640x350 A000H 112000 17 gr fico color 2 640x480 A000H 38400 18 gr fico color 16 640x480 A000H 153600 19 gr fico color 256 320x200 5,6 A000H 64000 NOTA: la extensi¢n de los mapas de memoria se da en bytes. Donde los adaptadores gr fico soportados por la BIOS (Basic Input Output System) son: 1. MDA. Monocrome Display Adapter. Original de IBM. 2. Hercules. Original de Hercules Computer Technologies. 3. CGA. Color Graphics Adapter. 4. EGA. Enhanced Graphics Adapter. 5. MCGA. Multicolor Graphics Array. 6. VGA. Video Graphics Array. Existe otro adaptador no soportado por la BIOS pero que fu‚ introducido por IBM y que se llam¢ 8514-A. Esta tarjeta gr fica ha servido de modelo a las actuales Super VGA. Todas las tarjetas gr ficas originales de IBM proyectan su memoria de video sobre una franja de memoria principal perteneciente al espacio de direcciones del computador (excepto la 8514-A). De esta forma, si deseamos que se pinte algo en pantalla, s¢lo tenemos que escribir 1 o 2 bytes de informaci¢n, para que nuestro cambio se vea autom ticamente reflejado en pantalla. Esta zona var¡a su posici¢n, tama¤o y forma de programaci¢n dependiendo del modo en que trabajamos, tal y como se muestra en la tabla 5.1. A la hora de construir un programa que utilice la pantalla, debemos de asegurarnos de que el modo de video establecido a la hora de ejecutarlo es el apropiado, o de lo contrario deberemos de comutar el adaptador gr fico a nuestra conveniencia. En modo gr fico, la pantalla de nuestro monitor consta de un array bidimensional de puntos (llamados pixels), y se nos est  permitido acceder a cada uno de ellos. Esto quiere decir que podemos pintar un pixel en cualquier posici¢n de pantalla, sin m s que escribir los bytes adecuados en la memoria de video. En un modo texto, la pantalla se divide en una serie de cuadr¡culas rectangulares, cuyo n£mero y resoluci¢n en pixles, depende del modo de video seleccionado. Hablamos de filas y columnas para referirnos a una de estas cuadr¡culas, y sobre esta £nicamente podemos poner uno de los 256 caracteres distintos definidos en la tabla ASCII. Aunque nuestro monitor sigue dividido en pixels, ahora no podemos escribir un caracter tomando como origen el pixels que deseemos, sino en una (fila,columna). Esquem ticamente, nuestra pantalla se divide de la siguiente forma: pixel (0,0) --+ | +-------------+ F I L A S | +--->+---------+---------+---------+---------+---------+---------+... |úúú***úúú|úúú***úúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú| C |ú**úúú**ú|ú*úú**úúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú| |**úúúúú**|úúúú**úúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú| O |*********|úúúú**úúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú| |**úúúúú**|ú*******ú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú| L +---------+---------+---------+---------+---------+---------+... |úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú| U |úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú| |úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú| M |úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú| |úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú| N +---------+---------+---------+---------+---------+---------+... |úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú| A |úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú| |úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú| S |úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú| |úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú|úúúúúúúúú| +---------+---------+---------+---------+---------+---------+... : : : : : : : + = pixel. Diferentes posiciones donde podemos poner un caracter. - = pixel. | = pixel. ú = pixel. Esta pr ctica utiliza el modo texto establecido en el shell del MS-DOS, sistema operativo en el que supuestamente estamos trabajando. En consecuencia, estudiaremos este modelo para escribir en pantalla. +-----------------------------------+ | 5.2. Organizaci¢n del modo texto. | +-----------------------------------+ Existen dos resoluciones distintas en modo texto, como se puede apreciar en la tabla 5.1. Los modos m s utilizados trabajan con 80 columnas x 25 filas. Todos los sistemas de video introducidos por IBM excepto el adaptador 8514-A tienen su memoria de video mapeada dentro del espacio de direcciones del PC. Para escribir un caracter (que debe de estar definido en el conjunto de caracteres activo) debemos de escribir sobre estas direcciones de memoria. Una vez hecha esta operaci¢n, autom ticamente el caracter aparecer  en la pantalla. La caracter¡stica m s importante de la estructura de los sistemas de video IBM es que en los modos alfanum‚ricos, cada caracter ser  pintado de acuerdo con unos ciertos atributos. Por esto, debemos de escribir dos bytes por cada caracter que aparece en pantalla. El primero de ellos indica el caracter ASCII que vamos a escribir, y en el segundo byte se especifican los atributos de acuerdo con la siguiente tabla: +------------------------+ | Atributos en modo B/W | +------------------------+ +-------------------- 1 = parpadeo | 0 = sin parpadeo | +------------ 1 = intensidad alta | | 0 = intensidad normal 7 6 5 4 3 2 1 0 (bit) | | | | | | +-+-+ +-+-+ | | +-------+-------- 000 000 = no se pinta 000 001 = subrayado (no en modos de color 0 y 2) 000 111 = normal 111 000 = video inverso +-------------------------+ | Atributos en modo color | +-------------------------+ C O L O R D E L F O N D O +---------------- 000 = negro 100 = rojo | 001 = azul 101 = magenta +-+-+ 010 = verde 110 = marr¢n | | | 011 = cyan 111 = gris claro 7 6 5 4 3 2 1 0 (bit) | | | | | | +-+++-+ | | C O L O R D E L T E X T O | +--------- 0000 = negro 1000 = gris oscuro | 0001 = azul 1001 = azul claro +--- 1 parpadeo 0010 = verde 1010 = verde claro 0 no parpadeo 0011 = cyan 1011 = cyan claro 0100 = rojo 1100 = rojo claro 0101 = magenta 1101 = magenta claro 0110 = marr¢n 1110 = amarillo 0111 = gris claro 1111 = blanco +-----------------------------------------------+ | 5.3. Elementos del programa de la pr ctica 5. | +-----------------------------------------------+ El programa de la quinta pr ctica muestra en la pantalla un ejemplo de lo que podemos escribir utilizando el conjunto de caracteres ASCII extendidos (aquellos cuyo c¢digo supera el valor 127). +------------------------------------+ | 5.3.1. Rutina de Display Mejorada. | +------------------------------------+ En los programas de las pr cticas anteriores usamos los servicios del MS-DOS y de la BIOS para poner mensajes en pantalla de forma simple conteniendo s¢lo un caracter terminador. En MS-DOS, el servicio 9 de la interrupci¢n 21H interpreta como f¡n de mensaje el caracter $ (ver pr ctica 3). En la pr ctica 4, desarrollamos un procedimiento (llamado PLAY_MSG) para escribir un mensaje terminado en 0H usando la BIOS (interrupci¢n 10H, servicio 14). En cualquier caso, los dos servicios tienen posibilidades limitadas: el mensaje texto escrito en la posici¢n actual del cursor debe de tener como mucho una l¡nea, a la que se aplica un atributo. En esta pr ctica desarrollamos un procedimiento m s elaborado llamado SHOW_BLOCK, que pinta un mensaje multilinea, con un cierto atributo, sobre la posici¢n de la pantalla que deseemos. Las caracter¡sticas de la rutina determina el formado del mensaje. EL mensaje CHARS_FRAME en el segmento de datos de esta pr ctica est  estructurado de acuerdo con este formato. SHOW_BLOCK busca en el offset 0 la fila del mensaje, en el offset 1 la columna, en el offset 2 el atributo y en el offset 3 el mensaje a escribir. El c¢digo 0H marca el fin del mensaje y por lo tanto debe de ser el £ltimo caracter que forma parte del mismo. Si el mensaje es multilinea, el caracter FFH es tomado como new-line, para marcar el final de cada una de las lineas. +--------------------------------+ | 5.3.2. Gr ficos alfanum‚ricos. | +--------------------------------+ EL conjunto de caracteres extendidos de IBM contiene una colecci¢n de caracteres especiales que pueden ser utilizados para construir cajas, sombras y otros tipos de figuras. Aparecen en la tabla ASCII, dentro del conjunto extendido de caracteres que hay por encima del caracter 127. +----------------------------------------+ | 5.3.3. Seleccionando un modo de video. | +----------------------------------------+ Generalmente, una buena pr ctica de programaci¢n consiste en no asumir que se est  ejecutando un determinado modo de video cuando el programa est  corriendo. Nuestro programa debe de poner primero el modo de video deseado, pero comprobando antes si el hardware soporta ese modo. El programa de este cap¡tulo testea el byte de equipo auxiliar de la BIOS, de forma similar a como se hizo en la cuarta pr tica, para determinar si estamos en un modo en color o monocromo y activa el modo de video utilizando el servicio 0 de la interrupci¢n 10H. +---------------------------------------+ | 5.3.4. Limpiando el display de video. | +---------------------------------------+ Muchos programas requieren la pantalla l¡mpia antes de comenzar a escribir sobre ella. Desarrollar una rutina que efectue esta tarea es conveniente ya que probablemente la volveremos a utilizar. Puede ser desarrollada de diferentes formas. Tal vez, la m s simple sea la de escribir sobre pantalla 2000 caracteres blanco (80 columnas por 25 l¡neas). Tambi‚n podemos utilizar el servicio 6 de la interrupci¢n 10H. Este servicio realiza dos funciones: la primera, inicializar la pantalla con un cierto atributo, y la segunda, realizar un scroll de las l¡neas texto de una ventana. El procedimiento CLEAR_SCREEN usa este servicio de la BIOS para limpiar la pantalla inicializando una ventana con las mismas dimensiones que la pantalla, con el caracter banco y un atributo normal. +-----------------------------------------------+ | 5.3.5. Escribiendo el conjunto de caracteres. | +-----------------------------------------------+ la rutina SHOW_CHR muestra el conjunto de caracteres extendidos de IBM, junto con los 128 caracteres primeros pertenecientes a la tabla ASCII. EL c¢digo utiliza el registro AL para designar el caracter que va a ser imprimido. El registro DH almacena la fila y DL la columna. +---------------------------------------+ | 5.3.6. Listado conteniendo el c¢digo. | +---------------------------------------+