ENCENDIDO

ENCENDIDO

ROM-BIOS




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.




Funcionamiento
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