BIOS

(ang. Basic Input-Output System - Podstawowy System Wejścia-Wyjścia)


Wstęp :: BIOS Data Area :: CMOS :: POST :: Proces bootowania :: Przerwania
Literatura :: Linki :: Autorzy

BDA - Bios Data Area

BIOS, jak każdy inny program, wymaga własnej pamięci roboczej.
Potrzebuje jej np. po to, aby zapamiętać informacje o konfiguracji i wykrytych urządzeniach podczas automatycznego testu przy uruchomieniu komputera (POST).
Pamięć ta (BDA) zaczyna sie po adresem 0x00400000 i zajmuje 256 bajtów.
Oto jej szczegółowy opis:

Adres Opis pola Typ pola
0x00400000 Tu znajduje się adres portu COM1 unsigned int
0x00400002 Tu znajduje się adres portu COM2 unsigned int
0x00400004 Tu znajduje się adres portu COM3 unsigned int
0x00400006 Tu znajduje się adres portu COM4 unsigned int
0x00400008 Tu znajduje się adres portu LPT1 unsigned int
0x0040000a Tu znajduje się adres portu LPT2 unsigned int
0x0040000c Tu znajduje się adres portu LPT3 unsigned int
0x0040000e Tu znajduje się adres portu LPT4 lub numer segmentu rozszerzonego BDA (tzw.: EBDA) unsigned int
0x00400010 Wykaz zainstalowanego sprzętu
bity 15-14: liczba zainstalowanych drukarek
bity 13-12: zarezerwowane
bity 11-9: liczba szeregowych portów
bit 8: game port
0 = niezainstalowany
1 = zainstalowany
bity 7-6: liczba stacji dyskietek
bity 5-4: początkowy tryb pracy karty graficznej
00 = EGA lub PGA
01 = 40 25 kolorowa
10 = 80 25 kolorowa
11 = 80 25 monochromatyczna
bit 3: zarezerwowany
bit 2: zintegrowana mysz typu PS/2
0 = niezainstalowana
1 = zainstalowana
bit 1: koprocesor matematyczny
0 = niezainstalowany
1 = zainstalowany
bit 0: stacje dyskietek
0 = niezainstalowane
1 = zainstalowane
unsigned int
0x00400012 Zarezerwowane do testów unsigned int
0x00400013 Wielkość pamięci podstawowej (w KB) minus wielkość EBDA unsigned int
0x00400017 Stan klawiatury
bit 7 1 = włączony Insert (wstawianie)
bit 6 1 = włączony Caps Lock
bit 5 1 = wlączony Num Lock
bit 4 1 = włączony Scroll Lock
bit 3 1 = wciśnięty Alt
bit 2 1 = wciśnięty Ctrl
bit 1 1 = wciśnięty lewy Shift
bit 0 1 = wciśnięty prawy Shift
unsigned int
0x00400018 Stan klawiatury - również
bit 7 1 = wciśnięty klawisz Ins
bit 6 1 = wciśnięty Caps Lock
bit 5 1 = wciśnięty Num Lock
bit 4 1 = wciśniety Scroll Lock
bit 3 1 = włączony Pause
bit 2 1 = wciśnięty SysRq
bit 1 1 = wciśnięty lewy Alt
bit 0 1 = wciśnięty prawy Alt
unsigned int
0x00400019 Obszar roboczy przerwania 9 (przerwania klawiatury) unsigned char
0x0040001a Wskaźnik do następnego znaku w buforze klawiatury unsigned char
0x0040001c Wskaźnik do następnego wolnego pola w buforze klawiatury unsigned char
0x0040001e Bufor klawiatury -16 pozycji 2-bitowych char[32]
0x0040003e Stan rekalibracji napędu
bit 7: znacznik przerwania
bit 6-4: zarezerwowane
bit 3: 1 = rekalibracja 3
bit 2: 1 = rekalibracja 2
bit 1: 1 = rekalibracja 1
bit 0: 1 = rekalibracja 0
unsigned char
0x0040003f Stan silnika napędu dyskietek
bit 7: 1 = operacja odczytu/zapisu
bit 6: zarezerwowany
bity 5-4: kod wyboru napędu dyskietki
00 = wybrany został napęd 0
01 = wybrany został napęd 1
10 = wybrany został napęd 2
11 = wybrany został napęd 3
bit 3: 1 = włączony został silnik napędu 3
bit 2: 1 = włączony został silnik napędu 2
bit 1: 1 = włączony został silnik napędu 1
bit 0: 1 = włączony został silnik napędu 0
unsigned char
0x00400040 Licznik czasu od włączenia silnika napędu unsigned char
0x00400041 Stan wykonania ostatniej operacji z dyskietką unsigned char
0x00400042 Bity stanu sterownika napędu dyskietek unsigned char
0x00400049 Bieżący tryb pracy karty graficznej unsigned char
0x0040004a Liczba kolumn na ekranie unsigned int
0x0040004c Długość bufora video (w bajtach) unsigned int
0x0040004e Aktualny adres strony karty graficznej unsinged int
0x00400050 Położenie kursora na stronie 1 unsigned int
0x00400052 Położenie kursora na stronie 2 unsigned int
0x00400054 Położenie kursora na stronie 3 unsigned int
0x00400056 Położenie kursora na stronie 4 unsigned int
0x00400058 Położenie kursora na stronie 5 unsigned int
0x0040005a Położenie kursora na stronie 6 unsigned int
0x0040005c Położenie kursora na stronie 7 unsigned int
0x0040005e Położenie kursora na stronie 8 unsigned int
0x00400060 Linia początkowa i końcowa znaku kursora unsigned int
0x00400062 Bieżąca strona unsigned char
0x00400063 Adres bazowy sterownika karty graficznej unsigned int
0x00400065 Rejestr bieżącego trybu karty graficznej unsigned char
0x00400066 Rejestr bieżącej palety unsigned char
0x00400067 Przesunięcie (offset) adresu dodatkowej pamięci ROM unsigned int
0x00400069 Numer segmentu dodatkowej pamięci ROM unsigned int
0x0040006b Zarezerwowane dla POST unsigned char
0x0040006c Licznik systemowy unsigned long
0x00400070 Znacznik przekroczenia północy unsigned char
0x00400071 Stan klawisza Break unsigned char
0x00400072 Znacznik testu pamięci
0x1234 = pominąć kontrolę pamięci podczas kolejnego uruchomienia
0x0000 = przeprowadzić kontrolę pamięci podczas kolejnego uruchomienia
unsigned int
0x00400074 Stan wykonania ostatniej operacji na dysku twardym unsigned int
0x00400075 Liczba zainstalowanych twardych dysków unsigned char
0x00400076 Obszar danych roboczych przerwania 13h unsigned int
0x00400078 Maksymalny czas oczekiwania na reakcję LPT1 unsinged char
0x00400079 Maksymalny czas oczekiwania na reakcję LPT2 unsigned char
0x0040007a Maksymalny czas oczekiwania na reakcję LPT3 unsinged char
0x0040007b Maksymalny czas oczekiwania na reakcję LPT4 unsinged char
0x0040007c Maksymalny czas oczekiwania na reakcję COM1 unsinged char
0x0040007d Maksymalny czas oczekiwania na reakcję COM2 unsinged char
0x0040007e Maksymalny czas oczekiwania na reakcję COM3 unsinged char
0x0040007f Maksymalny czas oczekiwania na reakcję COM4 unsinged char
0x00400080 Przesuniecie (offset) początkowego bufora klawiatury unsigned int
0x00400082 Przesuniecie (offset) końcowego bufora klawiatury unsigned int
0x00400084 Liczba wierszy na ekranie minus 1 unsigned int
0x00400085 Wysokość znaku unsigned int
0x00400087 Stan karty graficznej unsigned char
0x00400088 Stan karty graficznej unsigned char
0x0040008b Parametry dyskietki unsigned char
0x0040008c Rejestr stanu sterownika HDD unsigned char
0x0040008d Rejestr błędu sterownika HDD unsigned char
0x0040008e Znacznik przerwania HDD unsigned char
0x0040008f Stan sterownika FDD unsigned char
0x00400090 Stan napędu A unsigned char
0x00400091 Dyskietka w stacji B unsigned char
0x00400092 Obszar roboczy przerwania 13h unsigned int
0x00400094 Aktualna ścieżka napędu 0 unsigned char
0x00400095 Aktualna ścieżka napędu 1 unsigned char
0x00400096 Bajt stanu klawiatury unsigned char
0x00400097 Bajt stanu diod LED klawiatury unsigned char
0x00400098 Adres znacznika zakończenia oczekiwania char *
0x0040009c Licznik czau oczekiwania (ms) unsigned long
0x004000a0 Znacznik aktywności oczekiwania unsigned char

Analizując powyższą tabelę można wyciagnąć dwa wnioski:

Informacje zawarte w BDA sa później wykorzystywane przez system operacyjny do zebrania informacji o sprzęcie zainstalowanym na komputerze.
Nie jest to jednak zawsze konieczne, czasami system operacyjny może sam komunikować się ze sprzętem.
Dzieje się tak np. w systemie Windows jeśli BIOS nie wspiera Plug and Play. Windows korzysta wtedy z własnej funkcji konfiguracyjnej Plug and Play. Ma to szczególne znaczenie gdy urządzenia mogą być zmieniane w trakcie pracy PC-ta. Istnienie owej funkcji zapewnia, że jest to w ogóle możliwe, np. dla urządzeń USB lub PC Card.