Las llamadas de interrupción del BIOS (Basic Input Output System) son una facilidad soportada por el BIOS que los programas DOS, u otro tipo de programas como cargadores de arranque, así como sistemas operativos usan para acceder al hardware más básico de un computador PC Compatible (arquitectura x86). Algunos sistemas operativos también usan el BIOS para probar e inicializar recursos de hardware durante las primeras etapas del arranque. Estas llamadas pueden verse como parte de la funcionalidad de un sistema operativo implementada en memoria no volátil por el propio fabricante del computador.
Los sistemas operativos de PC primitivos se apoyaban en estas llamadas para realizar parte de sus operaciones de entrada/salida. Sin embargo, estas llamadas están implementadas en modo real, mientras que muchos sistemas operativos ya funcionan en Modo Protegido. Tales sistemas operativos han de cambiar a modo real antes de realizar la llamada de interrupción y regresar a modo Protegido después. Linux y las versiones recientes de sistemas Windows ya no aprovechan estas llamadas e implementan enteramente todo el acceso al hardware en rutinas propias.
Este artículo trata específicamente sobre las llamadas de función de los BIOS usados en los computadores compatibles con el IBM PC, es decir, los computadores de la arquitectura x86.
Invocación de una interrupción
Invocar una interrupción puede hacerse usando la instrucción INT en lenguaje ensamblador de los procesadores x86. Por ejemplo, para imprimir un carácter a la pantalla usando la interrupción 10h del BIOS, las siguientes instrucciones deberán ser ejecutadas:
MOV AH, 0Eh ; Imprime carácter en la pantalla
MOV AL, '!' ; carácter a imprimir
INT 10h ; Llamada a las funciones de video del BIOS
Tabla de interrupciones
Abajo se encuentra una lista de interrupciones del BIOS. Note que algunos BIOS (particularmente los viejos) no soportarán todas estas interrupciones.
Vector de interrupción en Hex
|
Descripción
|
00h
|
CPU: Ejecutado después de un intento de división por cero o cuando un cociente no cabe en el destino
|
01h
|
CPU: Ejecutado después de cada instrucción de código de máquina mientras la bandera de trazado esté activo
|
02h
|
CPU: NMI. Usado por el Power On Self Test (POST) para errores de memoria
|
03h
|
CPU: La más baja interrupción no reservada, es usada exclusivamente para depuración, y el manejador INT 03h siempre es implementado por un programa de depuración
|
04h
|
CPU: Numeric Overflow. Usualmente causado por la instrucción INTO cuando la bandera de desbordamiento está activada
|
05h
|
Ejecutado cuando es presionado Shift-Print Screen, así como cuando la instrucción BOUNDh detecta una falla de límite
|
06h
|
CPU: Llamada cuando una excepción de opcode indefinido (código inválido). Usualmente instalado por el sistema operativo
|
07h
|
CPU: Llamada cuando se intenta usar una instrucción de coma flotante y no está disponible un coprocesador numérico
|
08h
|
IRQ0: Implementada por el componente de temporización del sistema; llamado 18,2 veces por segundo (una cada 55 ms) por el PIC
|
09h
|
IRQ1: LLamada después de que cada tecla es presionada o soltada (como también durante el tiempo en que una tecla es mantenida presionada)
|
0Bh
|
IRQ3: Llamada por los puertos seriales 2 y 4 (COM2 y COM4) cuando es necesaria atención
|
0Ch
|
IRQ4: Llamada por los puertos seriales 1 y 3 (COM1 y COM3) cuando es necesaria atención
|
0Dh
|
IRQ5: Llamada por el controlador del disco duro (PC/XT) y el segundo puerto paralelo LPT2 (AT) cuando es necesaria atención
|
0Eh
|
IRQ6: Llamada por el controlador de disco floppy cuando es necesaria atención
|
0Fh
|
IRQ7: Llamada por el primer puerto paralelo LPT1 (impresora) cuando es necesaria atención
|
10h
|
Servicios de video - Instalado por el BIOS o el sistema operativo; llamado por programas de software
AH
|
Descripción (Ing)
|
Descripción (Esp)
|
00h
|
Set Video Mode |
Selecciona modo de vídeo
|
01h
|
Set Cursor Shape |
Ajusta forma del cursor
|
02h
|
Set Cursor Position |
Ajusta la posición del cursor
|
03h
|
Get Cursor Position And Shape |
Lee la posición y la forma del cursor
|
04h
|
Get Light Pen Position |
Lee la posición del Light Pen
|
05h
|
Set Display Page |
Selecciona la Página de exhibición
|
06h
|
Clear/Scroll Screen Up |
Borra la pantalla / Desplazamiento (Scroll) hacia arriba
|
07h
|
Clear/Scroll Screen Down |
Borra la pantalla / Desplazamiento (Scroll) hacia abajo
|
08h
|
Read Character and Attribute at Cursor |
Lee un carácter y su atributo en la posición del cursor
|
09h
|
Write Character and Attribute at Cursor |
Escribe un carácter y su atributo en la posición del cursor
|
0Ah
|
Write Character at Cursor |
Escribe un carácter en la posición del cursor
|
0Bh
|
Set Border Color |
Ajusta el color del borde de la pantalla
|
0Eh
|
Write Character in TTY Mode |
Escribe un carácter en modo TTY
|
0Fh
|
Get Video Mode |
Lee el modo de vídeo
|
13h
|
Write String |
Escribe un string
|
|
11h
|
Instalado por el BIOS; retorna la lista del equipo instalado
|
12h
|
Instalado por el BIOS o el sistema operativo; retorna el tamaño de la memoria convencional
|
13h
|
Servicios de disco de bajo nivel; instalado por el BIOS o el sistema operativo; llamado por programas de software
AH
|
Descripción (Ing)
|
Descripción (Esp)
|
00h
|
Reset Disk Drives |
Reinicia las unidades de disco
|
01h
|
Check Drive Status |
Chequea el estado de las unidades
|
02h
|
Read Sectors From Drive |
Lee sectores desde la unidad
|
03h
|
Write Sectors To Drive |
Escribe sectores hacia la unidad
|
04h
|
Verify Sectors On Drive |
Verifica sectores en la unidad
|
05h
|
Format Track On Drive |
Formatea una pista en la unidad
|
08h
|
Get Drive Parameters |
Lee los parámetros de la unidad
|
09h
|
Init Fixed Drive Parameters |
Inicia los parámetros de la unidad fija (disco duro)
|
0Ch
|
Seek To Specified Track |
Hace un Seek a la pista especificada
|
0Dh
|
Reset Fixed Disk Controller |
Reinicia el controlador de la unidad fija
|
15h
|
Get Drive Type |
Lee el tipo de la unidad
|
16h
|
Get Floppy Drive Media Change Status |
Lee el estado de cambio del medio de la unidad floppy
|
|
14h
|
Rutinas para la comunicación vía el puerto serial. Usado por programas de software
AH
|
Descripción (Ing)
|
Descripción (Esp)
|
00h
|
Serial Port Initialization |
Inicialización del puerto serial
|
01h
|
Transmit Character |
Transmite carácter
|
02h
|
Receive Character |
Recibe carácter
|
03h
|
Status |
Estado
|
|
15h
|
Misceláneas (Rutinas de soporte para servicios del sistema)
AH
|
AL
|
Descripción (Ing)
|
Descripción (Esp)
|
4Fh
|
|
Keyboard Intercept |
Intercepta el teclado
|
83h
|
|
Event Wait |
Espera evento
|
84h
|
|
Read Joystick |
Lee el Joystick
|
85h
|
|
Sysreq Key Callout |
|
86h
|
|
Wait |
Espera
|
87h
|
|
Move Block |
|
88h
|
|
Get Extended Memory Size |
Lee el tamaño de la memoria extendida
|
C0h
|
|
Get System Parameters |
Lee los parámetros del sistema
|
C1h
|
|
Get Extended BIOS Data Area Segment |
Lee el segmento del área de datos extendida del BIOS
|
C2h
|
|
Pointing Device Functions |
Funciones del dispositivo apuntador
|
E8h
|
01h
|
Get Extended Memory Size (Newer function, since 1994). Gives results for memory size above 64 Mb. |
Lee el tamaño de la memoria extendida
|
E8h
|
20h
|
Query System Address Map. The information returned from e820 supersedes what is returned from the older AX=E801hh and AH=88hh interfaces. |
Información sobre el Mapa de memoria del sistema
|
|
16h
|
Implementado por el BIOS o el sistema operativo. Provee rutinas a ser llamadas por programas de software que se comunican con el teclado
AH
|
Descripción (Ing)
|
Descripción (Esp)
|
00h
|
Read Character |
Lee carácter
|
01h
|
Read Input Status |
Lee el estado de entrada
|
02h
|
Read Keyboard Shift Status |
Lee el estado de las teclas de desplazamiento (SHIFT, CTRL, ALT)
|
10h
|
Read Character Extended |
Lee el carácter extendido
|
11h
|
Read Input Status Extended |
Lee el estado de entrada extendido
|
12h
|
Read Keyboard Shift Status Extended |
Lee el estado de las teclas de desplazamiento extendido
|
|
17h
|
Servicios de Impresora - Usado por los programas de software para comunicarse con la impresora
AH
|
Descripción (Ing)
|
Descripción (Esp)
|
00h
|
Print Character to Printer |
Imprime un carácter a la impresora
|
01h
|
Initialize Printer |
Inicializa la impresora
|
02h
|
Check Printer Status |
Lee el estado de la impresora
|
|
18h
|
Ejecuta el IBM ROM BASIC: Los computadores personales de originales de IBM contienen el BASIC en ROM para ser ejecutado por esta rutina en el evento de una falla en la carga (boot). LLamado por el BIOS
|
19h
|
Boot Strap Loader. Después del POST, esta interrupción es usada por el BIOS para cargar el sistema operativo
|
1Ah
|
Servicios del Real Time Clock (RTC) (Reloj de Tiempo Real) - Llamado por programas de software para comunicarse con el RTC
AH
|
Descripción
|
00h
|
Lee el RTC
|
01h
|
Ajusta el RTC
|
02h
|
Lee la hora del RTC
|
03h
|
Ajusta la hora del RTC
|
04h
|
Lee la fecha del RTC
|
05h
|
Ajusta la fecha del RTC
|
06h
|
Ajusta la alarma RTC
|
07h
|
Resetea la alarma del RTC
|
|
1Bh
|
Instalado por el sistema operativo; automáticamente llamado por INT 9h cuando ha sido presionado Ctrl-Break
|
1Ch
|
Llamado automáticamente por INT 08h ; disponible para el uso por programas de software cuando una rutina necesita ser ejecutada regularmente
|
1Dh
|
No debe ser llamado; simplemente un puntero para la Tabla de Parámetros del Video (VPT), que contiene datos sobre modos de video
|
1Eh
|
No debe ser llamado; simplemente un puntero para la Tabla de Parámetros del Disquete (DPT), conteniendo una variedad de información concerniente a las unidades de disquete
|
1Fh
|
No debe ser llamado; simplemente un puntero para Tabla la Tabla de Caracteres de Gráficos de Video (VGCT), que contiene los datos para los caracteres ASCII 80h a FFh
|
41h
|
Puntero de dirección: Tabla de Parámetros del Disco Fijo (FDPT) (Primera unidad de disco)
|
46h
|
Puntero de dirección: Tabla de Parámetros del Disco Fijo (FDPT) (Segunda unidad de disco)
|
4Ah
|
Llamado por el RTC para alarma
|
70h
|
IRQ8: Llamado por el RTC
|
74h
|
IRQ12: Llamado por el ratón
|
75h
|
IRQ13: Llamado por el coprocesador matemático
|
76h
|
IRQ14: Llamado por el controlador IDE primario
|
77h
|
IRQ15: Llamado por el controlador IDE secundario
|
Hooks del DOS
El IBMBIO.COM del PC DOS, y el su equivalente, el IO.SYS del MS-DOS, se enganchaban (hook) al INT 13 para la detección del cambio del disco floppy, llamadas para formateo de pistas, corregir errores de límites en el DMA, trabajar alrededor de problemas en el IBM PC ROM BIOS del "01/10/84" que modela el código FC antes de la primera llamada. El vector de interrupción 13 puede apuntar a un hook de software en vez de la rutina en el BIOS, con el que algunos virus búlgaros son conocidos para usar en contra del software de monitoreo de virus.[1]
INT 18h: Ejecuta el BASIC en ROM
El INT 18h
tradicionalmente saltaba a una implementación de BASIC almacenada en ROM, el Cassette BASIC. Esta llamada típicamente sería invocada si el BIOS no podía identificar ningún volumen booteable en el inicio. (En el momento en que el IBM PC fue lanzado, en 1981, el BASIC en ROM fue una característica clave). A medida que el tiempo pasó y el BASIC ya no fue despachado en todos los PC, esta interrupción simplemente exhibiría un mensaje de error indicando que no fue encontrado ningún dispositivo booteable (el famoso "No ROM BASIC", o un mensaje más explicativo en versiones posteriores del BIOS). En otras versiones del BIOS se solicitaba al usuario insertar un volumen booteable y presionar una tecla, y después que el usuario lo hiciera, retornaría al bootstrap loader para tratar de cargar de nuevo.
Véase también
Referencias
Enlaces externos