Tabla de variables de la BIOS

 

Las variables de la BIOS comienzan en el segmento de memoria 40h, justo después de la tabla de vectores de interrupción. Son empleadas por los programas de control ubicados en las memorias ROM del ordenador. En general, siempre es preferible utilizar una función de la BIOS que modificar directamente sus variables, aunque a veces ello no es posible o puede no resultar conveniente. Los campos colocados entre llaves ('{' y '}') no están documentados por IBM y podrían cambiar en el futuro. Los códigos entre corchetes indican a qué máquinas o configuraciones, en exclusiva, se aplica la información.

Offset  Tamaño  Descripción 
 00h    WORD    Dirección E/S base del primer puerto serie (0 si no instalado)
 02h    WORD    Dirección E/S base del segundo puerto serie (0 si no instalado)
 04h    WORD    Dirección E/S base del tercer puerto serie (0 si no instalado)
 06h    WORD    Dirección E/S base del cuarto puerto serie (0 si no instalado)
                   Nota: Los campos de arriba son rellenados en estricto orden por 
                         el programa POST de la BIOS que inicializa el sistema, sin 
                         dejar huecos. Los puertos serie del DOS y de la BIOS pueden
                         redefinirse modificando estos campos.
 08h    WORD    Dirección E/S base del primer puerto paralelo (0 si no instalado)
 0Ah    WORD    Dirección E/S base del segundo puerto paralelo (0 si no instalado)
 0Ch    WORD    Dirección E/S base del tercer puerto paralelo (0 si no instalado)
 0Eh    WORD    [Máquinas no PS]:
                      Dirección E/S base del cuarto puerto paralelo (0 si no instalado)
                   [Máquinas PS]:
                      Segmento del área de datos extendida de la BIOS
                   Nota: Los campos de arriba son rellenados en estricto orden por 
                         el programa POST de la BIOS que inicializa el sistema, sin 
                         dejar huecos. Los puertos paralelo del DOS y de la BIOS
                         pueden redefinirse modificando estos campos.
 10h    WORD    Hardware instalado:
                       bits 15-14: número de puertos paralelos
                       bit     13: [PC Convertible] = 1 si hay modem interno
                       bit     12: reservado
                       bits 11- 9: número de puertos serie
                       bit      8: reservado
                       bits  7- 6: número de disqueteras - 1
                       bits  5- 4: modo de vídeo inicial
                                       00b = EGA,VGA,PGA
                                       01b = 40 x 25 color
                                       10b = 80 x 25 color
                                       11b = 80 x 25 mono
                       bit      3: reservado
                       bit      2: [máquinas PS] = 1 si hay dispositivo apuntador
                                   [máquinas no PS] reservado
                       bit      1: = 1 si hay coprocesador
                       bit      0: = 1 si hay disquete disponible para arrancar
 12h    BYTE    [PC Convertible] estado del POST
                   [AT] {Banderines de inicialización de los test de fabricación}
 13h    WORD    Tamaño de memoria convencional en kbytes (0-640)
 15h    BYTE    [AT] {Usado en los test de fabricación}
 16h    BYTE    [AT] {Usado en los test de fabricación}
                   [PS/2 Mod 30] Banderines de control de la BIOS
 17h    BYTE    Banderines de estado del teclado 1:
                       bit 7 =1 INSert activo
                       bit 6 =1 Caps Lock activo
                       bit 5 =1 Num Lock activo
                       bit 4 =1 Scroll Lock activo
                       bit 3 =1 cualquier Alt pulsado
                       bit 2 =1 cualquier Ctrl pulsado
                       bit 1 =1 Shift izquierdo pulsado
                       bit 0 =1 Shift derecho pulsado
 18h    BYTE    Banderines de estado del teclado 2:
                       bit 7 = 1 INSert pulsado
                       bit 6 = 1 Caps Lock pulsado
                       bit 5 = 1 Num Lock pulsado
                       bit 4 = 1 Scroll Lock pulsado
                       bit 3 = 1 Estado de pausa activo
                       bit 2 = 1 Sys Req pulsada
                       bit 1 = 1 Alt izquierdo pulsado
                       bit 0 = 1 Ctrl izquierdo pulsado
 19h    BYTE    Teclado: Area de trabajo para Alt-nnn (nnn=teclado numérico)
 1Ah    WORD    Teclado: puntero al próximo carácter en el buffer
 1Ch    WORD    Teclado: puntero a la primera entrada vacía en el buffer
 1Eh 16 WORDs   Buffer del teclado (cola circular, ver offsets 80h y 82h para moverlo)
 3Eh    BYTE    Estado de recalibración del disquete:
                       bit 7 = 1 Se ha producido interrupción hardware del disquete
                       bits 6-4 reservados
                       bit 3 = 1 Recalibrada disquetera 3
                       bit 2 = 1 Recalibrada disquetera 2
                       bit 1 = 1 Recalibrada disquetera 1
                       bit 0 = 1 Recalibrada disquetera 0
 3Fh    BYTE    Estado del motor del disquete:
                       bit 7 = 1 la operación en curso es escritura o formateo
                             = 0 la operación en curso es lectura o verificación
                       bit 6    reservado
                       bits 5-4 número de disquetera seleccionada (0-3)
                       bit 3 = 1 motor de la disquetera 3 en marcha
                       bit 2 = 1 motor de la disquetera 2 en marcha
                       bit 1 = 1 motor de la disquetera 1 en marcha
                       bit 0 = 1 motor de la disquetera 0 en marcha
 40h    BYTE    Contador de tics de reloj que faltan para parar motor de la disquetera
 41h    BYTE    Estado de la última operación de disco (0 = correcta)
                       bit 7 = 1 unidad no preparada
                       bit 6 = 1 error de posicionamiento del cabezal
                       bit 5 = 1 fallo general del controlador
                       bits 4-0:
                               00h no hay error
                               01h solicitud incorrecta
                               02h no encontrada la marca de direcciones
                               03h error de protección contra escritura
                               04h sector no encontrado
                               06h línea de disco cambiado activa
                               08h el DMA se ha desbordado
                               09h el DMA ha cruzado una frontera de 64k
                               0Ch medio físico desconocido
                               10h fallo de CRC al leer
 42h  7 BYTEs   Bytes de estado/comandos de la Disquetera/Disco fijo
 49h    BYTE    Modo de vídeo activo
 4Ah    WORD    Número de columnas en pantalla
 4Ch    WORD    Tamaño del buffer de vídeo de la página activa en bytes
 4Eh    WORD    Desplazamiento sobre la memoria de pantalla de la página activa
 50h 16 BYTEs   Posición del cursor (columna, fila) para las 8 páginas
 60h    WORD    Tipo de cursor, compatible 6845, byte alto=línea inicial, bajo=final
 62h    BYTE    Página activa
 63h    WORD    Dirección E/S base del controlador de vídeo: color=03D4h, mono=03B4h
 65h    BYTE    Valor actual del registro de selección de modo 03D8h/03B8h
 66h    BYTE    Valor actual almacenado en el registro de paleta de la CGA 03D9h
 67h    DWORD   Punto de retorno al modo real tras ciertos resets del POST
 6Bh    BYTE    Ultima interrupción no esperada por el POST
 6Ch    DWORD   Tics de reloj (1/18,2 segundos) ocurridos desde medianoche
 70h    BYTE    Flag de medianoche, <> 0 si el contador pasa de las 23:59:59.99
 71h    BYTE    Banderín de Ctrl-Break: bit 7=1
 72h    WORD    Banderín de reset del POST:
                       = 1234h si no realizar chequeo de memoria (arranque caliente)
                       = 4321h [solo PS/2 MCA] si preservar la memoria al arrancar
                       = 5678h [PC Convertible] sistema detenido
                       = 9ABCh [PC Convertible] test de fabricación
                       = ABCDh [PC Convertible] bucle del POST
                       =   64h modo «Burn-in»
 74h    BYTE    Estado de la última operación del disco fijo: {salvo unidades ESDI}
                       00h no hubo error
                       01h función solicitada incorrecta
                       02h no encontrada marca de direcciones
                       03h error de protección contra escritura
                       04h sector no encontrado
                       05h fallo en el reset
                       07h fallo en la actividad de los parámetros del disco
                       08h el DMA se ha desbordado
                       09h alineamiento de datos incorrecto para el DMA
                       0Ah detectado banderín de sector erróneo
                       0Bh detectada pista errónea
                       0Dh número incorrecto de sectores para el formateo
                       0Eh detectada marca de direcciones de control
                       0Fh nivel de arbitrio del DMA fuera de rango
                       10h error ECC o CRC incorregible
                       11h error de datos ECC corregido
                       20h fallo general del controlador
                       40h fallo en el posicionamiento del cabezal
                       80h fuera de tiempo, no responde
                       AAh disco no preparado
                       BBh error indefinido
                       CCh fallo de escritura en el disco seleccionado
                       E0h el registro de errores es cero
                       FFh fallo de sentido
 75h    BYTE    Disco fijo: número de discos fijos
 76h    BYTE    Disco fijo: byte de control  {IBM lo documenta sólo en el XT}
 77h    BYTE    Disco fijo: offset del puerto E/S {IBM lo documenta sólo en el XT}
 78h  3 BYTEs   Contadores de «time-out» para los puertos paralelos 1-3
 7Bh    BYTE    Contador «time-out» para puerto paralelo 4 [máquinas no PS]
                      bit 5 = 1 si especificación de DMA virtual soportada [PS] (ver INT 4B)
 7Ch  4 BYTEs   Contadores de «time-out» para los puertos serie 1-4
 80h    WORD    Offset de inicio del buffer del teclado respecto al segmento 40h
                      (normalmente 1Eh)
 82h    WORD    Offset del fin del buffer del teclado+1 respecto al segmento 40h
                      (normalmente 3Eh)

                [La BIOS del XT con fecha 8/11/82 acaba aquí]

 84h    BYTE    Vídeo: líneas en pantalla menos 1 en EGA/MCGA/VGA
 85h    WORD    Video: altura del carácter, en pixels, en EGA/MCGA/VGA
 87h    BYTE    Vídeo: control de EGA/VGA.
                       bit 7:  = 1 si no limpiar RAM (ver INT 10h, AH=0)
 88h    BYTE    Vídeo: switches EGA/VGA [MCGA: reservado]
 89h    BYTE    Vídeo: MCGA/VGA opción de control del modo
 8Ah    BYTE    Vídeo [MCGA/VGA]: índice en tabla Códigos de Combinaciones de Pantalla
 8Bh    BYTE    Control del medio físico del disco [no XT]:
                       bits 7-6: Ultima tasa de transferencia fijada por el controlador:
                                 00=500kbps, 01=300kbps, 10=250kbps, 11=1Mbps
                       bits 5-4: Ultimo «step rate» seleccionado en el disquete:
                                 00-0Ch, 01=0Dh, 10=0Eh, 11=0Ah
                       bits 3-2: {Tasa de transferencia al inicio de la operación}
                       bits 1-0: reservado
 8Ch    BYTE    Estado del controlador del disco fijo [no XT]
 8Dh    BYTE    Estado de error del controlador de disco fijo [no XT]
 8Eh    BYTE    Control de interrupciones del disco fijo [no XT]
 8Fh    BYTE    Información del controlador de disquete [no XT]:
                       bit 7:  reservado
                       bit 6:  = 1 si disco 1 determinado
                       bit 5:  = 1 si disco 1 es multi-ratio, válido si disco determinado
                       bit 4:  = 1 si disco 1 soporta 80 pistas, siempre válido
                       bit 3:  reservado
                       bit 2:  = 1 si disco 0 determinado 
                       bit 1:  = 1 si disco 0 es multi-ratio, válido si disco determinado
                       bit 0:  = 1 si disco 0 soporta 80 pistas, siempre válido
 90h    BYTE    Estado físico de la disquetera 0
 91h    BYTE    Estado físico de la disquetera 1
                       bits 7-6:     tasa de transferencia a disquete: 00=500kbps, 01=300kbps,
                                     10=250kbps, 11=1Mbps
                       bit    5: = 1 si doble salto de pista requerido (e.g. 360Kb en 1.2Mb)
                       bit    4: = 1 si superficie ya determinada
                       bit    3: reservado
                       bits 2-0: a la salida de la BIOS, contiene:
                               000 intentando 360Kb en 360Kb
                               001 intentado 360Kb en 1.2Mb
                               010 intentando 1.2MB en 1.2Mb
                               011 determinado 360Kb en 360Kb
                               100 determinado 360Kb en 1.2Mb
                               101 determinado 1.2Mb en 1.2Mb (continúa en pág siguiente)
                               110 reservado
                               111 todos los demás formatos
 92h    BYTE    Estado físico de la disquetera 0 al inicio de la operación
 93h    BYTE    Estado físico de la disquetera 1 al inicio de la operación
 94h    BYTE    Número de pista en curso de la disquetera 0
 95h    BYTE    Número de pista en curso de la disquetera 1
 96h    BYTE    Estado del teclado, byte 1
                       bit 7 = 1 proceso de lectura de ID en marcha
                       bit 6 = 1 el último código leído fue el primero de dos códigos ID
                       bit 5 = 1 forzar Num Lock si se lee el ID y es un teclado expandido
                       bit 4 = 1 teclado expandido instalado
                       bit 3 = 1 Alt derecho pulsado
                       bit 2 = 1 Ctrl derecho pulsado
                       bit 1 = 1 último código leído fue E0h
                       bit 0 = 1 último código leído fue E1h
 97h    BYTE    Estado del teclado, byte 2
                       bit 7 = 1 error de transmisión del teclado
                       bit 6 = 1 actualización de LEDs en curso
                       bit 5 = 1 código RESEND recibido del teclado
                       bit 4 = 1 código ACK recibido del teclado
                       bit 3 reservado, debe ser cero
                       bit 2 LED de Caps Lock
                       bit 1 LED de Num Lock
                       bit 0 LED de Scroll Lock
 98h    DWORD   Timer2: [AT, PS excepto Mod 30] puntero al banderín de espera de
                       usuario completada (ver INT 15, AX=8300h)
 9Ch    DWORD   Timer2: [AT, PS exc Mod 30] contador de espera del usuario (microseg.)
 A0h    BYTE    Timer2: [AT, PS exc Mod 30] banderín de espera activa:
                       bit 7 = 1 tiempo de espera transcurrido
                       bits 6-1 reservados
                       bit 0 = 1 INT 15h, AH=86h ha sucedido
 A1h  7 BYTEs   Reservado para adaptadores de red local (¿será verdad?)
 A4h    DWORD   [PS/2 Mod 30] Vector de la interrupción del disco duro preservada
 A8h    DWORD   Video: En EGA/MCGA/VGA, puntero al «Video Save Pointer Table»
 ACh-AFh        Reservados
 B0h    BYTE    (Phoenix 386 BIOS 1.10 10a) contador para retardo LOOP cuando se pita
                      ante un buffer de teclado lleno
 B0h    DWORD   Puntero al controlador de disco óptico 3363.
 B4h    WORD    Reservado
 B6h  3 BYTEs   ¿Reservado para el POST?
 B9h  7 BYTEs   ???
 C0h 14 BYTEs   Reservado
 CEh    WORD    ¿¿¿Cuenta de días desde el último arranque???
 D0h-EFh        Reservado
 D0h-DCh        Usado por Digiboard MV/4
 F0h-FFh        Reservado para el usuario
100h    BYTE    Byte de estado de Print Screen
10Eh    BYTE    Estado de BREAK al inicio de la ejecución de BASICA.COM
10Fh    BYTE    Banderín: 02h si BASICA v2.10 está ejecutándose
116h    DWORD   INT 1Bh al inicio de la ejecución de BASICA.COM
11Ah    DWORD   INT 24h al inicio de la ejecución de BASICA.COM

Volver al principio de página

 

Cómo "direcciona" la memoria el 8086

El 8086 es un microprocesador de 16 bits y, por tanto, no puede trabajar directamente con números mayores de 16 bits. Teóricamente, esto significaría que el 8086 podría acceder sólo a un máximo de 64 KB de memoria. Sin embargo, el esquema de direccionamiento de 20 bits que utiliza, expande el intervalo de direccionamiento de las posiciones de memoria con las que puede trabajar desde 216 (65 536) a 220 (1 048 576). Pero el 8086 sigue estando limitado a su capacidad de procesamiento de 16 bits. Para acceder a las direcciones de 20 bits debe utilizar un método de direccionameinto que encaje en el formato de 16 bits.

Direccionamiento segmentado

El 8086 divide el espacio de memoria direccionable en segmentos, cada uno de los cuales contiene 64 KB de memoria. Cada segmento comienza en una dirección de párrafo -esto es, la posición deun byte que es divisible por 16-. Para acceder a bytes o palabras individuales se utiliza un desplazamiento (offset) que apunta al byte exacto de un segmento determinado. Como el desplazamiento se mide siempre en relación al comienzo del segmento, se le llama dirección relativa o desplazamiento relativo.

Juntos, un segmento y un desplazamiento forman una dirección segmentada que puede designar un byte en el espacio de memoria de 1 MB del 8086. Éste convierte una dirección segmentada de 32 bits utilizando el valor del segmento como un valor de párrafo y añadiéndole el valor del desplazamiento. En efecto, el 8086 mueve el valor del segmento 4 bits a la izquierda y le suma el valor del desplazamiento para crear una dirección de 20 bits.

La siguiente figura muestra cómo se lleva a cabo esto para un valor de segmento de 1234h y para un valor de desplazamiento de 4321h. La dirección segmentada se escribe 1234:4321, con valores hexadecimales de 4 dígitos y con dos puntos separando al segmento del desplazamiento.

En este ejemplo, la decodificación de la dirección segmentada se realiza desplazando el valor del segmento (1234h) a la izquierda 4 bits (un dígito hexadecimal) y añadiéndolo al desplazamiento 4321h para obtener la dirección física de 20 bits 16661h.

En el 8086 hay, obviamente, un gran número de posibilidades de solapamiento en el intervalo que puede ser expresado mediante direcciones segmentadas. Cualquier dirección física puede ser representada por hasta 1012 direcciones segmentadas. Por ejemplo, la dirección física 16661h puede representarse no sólo como 1234:4321, sino también como 1666:0001, 1665:0011, 1664:0021, y así sucesivamente.

Volver al principio de página

volver a Inicio