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.