4.2 El BIOS: Chequeo y diagnóstico
§1 Inventario de recursos y comprobación del hardware
Una vez iniciado el programa contenido en la BIOS, su primera tarea consiste en un proceso de comprobación del hardware, denominado POST (Power-On Self Test). El desarrollo exacto depende del fabricante, pero la secuencia de comprobaciones puede resumirse como sigue:
- Chequeo de registros del procesador
- Setear el temporizador 8253/8254 ( H2) para refresco de RAM.
- Setear el acceso directo a memoria, DMA, para refresco de la RAM en el canal 0.
- Verificar que el refresco es operativo (los primeros PC's usaban RAM dinámica).
- Verificar la memoria RAM baja (0/16-64 KB).
- Cargar los vectores de interrupción y asignarles espacio en la zona de memoria baja ( 4.3).
- Inicializar los dispositivos de video y teclado.
- Determinar el tamaño de la RAM adicional y comprobar su funcionamiento (el recuento que se ve en pantalla). Si llegado a este punto existiera algún error en la memoria se mostraría un mensaje de error (el dispositivo de video ya está operativo).
- Inicializar los puertos COM (comunicaciones serie), LPT (comunicaciones paralelo) y de juegos
- Inicializar, en su caso, el sistema de disquete.
- Inicializar el sistema de disco.
- Explorar el área de usuario de la ROM.
- Llamar el interruptor de bootstrap.
En caso de existir errores graves, la secuencia se detiene emitiendo una serie de pitidos (eventualmente algún mensaje en pantalla) que codifican el tipo de error encontrado. Se adoptó el sistema de aviso mediante pitidos ("Beeps") cortos y largos, porque en estos tempranos momentos, inicio del sistema, no existe ningún dispositivo de salida utilizable. Por ejemplo, pantalla. La cantidad y calidad de los test de diagnóstico varía según el fabricante y versión del BIOS, sin que exista un estándar claro al respecto. A título de ejemplo, los "Beep-codes" del BIOS IBM son los siguientes (c=corto, l=largo):
1c Inicio del test [7]
2c Error de inicialización
1l - 1c Error de placa-base
1l - 2c Error del adaptador de video
1l - 3c Error del adaptador EGA/VGA
3l Error de la interfaz de teclado
999c Error de fuente de alimentación
La comprobación del dispositivo de video incluye cargar y ejecuta la parte de BIOS incluida en el adaptador de video. En esta fase, la mayoría de las adaptadoras modernas muestran en pantalla información sobre sí mismas. Es por esta razón por la que, a veces, lo primero que se ve en pantalla es información sobre la propia controladora de video antes que ningún mensaje de la BIOS del sistema.
Nota: Si se trata de un reinicio en caliente ("Hot boot"), que puede conseguirse con la combinación [Ctrl]+[Alt]+[Sup], la fase de comprobación POST se omite, y el proceso de carga sigue desde el siguiente punto.
§2 Carga de BIOSes específicas
Como veremos en el apartado correspondiente ( 4.4), una de las funciones de la BIOS consiste en proporcionar soporte para los dispositivos de E/S conectados, entre los que se encontraban la controladora de video, el teclado, el disquete, los puertos de comunicaciones serie y paralelo. Etc. Por supuesto, las BIOS primitivas incluían soporte para los dispositivos que podían conectarse en aquellos sistemas. Sin embargo, los diseñadores de IBM previeron que pudieran instalarse nuevos dispositivos que requiriesen rutinas específicas de E/S, por lo que dispusieron un mecanismo por el que, durante el reconocimiento inicial del sistema, la BIOS principal (instalada en la placa-base) pudiese identificar la existencia de otras BIOSes específicas en los dispositivos [8]. El sistema permite que, en caso de encontrarlas, puede cederles el control para que realicen sus propia tarea de diagnóstico, y a continuación carguen sus propios módulos de servicio junto con los de la BIOS principal.
Nota: Además de cargar sus propias extensiones, el proceso incluye añadir y/o modificar los punteros cargados en la tabla de vectores de interrupción ( H2.4) para que señalen a las nuevas rutinas.
En realidad, el sistema, conocido como extensiones de la BIOS, permite que existan dos clases de extensiones: unas, denominadas fijas, corresponderían a dispositivos especiales de E/S instalados en el sistema. Otras, denominadas removibles, permitirían la instalación de cartuchos de software específico (algo que estuvo muy de moda en la época pre-PC). Por ejemplo, se podía cargar un cartucho que contenía un intérprete de BASIC. Se previno incluso la posibilidad de que un cartucho sustituyera completamente la BIOS principal tomando control completo sobre el sistema.
Así como la BIOS principal dispone de su propia zona de memoria, el segmento F de 64 KB, situado en la parte superior de la memoria ( 4.1), las extensiones disponen también de una zona de memoria estándar donde cargarse; son los segmentos C, D y E (ver figura 1). Cualquier dispositivo que necesite de espacio para sus propios servicios se sitúa en algún punto de esta zona procurando no entrar en conflicto con algún otro. En concreto, los 128 KB de los segmentos D y E se reservaron para las extensiones removibles (cartuchos de software).
Entre los dispositivos que disponen de sus propias extensiones BIOS se encuentran los controladores de disco duro IDE/ATA, cuyas BIOS se encuentran en la zona C8000-CBFFFh; los adaptadores gráficos EGA y sucesores, que utilizan un bloque de 32 KB en la zona C0000-C7FFFh. Otros elementos que suelen contar con sus propias BIOSes son las tarjetas de red y las controladoras SCSI [1]. Estos módulos, y cualquier otro que sea encontrado, es cargado y ejecutado.
Para identificar si algún dispositivo conectado dispone de su propia BIOS, el POST realiza una exploración de la memoria utilizando dos convenciones:
-
Si existe alguna memoria en los segmentos C, D y F.
-
En caso afirmativo, si en las direcciones múltiplos de 2 KB. de dichos segmentos se encuentra la marca 55h y AAh (01010101 - 10101010) en los dos primeros octetos [3].
En caso afirmativo el POST cede el control al módulo encontrado, que se ejecuta, carga los vectores de interrupción correspondientes a sus propias rutinas y finalmente devuelve el control al BIOS principal que sigue su verificación.
Generalmente la primera información en pantalla de la BIOS del sistema (después de los mensajes de la BIOS de la controladora de video), es una pantalla inicial con los créditos del fabricante; número de versión y fecha. A continuación muestra un resumen de la configuración del sistema.
§3 Recapitulación
Como hemos visto, el BIOS realiza una especie de inventario del sistema y algunas pruebas para verificar que su funcionamiento es correcto. En los PCs originales la especificación del hardware disponible se efectuaba mediante interruptores ("Jumpers") situados en la placa-base. A partir de los ATs se dispone de una memoria permanente, accesible para el usuario (ROM del Sistema H2), donde está inventariado el hardware básico y su tipo [6]. La tendencia actual es el estándar PnP ( 4); si la BIOS lo soporta, es capaz por sí misma de detectar y configurar los dispositivos conectados, asignándoles los recursos necesarios y mostrando un mensaje en pantalla por cada uno instalado.
Las BIOS modernas, basándose en el tipo de memoria detectada, pueden establecer automáticamente su velocidad. Algunas pueden detectar automáticamente los parámetros del tipo de disco duro y su forma de acceso. También permitir la carga del sistema desde dispositivos distintos que los tradicionales disquete (unidad A:) o disco duro (unidad C:). Por ejemplo, desde CD, dispositivo USB o incluso de la red local.
Una vez finalizado el inventario de recursos, comprobación del hardware, y mostrado el resumen de la configuración, se continúa con la carga del Sistema Operativo. Aspecto éste que se detalla en el capítulo siguiente ( 4.3).
§4 Códigos POST
Además de los pitidos señalados en el párrafo anterior, en cada paso de verificación, el POST genera una serie de mensajes, denominados POST-codes, en forma de números colocados generalmente en un puerto E/S determinado ( 2.1). Suele ser el 80h, pero no hay acuerdo al respecto y depende del fabricante [4]. Para verlos es necesario disponer de un instrumento adecuado ("POST reader") en forma de una placa que se pincha en un zócalo libre del bus. Tienen un par de LEDs de 7 segmentos, que indican el código hexadecimal del test que se inicia. Además disponen de LEDs auxiliares que señalan si es correcto el estado de tensión en las líneas del bus de alimentación ( 2). En la figura adjunta se muestra uno de estos dispositivos [5]. Para interpretar los códigos es necesario disponer de la referencia del fabricante para el modelo de BIOS que estemos comprobando. El proceso de diagnóstico del POST se detiene en el momento de error, por lo que en el display aparece el número del test erróneo.
§5 Códigos de Diagnóstico
Pasadas las etapas iniciales, en las que quizás no existe ningún dispositivo disponible para mostrar mensajes de error, cuando se ha cargado y ejecutado la BIOS incluida en el adaptador de video, el POST está en condiciones de mostrar los posibles errores de diagnóstico mediante mensajes en la pantalla. Estos mensajes son numéricos decimales conocidos como códigos de diagnóstico, que se componen de dos partes; el código de test ("Test code") y el código de error ("Fault code"). El primero es un número indicativo del test en ejecución; el segundo es un número de dos dígitos que indica el tipo de error detectado por el test en cuestión. El código 00 indica ausencia de error (el test correspondiente pasó Ok). Por ejemplo, un código de diagnóstico 342 en un equipo IBM, indica error en el cable (código de error 42) durante la comprobación del teclado (código de test 03).
Cualquier código de error distinto de cero tiene que ser interpretado en función de la tabla de códigos de diagnóstico del fabricante de la placa o de la BIOS. En estos casos, el proceso de inicio del sistema puede detenerse o continuar, dependiendo del tipo de error y de su localización.
A título de ejemplo se incluyen los códigos de test de IBM junto con el número de códigos de error posibles en cada uno de ellos. Observe que muchos de ellos se refieren a dispositivos periféricos u opcionales, que con frecuencia disponen de sus propias BIOSes.
01xx Placa-base ("System board"). 57. 02xx Memoria ("System memory"). 19. 03xx Teclado. 12. 04xx Adaptador de pantalla monocromo. 5 05xx Adaptador gráfico color. 10 06xx Unida de disquete y adaptador. 47 07xx Coprocesador matemático. 13. 09xx Adaptador de puerto paralelo primario. 13. 10xx Adaptador de puerto paralelo secundario. 13. 11xx Dispositivo de comunicaciones (COM1). 54. 12xx Dispositivo de comunicaciones (COM2). 54. 13xx Puerto de juegos. 2. 14xx Impresora matricial. 7. 15xx Adaptador SDLD 36. 16xx Adaptador DSEA. 43. 17xx Adaptador de disco duro. 43. 18xx Unidad de expansión de E/S. 13. 20xx Adaptador de comunicaciones BSC. 43. 21xx Adaptador BSC secundario. 43. 22xx Adaptador cluster. 1. 23xx Adaptador de monitor de plasma. 1. 24xx Adaptador gráfico EGA. 12 25xx Adaptador gráfico EGA secundario 12 26xx Adaptador PC/370-M. 95 27xx Adaptador emulador PC3277. 3 28xx Adaptador emulador 3278/3279. 1 29xx Impresora gráfica color. 1 30xx Adaptador de red primario. 16 31xx Adaptador de red secundario. 16 32xx Pantalla 3270 PC/AT [2]. 1 33xx Impresora (Compact printer). 1 35xx Unidades Enhanced DESA. 6 36xx GPIB IEEE 488. 58 37xx Controlador SCSI. 1 38xx Adaptador para adquisición de datos. 36 39xx Adaptador gráfico PGA. 92 44xx Pantalla 5279 y adaptador. 1 45xx Adaptador GPIB IEEE 488. 1 |
46xx Adaptador multiport ARTIC. 7 48xx Modem interno primario. 1 49xx Modem interno secundario. 1 50xx PC convertible LCD. 12 51xx PC convertible impresora portatil. 5 56xx Sistema de comunicaciones financieras. 1 70xx Códigos de error de la BIOS Phoenix. 3 71xx VCA (Voice Communication Adapter). 11 73xx Unidad de disquete. 16 74xx Adaptador de pantalla 8514/A. 2 76xx Adaptador de impresora de páginas. 4 84xx Speech adapter. 1 85xx Adaptador de memoria XMA. 1 86xx Ratón PS/2. 7 89xx Interfaz MIDI. 1 91xx Disco óptico WORM. 1 96xx Adaptador SCSI (caché W/32). 1 100xx Adaptador multiprotocolo. 53 101xx Modem interno 300/1200 bps. 27 104xx Adaptador para dispositivos ESDI o MAC IDE. 35 107xx Adaptador de unidad de disco externo. 1 112xx Adaptador SCSI (cache WO 16 bit). 1 113xx Adaptador SCSI. 1 129xx Procesador (UCP). 17 149xx Adaptador de pantalla de plasma P70, P75. 4 152xx Adaptador de pantalla XGA. 1. 164xx Cinta magnética interna 120 MB. 1 165xx Unidad de cinta 6157. 2. 166xx Adaptador de red Token-Ring primario. 1 167xx Adaptador de red Token-Ring secundario. 1 180xx Adaptador Wizard PS/2. 15. 185xx Adaptador para pantalla japonesa DBCS. 1 194xx Módulo de expansión de memoria. 1 200xx Adaptador de imagen. 1 208xx Dispositivos SCSI desconocidos. 1 209xx Disco removible SCSI. 1 210xx Disco SCSI fijo. 1 |
[1] SCSI ("Small Computer System Interface"). Un tipo de controladora que se inserta en una ranura de la placa base de la que sale un bus (cable plano), en el que se pueden conectar hasta 8 dispositivos (siempre que la longitud no supere 3 m). La controladora envía órdenes a los dispositivos conectados al bus y recibe los datos. Por su parte, los dispositivos SCSI que pueden conectarse en el bus, discos u otros, periféricos (escaners, Etc.), integran en ellos mismos la electrónica necesaria que los independiza de la controladora y la abstrae de las características del dispositivo.
Existen variantes: SCSI, SCSI-1, SCSI-2, SCSI-3, Fast-SCSI, Wide-SCSI, Ultra-2 SCSI, Fiber Channel SCSI ... Este interfaz es el que se considera mas profesional y de mayor rendimiento, por lo que se utiliza en equipos de altas prestaciones, puede alcanzar velocidades de 100 MB/s. Actualmente (2005) empieza a perder protagonismo en favor de la interfaz Serial ATA (más detalles en 6.3).
[2] El 3270 fue un modelo de PC AT de IBM bastante exótico.
[3] A continuación de la "marca de incio" constituida por los caracteres 55h y AAh, existe un tercer byte que indica la longitud ocupada por la ROM del dispositivo utilizando unidades de 512 bytes. Por ejemplo, 10h (16) representa 16 x 512 = 8192 bytes; una ROM de 8 KB. A continuación existen otros tres bytes que sirven de inicio de la nueva BIOS. Juegan el mismo papel que la dirección FFFF0h de inicio de la BIOS principal, contienen una instrucción de salto (JMP) al punto de inicio de la secuencia de carga.
[4] Algunas BIOSes muy antiguas no emiten POST-codes, pero algunas placas-base y BIOSes permiten incluso setear unos puentes o parámetros de configuración para definir este puerto.
[5] El "DIP-switch" de 4 bits en la esquina superior izquierda sirve para ajustar el tipo de placa. AT; XT; ISA; EISA; PS2-ISA; Compaq; PCI; Etc.
[6] La propia BIOS dispone de un programa para mantener este "Inventario" denominado "Setup". Generalmente puede accederse a él pulsando las teclas [Del] o [Esc] en los momentos iniciales de arranque.
[7] Durante mucho tiempo fue muy común que la primera sensación de que el ordenador estaba "vivo", era un pitido corto.
[8] Si algún dispositivo dispone de su propia BIOS, esta aparece como una memoria ROM instalada en su interior. Generalmente montada en la tarjeta que se pincha en alguno de los zócalos libres de la placa-base.