El Sistema Básico de Entrada/Salida (Basic Input-Output System), conocido simplemente con el nombre de BIOS, es un programa informático inscrito en componentes electrónicos de memoria Flash existentes en la placa base. Este programa controla el funcionamiento de la placa base y de dichos componentes. Se encarga de realizar las funciones básicas de manejo y configuración del ordenador.
Historia
del ROM BIOS
El acrónimo BIOS
(-Basic Input/Output System-) fue inventado por Gary Kildall el creador del
sistema operativo CP/M en 1975,
siendo el nombre de un archivo del sistema. Las máquinas con CP/M usualmente tenían una ROM muy simple que hacía que la unidad
de disquete leyera datos desde su primera posición de memoria donde se
encontraba la primera instrucción del archivo BIOS que se encargaba de configurar el sistema o programa BIOS.
El diseño del IBM
PC (1981) incluyó todas las funcionalidades básicas de entrada y salida en memorias
tipo ROM, uso que posteriormente se
erigió como el estándar de facto para la industria. El BIOS del 5150 fue el único programa que la compañía IBM desarrolló
para el equipo, siendo la única pieza de código sobre la que se tenían derechos
exclusivos. Basándose en procesos de Ingeniería Inversa, se escribieron
versiones que tenían idénticas funcionalidades a la BIOS IBM pero además
incluyeron nuevos dispositivos como los discos duros y varias unidades de
disquete manteniendo la retro compatibilidad hasta el día de hoy.
Hasta 1990 el BIOS era almacenado en memorias ROM o
EPROM, después comenzó a utilizarse memorias Flash que pueden ser actualizadas
por el usuario sin necesidad de destapar la caja.
Después de un reset o del encendido, el procesador
ejecuta la instrucción que encuentra en el llamado vector de reset (16 bytes
antes de la instrucción máxima direccionable en el caso de los procesadores
x86), ahí se encuentra la primera línea de código del BIOS: es una instrucción
de salto incondicional, que remite a una dirección más baja en la BIOS. En los
PC más antiguos el procesador continuaba leyendo directamente en la memoria RAM
las instrucciones (dado que esa memoria era de la misma velocidad de la RAM),
ejecutando las rutinas POST para verificar el funcionamiento del sistema y
posteriormente cargando un sistema operativo (de 16 bits) en la RAM, que
compartiría funcionalidades de la BIOS.
IBM
PC ROM BIOS
El IBM ROM BIOS, IBM BIOS o ROM BIOS era el BIOS del
computador IBM PC. El BIOS residía en una memoria ROM de la tarjeta madre del
IBM PC y ocupaba 8 KiB. El BIOS realizaba un Power On Self Test (POST)), donde
se revisaban e inicializaban algunos componentes del computador, se
inicializaba y ponía operativo al BIOS y al final se ejecutaba el Boot Strap
Loader, el cual, cargaba en memoria RAM y ejecutaba el programa que residía en
el primer sector del diskette, o en caso de no poder hacerlo, cargaba al IBM
Cassette BASIC, la versión de BASIC que residía en la ROM de la tarjeta madre.
En el IBM PC Technical Reference Manual (Manual de
Referencia Técnica del IBM PC), había un listado completo del código fuente en
assembler del BIOS. Este listado del código fuente fue usado con ingeniería
inversa y técnicas de cuarto limpio para realizar clones legales del BIOS. Con
estos BIOS se hizo posible el surgimiento de la industria de los clones
compatibles con el IBM PC que llega hasta nuestros días.
Funciones
del BIOS
El BIOS tenía funciones básicas de entrada/salida para el
teclado, el pantalla, la impresora, el puerto de comunicaciones RS-232, el manejo
de las unidades de diskette y la interface para cassettes, entre otras.
Adicionalmente había rutinas que respondían a interrupciones de dispositivos
del hardware. Había también una función para llamar al BASIC en ROM.
![]() |
Detalle del IBM PC ROM BIOS y del IBM PC ROM BASIC de la tarjeta madreoriginal del IBM PC de 1981. |
Funciones
Las funciones del BIOS se accesaban invocando
interrupciones por software para el CPU del IBM PC, el Intel 8088. Esto hacía
que el CPU generara una interrupción y fuera llamada la función del BIOS a la
que apuntaba el vector de interrupción correspondiente. Los parámetros a la
función se pasan por medio los registros internos del CPU (AX, BX, CX, DX,
etc), y en caso de que una función tuviera que retornar algún valor, también lo
hacía mediante los registros del procesador.
La siguiente es una lista de las funciones del BIOS. (Los
números de las funciones están en hexadecimal, y representan el número de
interrupción que se necesita llamar por software desde un programa):
05 -
Imprime el contenido de la pantalla (Print Screen)
10 - I/O
para el video
11 - Determinación
del hardware opcional instalado
12 -
Determinación de la cantidad de memoria RAM
13 - I/O
para la unidad de diskette
14 - I/O
para el puerto serial RS-232
15 - I/O
para la unidad de cassette
16 - I/O
para el teclado
17 - I/O
para la impresora
18 -
Ejecuta al IBM PC ROM BASIC
19 -
Boot Strap Loader
1A -
Retorna o ajusta la hora
Área de datos del BIOS
El
IBM ROM BIOS tenía un área de datos en RAM que iba desde 0040:0000 hasta
0040:00FF. Donde se encontraban el estado y otros datos sobre dispositivos del
sistema y era usada por las funciones del BIOS para poder realizar sus tareas.
En esa área de datos se encontraba lo siguiente:
·
Datos de configuración del hardware. Contenía
las direcciones de hasta 4 puertos seriales y 4 puertos paralelos, información
del hardware y cantidad de memoria RAM instalados, y cierta información del
estado de inicialización
·
Datos del Teclado. Contenía el buffer del
teclado (16 caracteres), el estado de varias teclas como ambas teclas de CTRL y
ALT, las teclas INS, NumLook, CapsLook, etc, y un byte para almacenar el
caracter generado con un código de 3 dígitos usando ALT + teclado numérico
- · Datos del Diskette. Contenía el estado de la unidad de diskette y de su controlador
- · Datos del Video. Contenía información de estado de la tarjeta de video activa
- · Datos del Cassette. Contenía información de estado de la unidad de cassette
- · Datos del Timer. Contenía un contador de Ticks, (que ocurría 18,2 veces por segundo), desde que el computador se encendía. Servía para determinar cual era la hora del día.
- · Datos del Sistema. Contenía información que indicaba si se había hecho un CTRL+BREAK y si se estaba reseteando la máquina (con CTRL+ALT+DEL).
En
la dirección 0050:0000 había un área de datos extra.
Adicionalmente
había un área localizada entre 0030:0000 hasta 0030:00FF donde se encontraba un
stack para uso durante el POST y que estaba activo cuando se realizaba el Boot
Strap Loader y éste le pasaba el control al programa localizado en el primer
sector del diskette. Este programa podía seguir usándola o crear su propia área
de stack.
Interrupciones generadas por el hardware
El
BIOS también respondía a algunas interrupciones de hardware, generadas por
dispositivos como el teclado, el temporizador, y el controlador de la unidad de
diskette. Las señales de los dispositivos llegaban el controlador de
interrupciones Intel 8259.
- 08 - Time of day (18,2 veces por segundo), generado por el canal 0 del timer 8253. Usado para poder mantener la hora del día.
- 09 - Interrupción del teclado. Generado por el teclado al presionar o soltar cada tecla
- · 0A - No usado
- · 0B - No usado
- · 0C - No usado. Reservada para comunicaciones (RS-232)
- · 0D - No usado
- · 0E - Generado por el controlador de unidades de diskettes
- · 0F - No usado. Reservada para la impresora
- En computadores posteriores al IBM PC se fueron agregando más dispositivos de hardware que generaban interrupciones.
Interrupciones
generadas por el BIOS[editar]
El
BIOS generaba las siguientes interrupciones:
1B -
CTRL-BREAK. Generado cada vez que se ejecutaba la secuencia CTRL + BREAK en el
teclado
1C -
Timer Tick (18,2 veces por segundo). Generada cada vez que el BIOS recibía la
interrupción 08 (ver arriba)
Estas
interrupciones inicialmente son respondidas por el propio BIOS con una
instrucción IRET (Interrupt Return), (Retorno de Interrupción), y se retornaba
inmediatamente sin hacer nada. Un programa podía hacer que estas interrupciones
apuntaran a rutinas internas y así poder procesarlas para determinados
propósitos.
Tabla de gráficos para la generación de caracteres
El vector de interrupción 1F, apunta a una dirección
dentro del BIOS donde se encuentra una tabla usada para la generación de
caracteres en los modos gráficos.
Cerca del final del ROM del BIOS, había una tabla que se
usaba, por las funciones de video del BIOS, para la generación de caracteres en
los modos gráficos. Esta tabla contenía los patrones de bits de los primeros
128 caracteres del código ASCII extendido del IBM PC, y era usada para generar
el texto, dígitos, símbolos, y caracteres especiales, en los modos gráficos de
la tarjeta de video CGA (para las sus modos gráficos de 320x200 y 640x200).
Estos 128 caracteres correspondían a los del código ASCII estándar, pero mientras
que los caracteres del 0 al 31 del ASCII son caracteres de control no
imprimibles, en esta tabla, IBM había aprovechado esos códigos del 0 al 31 para
usarlos para generar caracteres y símbolos gráficos especiales, que a
diferencia del ASCII normal, sí generaban una imagen.
En la tabla del BIOS no estaban representados los
patrones de bits para los caracteres del 128 al 255 del ASCII extendido de IBM,
así que en los modos gráficos no podían desplegarse esos caracteres mediante el
BIOS. En los modos de texto sí se generaban porque ellos estaban definidos en
una ROM interna en cada una de las tarjetas de video, CGA y MDA, que contenía
los patrones de bits de todos los 256 caracteres del ASCII extendido.

No hay comentarios.:
Publicar un comentario