INT 10H: Despliegue en Video.
Acepta el número de funciones en el AH para el
modo de pantalla, colocación del cursor.
INTERRUPCIÓN 10H DEL BIOS PARA MODO TEXTO.
La INT 10H también tiene otros servicios (disponibles por medio de la función en el
AH) para facilitar el manejo de toda la pantalla. La interrupción conserva el contenido
de los registros BX, CX,DX,DI,SI y BP, pero no el AX, algo que debe recordar si
utiliza la INT 10H en un ciclo.
Las secciones siguientes describen cada función.
INT 10H, función 00H: Establece modo de video
Como describió antes, esto establece al AL con el modo, por lo común 03 para color o
07 para monocromático. ver figura 10-1.
INT 10H, función 01H: Establece el tamaño del cursor
El cursor no es parte del conjunto de caracteres ASCII y sólo existe en modo de texto.
La computadora mantiene su característico hardware para control del cursor, con
operaciones especiales INT para su uso. El símbolo del cursor normal es similar a un
carácter de subrayado, pero puede utilizar la función 01H de la INT para ajustar el
tamaño vertical del cursor. Establezca estos registros:
CH (bits 4-0) = parte superior del cursor (“línea inicial de rastreo”).
CL (bits 4-0) = parte inferior del cursor (“línea final de rastreo”).
Puede ajustar el tamaño del cursor entre la parte superior y la inferior: 0:14 para VGA,
0:13 para monocromático y EGA y 0:7 para CGA. Para un VGA, el código siguiente
agranda el cursor desde la parte superior hasta la inferior:
MOV AH,01H ; Petición para designar el tamaño del cursor
MOV CH,00 ; Línea inicial de rastreo
MOV CL,14 ; Línea final de rastreo
INT 10H ; Llama al BIOS
INT 20h; salir
Ahora el cursor parpadea como un rectángulo relleno. Puede ajustar su tamaño a
cualquiera entre los límites establecidos, por ejemplo, 04:08, 03:10, etc. El cursor
conserva sus atributos hasta que otra operación los cambie. Usando 0:14 (VGA), 12:13
(monocromático o EGA) o 6:7 (CGA) se establece el cursor normal. Si no está seguro
de los límites en su monitor, primero intente ejecutar una función 03h con DEBUG.
INT 10H, función 02H: Establece la posición del cursor
Esta útil operación coloca el cursor en cualquier parte de la pantalla, de acuerdo con las
coordenadas renglón: columna. Establezca estos registros:
BH = Número de página, para modo de texto con 80 columnas, puede ser 0 (por
omisión), 1,2 o3.
DH = Renglón
DL = Columna
La posición del cursor en cada página es independiente de su posición en las otras
páginas. Ese código coloca al cursor en el renglón 5, columna 20, para la página 0:
MOV AH,02H ;Petición para designar el cursor
MOV BH,00 ;Página número 0
MOV DH,05 ;RENGLÓN
INT 10H ;Llama al BIOS
INT 10H, función 03H: Lee la posición del cursor
Un programa puede utilizar la función 03H para determinar el renglón, columna y
tamaño actuales del cursor, en particular en situaciones en donde un programa tiene que
utilizar la pantalla por un momento y tiene que guardar y restaurar la pantalla original.
Coloque el número de página en el BH, sólo para la función 02H:
MOV AH,03 ; Petición de colocar el cursor
MOV BH,00 ; Número de página 0 (normal)
INT 10H ; Llama al BIOS
La operación regresa estos valores:
AX y BX = Sin cambio
CH = Línea de rastreo inicial del cursor
CL = Línea de rastreo final del cursor
DH = Renglón
DL = Columna
El ejemplo siguiente utiliza la función 03H para leer el cursor y determinar su
posición y tamaño y después usa la función 02H para avanzar a la columna
siguiente en la pantalla:
MOV AH,03H ;Petición de posición del cursor
MOV BH,00 ; Página 0
INT 10H ; Llama al BIOS
MOV AH,02H ; Coloca el cursor
INC DL ; en la columna siguiente
INT 10H ; Llama al BIOS
INT 10H, función 05H: Selección de página activa
La función 05h permite establecer la página que será desplegada para los modos de
texto 0-3 y 13-16. Puede crear páginas diferentes y pedir pasar de una página a otra. Las
páginas en modo de 80 columnas son 0-3. Aquí está el código para esta función:
MOV AH,05H ;Petición de página activa
MOV AL,#pág ; Número de página
INT 10H ; Llama al BIOS
INT 10H, función 06H: Recorrer hacia arriba la pantalla
Cuando un programa de manera inadvertida despliega texto hacia bajo de la pantalla
después de la parte inferior, la línea siguiente “sale” del inicio de la parte superior. Pero
aún si la operación de interrupción especifica la columna cero, las líneas nuevas llevan
sangría y las líneas subsecuentes pueden estar mal alineadas. La solución es recorrer la
pantalla, de manera que las líneas desplegadas “salgan” por la parte superior y líneas en
blanco aparezcan en la parte inferior.
Colocar un número cero en el AL provoca que toda la pantalla se recorra hacia arriba, y
en realidad se limpie. Establecer un valor diferente de cero en el AL provoca que ese
número de línea se recorra hacia arriba. Cargue los registros siguientes:
AL = Número de líneas o cero para toda la pantalla
BH = Atributo
CX = Renglón: columna iniciales
DX = Renglón: columna finales
El código siguiente recorre toda la pantalla una línea y establece un atributo de
color:
MOV AX,0601H ; Recorre hacia arriba una línea
MOV BH,03H ; Fondo en cyan, con prime plano en juego
MOV CX,000 ; Hasta 24,79 (pantalla completa)
INT 10H ; Llama al BIOS
A continuación está el enfoque estándar para recorrer una sola línea:
1_ Definir un elemento con nombre, por ejemplo ROW, incivilizado en cero, para
establecer la posición del renglón del cursor.
2_ Desplegar una línea y avanzar el cursor a la línea siguiente.
3_ Examinar para ver si ROW está cercano a la parte inferior de la pantalla (CMP
ROW,22).
4_ Si no es así, incrementar ROW (INC ROW) y salir.
5_ Si es cierto, recorrer una línea, utilice ROW para colocar el cursor y hacer ROW
igual a 00.
Los registros CX y DX permiten recorrer cualquier parte de la pantalla. Pero sea muy
cuidadoso al hacer corresponder el valor de AL con la distancia en el CX:DX, en
especial cuando haga referencia a una parte de la pantalla. Las instrucciones
siguientes recorren cinco líneas, y en realidad crean una ventana en el centro de la
pantalla con sus propios atributos:
MOV AX,0605H ; Recorre cinco líneas
MOV BH,61H ; Fondo café, con primer plano azul
MOV CX,0A1CH ; Desde el renglón 10, columna 28
MOV DX,0E34H ; hasta el renglón 14, columna 52 (parte depantalla)
INT 10H ; Llama al BIOS
El ejemplo especifica un recorrido de cinco líneas, que es el mismo número que
la distanciaentre los renglones 10 y 14. Ya que el atributo para una ventana
permanece hasta que otra operación lo cambie, al mismo tiempo puede
establecer varias ventanas con diferentes atributos.
INT 10H, función 07H: Recorrer hacia abajo la pantalla
Para modo de texto, el recorrido hacia abajo de la pantalla provoca que las líneas
inferiores desaparezcan por la parte inferior y aparezcan líneas en blanco en la parte
superior. Cargue los registros siguientes igual que la función 06H (recorrido hacia
abajo):
AL = Número de líneas, o cero para la pantalla completa
BH = Atributo
CX = Renglón: columna iniciales
DX = Renglón: columna finales
INT 10H, función 08H: Leer atributo o carácter en la posición del cursor
La función 08H puede leer tanto un carácter como su atributo del área de despliegue de
video en los modos de texto o gráfico. Cargue el número de página normalmente, en el
BH, como lo muestra el ejemplo siguiente:
MOV AH,08H ; Petición de leer atributo o carácter
MOV BH,00 ; Número de página 0 (normal)
INT 10H ; Llama al BIOS
La operación regresa el carácter en el AL y su atributo en el AH. En modo gráfico, para
un carácter no ASCII la operación regresa 00H. Puesto que sólo se lee un carácter a la
vez, tiene que codificar un ciclo para leer una sucesión de caracteres.
INT 10H, función 09H: Desplegar atributo o carácter en la posición del cursor
Aquí está una operación divertida que despliega caracteres en modo de texto o gráfico
con intermitencia, en video inverso y todo eso. Establezca los registros:
AL = Un sólo carácter ASCII que será desplegado cualquier número de veces
BH = Número de página
BL = Atributo
CX = Número de veces que la operación despliega de manera repetida el carácter
que está en el
A continuación veremos un ejemplo que despliega 80 guiones y establece un
atributo de color:
MOV AH, 09H ; Petición de despliegue
MOV AL, ‘-’ ; Carácter que se despliega
MOV BH, 0 ; Página número 0
MOV BL, 61H ; Fondo café, primer plano azul
MOV CX, 80 ; 80 caracteres repetidos
INT 10H ; Llama al BIOS
El despliegue de caracteres diferentes requiere un ciclo. En modo de texto, pero no en el
gráfico, los caracteres desplegados de manera automática van de una línea a la
siguiente. Para desplegar una indicación o un mensaje, codifique una rutina que
establezca el CX en 01 y cree un ciclo para mover un carácter a la vez desde la memoria
al AL. (Como el CX está ocupado, no se puede usar con facilidad la instrucción LOOP.)
También, después de desplegar cada carácter, utilice la función 02H de la INT 10H,
para avanzar el cursor a la columna siguiente.
INT 10H, función 0AH: Despliega un carácter en la posición del cursor
Esta operación despliega un carácter en modo de texto o gráfico. La única diferencia
entre las funciones 0AH y 09H en modo de texto es que la función 0AH utiliza el
atributo actual, mientras que la función 09H establece el atributo. Aquí está el código
para esta función:
MOV AH, 0AH ; Petición de despliegue
MOV AL, carácter ; Carácter que se despliega
MOV BH, #página ; Número de página
MOV CX, repetición ; Número de caracteres repetidos
INT 10H ; Llama al BIOS
Con frecuencia, las funciones de la INT 21H del DOS que puede imprimir cadenas de
caracteres y responder a los caracteres de control de la pantalla son mas adecuados que
las operaciones del BIOS.
INT 10H, función 0EH: Escribir en teletipo
Esta operación le permite utilizar un monitor como terminal para despliegue simple.
Establezca la función 0EH en el AH, el carácter para desplegar en el AL, el número de
página en el BH y el color del primer plano (modo gráfico) en el BL:
MOV AH, 0EH ; Petición para desplegar
MOV AL, carácter ; Carácter que se despliega
MOV BH, #página ; Número de página activa (algunos
sistemas)
MOV BL, color ; Color del primer plano (modo gráfico)
INT 10H ; Llama al BIOS
Los caracteres de control de retroceso (08H), campana (07H), retorno de carro (0DH) y
avance de línea (0AH) actúan como comandos para formatear la pantalla. De forma
automática, la operación avanza el cursor y cuando llega al final de la línea, envía los
caracteres a la línea siguiente, recorre la pantalla y mantiene los atributos presentes de la
pantalla.
INT 10H, función 0FH: Obtiene el modo actual de video
Utilice esta función para determinar el modo actual de video. (Véase la función 00H.)
Aquí está un ejemplo:
MOV AH, 0FH ; Petición de modo de video
INT 10H ; Llama al BIOS
CMP AL, 03 ; Si el modo es 3,
JE ... ; entonces saltar
La operación regresa estos valores:
AL = Modo actual de video
AH = Caracteres por línea (20, 40 u 80, en donde 50H - 80)
BH = Número de pagina actual
INT 10H, función 11H: Generador de carácter
Esta complicada función para los sistemas EGA, MCGA y VGA inicia un modo
establecido y restaura el ambiente de video. Una discusión está fuera del alcance de esta
obra.
INT 10H, función 12H: Selecciona la rutina alterna de pantalla
Esta función permite usar monitores EGA y VGA. Para obtener información sobre
cualquiera de estos monitores, cargue 10H en el BL; la operación regresa:
BH = 00H para color y 01H para monocromático
BL = 00H para 64K, 01H para 128K, 02H para 192K y 03H para 256K
CH = Bits del adaptador
CL = Configuración de conmutación
La operación permite usar varias funciones elaboradas para las computadoras dl tipo
PS/2, tal que 30H (selecciona líneas de rastreo), 31H (carga la paleta por omisión) y
34H (emulación de un cursor).
INT 10H, función 13H: Despliega una cadena de caracteres
Para monitores EGA y VGA, esta operación despliega cadenas con opciones de
establecer el atributo y mover el cursor y actúa sobre los caracteres de control de
retroceso, campana, retorno de carro y avance de línea. Los registros AS:BP deben
contener la dirección segmento: desplazamiento de la cadena que despliega. El código
es como sigue:
MOV AH, 13H ; Petición para desplegar
MOV AL, subfunción ; 0, 1, 2 o 3
MOV BH, #página ; Número de página
MOV BL, atributo ; Atributos de la pantalla
LEA BP, dirección ; Dirección de la cadena en ESBP
MOV CX, longitud ; Longitud de la cadena de caracteres
MOV DX, pantalla ; Posición relativa de inicio en la pantalla
INT 10H ; Llama al BIOS
Las cuatro subfunciones en el AL son:
00 Despliega el atributo y la cadena; no avanza el cursor.
01 Despliega el atributo y la cadena; avanza el cursor.
02 Despliega el carácter y después el atributo, no avanza el cursor.
03 Despliega el carácter y después el atributo; avanza el cursor.
INTERRUPCIÓN 10H DEL BIOS PARA GRÁFICOS.
La INT 10H facilita el manejo completo de la pantalla para modo gráfico y modo de
texto, como vimos. La operación preserva el contenido de los registros BX, C, DX, DI,
SI y BP, pero no el de AX. Las secciones siguientes describen cada una de las
funciones de la INT 10H.
INT 10H, función 00H: Establece el modo de video
La función 00H en el AH y el modo 12H en el AL establecen el modo estándar gráfico
en color para la VGA:
MOV AH, 00H ;Petición para designar el modo
MOV AL, 12H ;Con resolución 640 x 480 vga
INT 10H ;Llama al BIOS
Establecer el modo gráfico hace que el cursor desaparezca.
INT 10H, función 04H: Lee la posición de la pluma óptica
Utilice esta función con gráficos para determinar el estado de una pluma óptica. La
operación regresa la información siguiente:
AH 0 si el estado es no funcionando, y 1 si es funcionando.
DX Renglón en el DH y columna en el DL.
CH/BX Posición de pixel, con línea (horizontal) de la malla en el
BH y columna o
punto en el BX.
INT 10H, función 08H: Lee el atributo o carácter en la posición del cursor.
Esta función puede leer los caracteres y los atributos desde el área de despliegue tanto
en modo de texto como en modo gráfico.
INT 10H, función 09H: Despliega atributo o carácter en la posición actual del
cursor
Para modo gráfico, utilice el BL para definir el color del primer plano. Si el bit 7 es
cero, el color definido reemplaza los colores actuales presentes de pixeles; si el bit 7 es
uno, el color definido es combinado (se le aplica un XOR) con ellos. Para detalles, vea
la sección anterior, “Interrupción 10H del BIOS para el modo de texto”.
INT 10H, función 0AH: Despliega un carácter en la posición del cursor
Utilice esta función para establecer la paleta de colores y desplegar un carácter gráfico.
El número en el BH (00 o 01) determina el propósito del registro BL:
1. BH = 00. Selecciona el color del fondo, en donde el BL contiene el número del
color en los bits 0-3 (cualquiera de 16 colores):
MOV AH, 0BH ; Petición
MOV BH, 00 ; fondo
MOV BL, 04 ; color rojo
INT 10H ; Llama al BIOS
2. BH = 01. Selecciona la paleta para gráficos, en donde BL contiene la paleta (0 o 1):
MOV AH, 0BH ; Petición de color
MOV BH, 01 ; Selecciona la paleta
MOV BL, 00 ; número 0 (verde, rojo, café)
INT 10H ; Llama al BIOS
Una vez que selecciona una paleta, permanece activa. Pero cuando cambia la paleta,
toda la pantalla cambia a esa combinación de colores. Si utiliza la función 0BH
mientras está en modo texto, el número establecido para el color 0 de la paleta
determina el color del borde.
INT 10H, función 0CH: Escribe un pixel punto
Utilice la función 0CH para desplegar un color seleccionado (fondo y paleta).
Establezca estos registros:
AL = Color del pixel
BH = Número de página (EGA o VGA)
CX = Columna
DX = Renglón
El número mínimo para la columna o el renglón es 0 y el número máximo depende del
modo de video. El ejemplo siguiente establece un pixel en la columna 50, renglón 70 en
la pantalla:
MOV AH, 0CH ; Petición para escribir un punto
MOV AL, 03 ; Color del pixel
‘ MOV BH, 0 ; Página número 0
MOV CX, 50 ; Posición horizontal (columna)
MOV DX, 70 ; Posición vertical (registro)
INT 10H ; Llama al BIOS
EGA/VGA modos ODH, 0EH, 0FH y 10H proporcionan 8, 4, 2 y 2 páginas de área de
despliegue de video, respectivamente. La página por omisión es la número 0.
INT 10H, función 0DH: Lee un pixel
Esta operación, la opuesta de la función OCH, lee un punto para determinar el número
de su color. Establezca el BH con el número de página (EGA o VGA), el CX con la
columna y el DX con el renglón. El número mínimo para la columna o el renglón es
cero y el máximo depende del modo de video. La operación regresa el color del pixel en
el AL.
INT 10H, función 0EH: Escribe un teletipo
Véase en “Interrupción 10H del BIOS para el modo de texto”.
INT 10H, función 10H: Establece los registros de la paleta
Esta función maneja los sistemas EGA y VGA. Un código de subfunción en el AL
determina la operación:
00 Establece un registro de paleta, donde BH contiene el número a
establecer y el BL el registro a establecer.
01 Establece el registro de rastreo, donde el BH contiene el número que se establece.
02 Establece todos los registros de paletas y de rastreo, ES:DX apunta a una tabla de
17 bytes, en donde los bytes 0-15 son números de paleta y el byte 16 es el número
de rastreo.
03 Conmuta el bit para intensificar/intermitencia, donde 00 en el BL permite
intensificar y 01 permite intermitencia.
Otros códigos de subfunciones AL para el VGA bajo la función 10H son 07H (lee
registro individual de la paleta), 08H (lee el registro de rastreo), 09H (lee todos los
registros de la paleta y de rastreo), 10H (establece un registro individual de color), 12H
(establece un bloque de registros de color), 13H (selecciona una página de color), 15H
(lee un registro individual de color), 17H (lee un bloque de registros de color) y 1AH
(lee el estado de la página de color).
INT 10H, función 1AH: Código de combinación de despliegue de lectura / escritura
Esta operación regresa los códigos que identifican el tipo de despliegue que está en uso.
INT 10H, función 1BH: Regresa la información de funcionalidad/ estado
Esta complicada operación regresa la información a un bufer de 64 bytes identificando
el modo de video, tamaño del cursor, página a la que se le da soporte y así
sucesivamente.
INT 10H, función 1CH: Guarda o restaura el estado de video
Esta función guarda o restaura el estado de video, incluyendo el estado de los registros
de color, el área de datos del BIOS y el hardware del video.