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.