Page 1 of 6
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:
przerwania BIOS-u muszą pracować w trybie rzeczywistym, tzn. Linux ich po prostu nie może używać gdyż sam pracuje w trybie chronionym (a przełączanie się jest zbyt kosztowne).
przerwania BIOS-u są wolniejsze od bezpośredniej obsługi urządzeń;
przerwania BIOS-u zminiejszają bezpieczeństwo systemu (np: również dzięki nim w systemie operacyjnym DOS można było odczytać dowolną informację z dysku);
przerwania te nie zapewniają wsparcia dla nowych typów urzadzeń.
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
BIOS
Wydruk ekranu
05h
0000:0014h
SPRZĘT
Przekroczenie wartości granicznych
06h
0000:0018h
PROCESOR Niepoprawny kod operacji
07h
0000:001Ch
PROCESOR Brak koprocesora
PROCESOR Podwójny błąd
08h
0000:0020h
SPRZĘT
IRQ0: timer systemowy
PROCESOR Przepełnienie stosu koprocesora 09h
0000:0024h
http://students.mimuw.edu.pl/SO/Projekt03-04/temat3-g4/przerwania.html 2008-05-19
Page 2 of 6
SPRZĘT
IRQ1: klawiatura
PROCESOR Nieważny TSS
0Ah
0000:0028h
SPRZĘT
Symulowany IRQ2
PROCESOR Brak segmentu
0Bh
0000:002Ch
SPRZĘT
IRQ3: drugi port szeregowy
PROCESOR Przepełnienie segmentu stosu 0Ch
0000:0030h
SPRZĘT
IRQ4: pierwszy port szeregowy
PROCESOR Ogólny błąd ochrony
0Dh
0000:0034h
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
http://students.mimuw.edu.pl/SO/Projekt03-04/temat3-g4/przerwania.html 2008-05-19
Page 3 of 6
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
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
10h
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
http://students.mimuw.edu.pl/SO/Projekt03-04/temat3-g4/przerwania.html 2008-05-19
Page 4 of 6
1A00h
Odczytanie kodów kart graficznych
11h
Podaje informację o zamontowanym wyposażeniu 12h
Podaje wielkość pamięci podstawowej
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
13h
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)
00h
Inicjalizuje port szeregowy
01h
Wysyła znak przez port szeregowy
02h
Odbiera znak przez port szeregowy
14h
03h
Podaje stan portu szeregowego
04h
Rozszerzona inicjalizacja portu szeregowego 05h
Rozszerzone sterowanie modemem
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
http://students.mimuw.edu.pl/SO/Projekt03-04/temat3-g4/przerwania.html 2008-05-19
Page 5 of 6
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
15h
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ę
00h
Odczytuje znak z klawiatury
01h
Sprawdza czy są gotowe dane z klawiatury 02h
Podaje stan klawiatury
03h
Ustawienia szybkości klawiatury
16h
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
00h
Drukuje znak
17h
01h
Inicjalizuje port drukarki
02h
Pobiera słowo stanu drukarki
00h
Podaje stan licznika systemowego
01h
Ustawia stan licznika systemowego
02h
Podaje stan zegra RTC
1Ah
03h
Ustawia czas RTC
04h
Podaje datę RTC
http://students.mimuw.edu.pl/SO/Projekt03-04/temat3-g4/przerwania.html 2008-05-19
Page 6 of 6
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.
http://students.mimuw.edu.pl/SO/Projekt03-04/temat3-g4/przerwania.html 2008-05-19