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

Przerwania

Ponieważ jest to prezentacja o BIOS-ie zostaną tu przedstawione tylko przerwania BIOS-u. Dziś już nie są one używane przez nowoczesne systemy operacyjne, takie jak Linux. Powodów po temu jest kilka:

Wymienione systemy korzystają z własnych przerwań, których idea jest dokładnie tak sama jak w przypadku przerwań BIOS-u.

Przerwanie jest sygnałem informującym procesor o zajsciu pewnego zdarzenia (np: naciśnięcie klawisza), które powinno być obsłużone. Procesor zaczyna wykonywać kod mający obsłużyć dane zdarzenia. Kod ten nazywamy procedurą oblsugi przerwania.
Podczas startu systemu, BIOS inicjuje tzw.: tablicę wektorów przerwań, która zawiera informacje o adresach procedur obsługi przerwań. Jest ona zbiorem 256 dalekich wskaźników (nazywanych wektorami) i umieszczona jest w pamieci pod adresem 00:00h (czyli sam początek pamieci RAM).

Oto zawartosc omawianej tablicy dla komputerów PC:

Przerwanie Położenie wektora Typ Zadanie
00h 0000:0000h PROCESOR Błąd dzielenia przez zero
01h 0000:0004h PROCESOR Przerwanie pracy krokowej
02h 0000:0008h SPRZĘT NHI/błąd koprocesora
03h 0000:000Ch PROCESOR Zatrzymanie programu
04h 0000:0010h PROCESOR Nadmiar arytmetyczny
05h 0000:0014h BIOS Wydruk ekranu
SPRZĘT Przekroczenie wartości granicznych
06h 0000:0018h PROCESOR Niepoprawny kod operacji
07h 0000:001Ch PROCESOR Brak koprocesora
08h 0000:0020h PROCESOR Podwójny błąd
SPRZĘT IRQ0: timer systemowy
09h 0000:0024h PROCESOR Przepełnienie stosu koprocesora
SPRZĘT IRQ1: klawiatura
0Ah 0000:0028h PROCESOR Nieważny TSS
SPRZĘT Symulowany IRQ2
0Bh 0000:002Ch PROCESOR Brak segmentu
SPRZĘT IRQ3: drugi port szeregowy
0Ch 0000:0030h PROCESOR Przepełnienie segmentu stosu
SPRZĘT IRQ4: pierwszy port szeregowy
0Dh 0000:0034h PROCESOR Ogólny błąd ochrony
SPRZĘT IRQ5: sterownik HDD
0Eh 0000:0038h SPRZĘT IRQ6: sterownik FDD
0Fh 0000:003Ch SPRZĘT IRQ7: port równoległy
10h 0000:0040h BIOS Funkcje BIOS-u karty graficznej
11h 0000:0044h BIOS Określenie wyposażenia
12h 0000:0048h BIOS Określenie wielkości pamięci podstawowej
13h 0000:004Ch BIOS Funkcje BIOSu FDD i HDD
14h 0000:0050h BIOS Funkcje BIOSu portów szeregowych
15h 0000:0054h BIOS Funkcje obsługi systemu i rozszerzenia BIOS-u
16h 0000:0058h BIOS Funkcje BIOSu obsługi klawiatury
17h 0000:005Ch BIOS Funkcje BIOSu obsługi drukarki
18h 0000:0060h BIOS Procedura obsługi awarii przy starcie komputera
19h 0000:0064h BIOS Procedura załadowania sektora startowego
1Ah 0000:0068h BIOS Obsługa timera i zegara czasu rzeczywistego
1Bh 0000:006Ch BIOS Obsługa Ctrl-Break
1Ch 0000:0070h BIOS Obsługa licznika systemowego
1Dh 0000:0074h WSKAŹNIK Tabela parametrów sterownika karty graficznej
1Eh 0000:0078h WSKAŹNIK Tabela parametrów FDD
1Fh 0000:007Ch WSKAŹNIK Zestaw znaków karty graficznej
20h-3Fh 0000:0080h
Zarezerwowane
40h 0000:0100h BIOS Alterenatywny wektor funkcji BIOSu dyskietki
41h 0000:0104h WSKAŹNIK Tabela paramterów HDD
42h 0000:0108h BIOS Domyśliny sterownik karty graficznej EGA
43h 0000:0110h WSKAźNIK Zestaw znaków karty graficznej
44h-45h 0000:0110h
Zarezerwowane
46h 0000:0118h WSKAŹNIK Tablea prametrów HDD
47h-49h 0000:011Ch
Zarezerwowane
4Ah 0000:0128h BIOS Obsługa alarmu zegara czasu rzeczywistego
4Bh-4Fh 0000:012Ch
Zarezerwowane
60h-67h 0000:0180h
Przerwania programów użytkownika
68h-6Fh 0000:01A0h
Zarezerwowane
70h 0000:01C0h SPRZĘT IRQ8: zegar czasu rzeczywistego
71h 0000:01C4h SPRZĘT IRQ9: skierowane z IRQ2
72h 0000:01C8h SPRZĘT IRQ10
73h 0000:01CCh SPRZĘT IRQ11
74h 0000:01D0h SPRZĘT IRQ12: interfejs myszy
75h 0000:01D4h SPRZĘT IRQ13: błąd koprocesora
76h 0000:01D8h SPRZĘT IRQ14: sterownik HDD
77h 0000:01DCh SPRZĘT IRQ15
78h-7Fh 0000:01E0h
Zarezerwowane
80h-F0h 0000:0200h
Zarezerwowane
F1h-FFh 0000:03C4h
Przrwania programów użytkownika

Wywołując przerwanie musimy podać numer funkcji, która ma zostać wykonana. Robi się to wpisując do rejestru AX nazwę interesującej nas funkcji. W pozostałych rejestrach należy podać parametry wywoływanej funkcji.

Oto opis funkcji poszczególnych przerwań BIOSu:

Nr przerwania Nr funkcji Opis funkcji
05h
Obsługuje klawisz Print Screen
10h 00h Ustawia tryb karty graficznej
01h Ustawia rozmiar kursora
02h Ustawia pozycję kursora
03h Odczytuje pozycję kursora
04h Odczytanie pozycji pióra świetlnego
05h Ustawia aktywną stronę
06h Przewija stronę do góry
07h Przewija stronę w dół
08h Odczytuje znak i atrybut
09h Pisze znak wraz z atrybutem
0Ah Pisze tylko znak
0Bh Ustawia paletę barw
0Ch Rysuje piksel
0Dh Odczytuje piksel
0Eh Pisze znak i przesuwa kursor
0Fh Podaje tryb pracy karty graficznej
13h Pisze tekst
1A00h Odczytanie kodów kart graficznych
11h
Podaje informację o zamontowanym wyposażeniu
12h
Podaje wielkość pamięci podstawowej
13h 00h Reset napędu (FDD lub HDD)
01h Stan zakończenia ostatniej operacji IO
02h Czyta sektory
03h Zapisuje sektory
04h Weryfikuje sektory
05h Formatuje ścieżkę
08h Podaje parametry dysku
09h Inicjalizuje parametry dysku
0Ah Czyta długie sektory
0Bh Zapisuje długie sektory
0Ch Idzie do cylindra
0Dh Alternatywny reset dysku
10h Sprawdzenie gotowości dysku
11h Rekalibracja dysku
12h Wykonuje diagnosykę RAM
13h Wykonanie diagnostyki sterownika
14h Podaje typ stacji FDD
15h Podaje typ HDD
16h Sprawdza stan linii zmiany nośnika FDD
17h Ustawia typ dyskietki do formatowania (FDD)
18h Ustawia typ nośnika do formatowania (HDD)
19h Parkuje głowicę (HDD)
14h 00h Inicjalizuje port szeregowy
01h Wysyła znak przez port szeregowy
02h Odbiera znak przez port szeregowy
03h Podaje stan portu szeregowego
04h Rozszerzona inicjalizacja portu szeregowego
05h Rozszerzone sterowanie modemem
15h 4Fh Przechwycenie naciśnięcia klawisza
80h Przechwycenie otwarcia połączenia
81h Przechwycenie zamkniecia połączenia
82h Przechwycenie zakończenia procesu
83h Ustawia/kasuje timer
84h Podaje stan joysticka
85h Obsluga klawisza SysRq
86h Bezwarunkowe oczekiwanie
87h Przesunięcie blokowe
88h Podaje wielkość pamięci rozszerzonej
89h Przełączenie na tryb chroniony
90h Oczekiwanie na urządzenie
91h Przerwania zakończenia
C0h Podaje informacje o środowisku pracy
C1h Podaje segment rozszerzonego BDA
C200h Włącza/wyłącza mysz PDI
C201h Resetuje mysz PDI
C202h Ustawia częstotliwość próbkowania myszy PDI
C203h Ustawia częstotliwość myszy PDI
C204h Podaje typ myszy PDI
C205h Inicjalizuje mysz PDI
C206h Pobranie/ustawienie skalowania myszy PDI
C207h Ustawia adres sterownika myszy PDI
D800h Podaje informacje o gnieździe EISA
D801h Podaje informacje o funkcjach
D802h Wymazuje konfigurację
D803h Zapisuje konfigurację
16h 00h Odczytuje znak z klawiatury
01h Sprawdza czy są gotowe dane z klawiatury
02h Podaje stan klawiatury
03h Ustawienia szybkości klawiatury
05h Zapisuje znak do bufora klawiatury
10h Odzczytuje znak z klawiatury rozszerzonej
11h Sprawdza czy są gotowe dane z klawiatury rozszerzonej
12h Podaje stan klawiatury rozszerzonej
17h 00h Drukuje znak
01h Inicjalizuje port drukarki
02h Pobiera słowo stanu drukarki
1Ah 00h Podaje stan licznika systemowego
01h Ustawia stan licznika systemowego
02h Podaje stan zegra RTC
03h Ustawia czas RTC
04h Podaje datę RTC
05h Ustawia datę RTC
06h Ustawia alarm RTC
07h Resetuje alarm RTC
1Ch
Obsługa systemowego sygnału zegarowego

Jak wcześniej już napisałem, Linux nie korzysta z przerwań BIOS-u (wyjątkiem jest tylko start i zakończenie pracy systemu). Przechodząc do trybu chronionego inicjuje on własną tablicę przerwań, do której wskaźnik znajduje sie w rejstrze idtr.
Wyjątki, o których napisałem wyżej, występują w LILO i funkcji setup(). Np. LILO wyświetlając "Loading" korzysta z przerwania BIOS-u, a funkcja setup() (znajdująca sie pod adresem 0x00090200) używając BIOS-u otrzymuje informacje ozainstalowanej pamięci w komputerze.