Programowanie BIOSu.pdf

(42 KB) Pobierz
Programowanie BIOSu
Programowanie Biosu
Za co odpowiada BIOS?
BIOS odpowiada zazwyczaj za komunikacjħ miħdzy programem a urzĢdzeniami.
Udostħpnia on zazwyczaj swj interfejs i umoŇliwia dostħp do sprzħtu bez
bezpoĻredniego odwoþywania siħ do niego.
BIOS zawiera sterowniki najczħĻciej uŇywanych urzĢdzeı, na przykþad:
· bardzo proste sterowniki kart graficznych (wyĻwietlanie komunikatw
diagnostycznych, logo)
· sterowniki dyskw twardych
· sterowniki stacji dyskw
· sterowniki stacji CD-ROM
·
PoniewaŇ BIOS oferuje wiħkszĢ abstrakcjħ niŇ "goþy" komputer, uŇywanie jego funkcji w
swoich programach gwarantowaþo kiedyĻ ich wiħkszĢ przenoĻnoĻę. DziĻ system
operacyjny komunikuje siħ raczej bezpoĻrednio z urzĢdzeniami, by mieę nad nimi
wiħkszĢ kontrolħ i wiħkszy wpþyw na szybkoĻę wykonywanych operacji, a programy
uŇytkownika nie korzystajĢ w trybie chronionym z moŇliwoĻci BIOSu.
Jak BIOS udostħpnia swoje funkcje systemowi?
BIOS zmienia kilka pozycji w tablicy przerwaı wstawiajĢc tam wskaŅniki do swoich
funkcji. Nastħpnie system operacyjny (lub program, jeŇeli system umoŇliwia
wykonywanie przerwaı, jak w systemie DOS) wywoþuje przerwanie o okreĻlonym
numerze (int 0xNUMER). W rejestrach oglnego przeznaczenia przekazywane sĢ
parametry funkcji. BIOS wykonuje funkcjħ i wraca wykonujĢc instrukcjħ procesora IRET.
Dane BIOSu - Bios Data Area
Bios trzyma swoje zmienne w specjalnym obszarze pamiħci od adresu 0040:0000.
Zmienne te moŇna zarwno odczytywaę jak i modyfikowaę. Wywoþania funkcji BIOSu
mogĢ powodowaę ich zmianħ, co naleŇy braę pod uwagħ przy pisaniu programw
zapisujĢcych tam wartoĻci.
W poniŇszej tabeli znajdujĢ siħ przykþadowe przesuniħcia wzglħdem adresu 0040:0000
oraz ich znaczenia.
Przesuniħcie Znaczenie
0x0000
Adresy wejĻcia/wyjĻcia dla portw szeregowych
0x0008
Adresy wejĻcia/wyjĻcia dla portw rwnolegþych
0x0017
Sþowo zawierajĢce stan klawiatury
0x001A
PoczĢtek bufora klawiatury
0x001C
Koniec bufora klawiatury
0x001E
Bufor klawiatury (32 bajty)
0x003F
Jeden bajt - stan silnikw stacji dyskw
0x004E
PoczĢtek obrazu ekranu w pamiħci karty graficznej
0x006B
Ostatnie przerwanie sprzħtowe, np. bit 5 ustawiony na 1
oznacza wystĢpienie przerwania IRQ 5,
sterownik klawiatury
204282265.006.png 204282265.007.png 204282265.008.png
0x0074
Stan ostatniej operacji dyskowej (po int 0x13), np. 0x4 to bþĢd
"sektor nie istnieje"
0x0075
IloĻę twardych dyskw w systemie
0x0078
Przekroczenie czasu oczekiwania w porcie rwnolegþym numer 1
0x008B
Bajt konfiguracji stacji dyskw, np. bity 7-6 oznaczaja predkosc
przesyþu danych do kontrolera (np. 00-500 Kbit/sek, 01-300 Kbit)
0x008C
Bajt stanu kontrolera twardego dysku
0x0096
Flagi stanu klawiatury, np. bit 3 jest rwny 1, gdy wciĻniħto prawy
klawisz Alt
0x0097
Flagi stanu klawiatury, bit 2 to zapalona dioda Caps Lock, bit 1 to
dioda Num Lock, bit 0 to dioda Scroll Lock, bit 7 to bþĢd przesyþu z
klawiatury
Przerwania BIOSu
Tablica przerwaı znajduje siħ w pamiħci operacyjnej na poczĢtku pamiħci (pod adresem
0) i zajmuje jeden kilobajt. Jest tam 256 wskaŅnikw do funkcji wywoþywanych przez
przerwania programowe. KaŇdy wskaŅnik zajmuje cztery bajty. Tak jest oczywiĻcie tylko
w trybie rzeczywistym.
PoniŇej znajduje siħ tabela z listĢ przerwaı BIOSu.
Numer
przerwania
Opis
przerwania
0x0
Przerwanie dzielenia przez zero
0x1
Praca krok po kroku
0x2
Non-maskable interrupt (przerwanie niemaskowalne)
0x3
Trap (puþapka), przydatne przy odpluskwianiu
0x4
Nadmiar
0x5
PrintScreen (Drukowanie ekranu)
0x6
Zarezerwowane
0x7
Zarezerwowane
0x8
IRQ 0 - zegar systemowy
0x9
IRQ 1 - klawiatura
0xA
IRQ 2 - zarezerwowane
0xB
IRQ 3 - þĢcze szeregowe 2
0xC
IRQ 4 - þĢcze szeregowe 1
0xD
IRQ 5 - þĢcze rwnolegþe 2
0xE
IRQ 6 - sterownik dyskietek
0xF
IRQ 7 - þĢcze rwnolegþe 1
0x10
Karta graficzna
0x11
Do odczytu konfiguracji
0x12
WielkoĻę pamiħci konwencjonalnej
0x13
Przerwanie do obsþugi dyskw twardych
0x14
Port szeregowy
0x15
Inne funkcje
204282265.009.png 204282265.001.png 204282265.002.png
0x16
Funkcje klawiatury
0x17
Funkcje drukarki
0x18
Wywoþanie ekranu konfiguracyjnego BIOSu
0x19
ýadowanie systemu operacyjnego
0x1A
Funkcje dotyczĢce zegara
0x1B
Przerwanie Ctrl+Break
0x1C
Przerwanie zegara czasu rzeczywistego
0x1D
Ustawienia sterownika graficznego
0x1E
Ustawienia napħdu stacji dyskw
0x1F
WskaŅnik na tablicħ rozszerzonych znakw ASCII
Jak widaę, przy pomocy funkcji BIOSu moŇna caþkiem duŇo zrobię. Caþkiem ciekawym
zastosowaniem jest programowanie karty VGA - jest to proste, a napisane dla niej
programy zadziaþajĢ na dowolnym komputerze (uruchomione w trybie rzeczywistym, bo
w chronionym zazwyczaj nie ma dostħpu do funkcji BIOSu). Oto przykþad programu
przeþĢczajĢcego kartħ VGA w tryb 320x200:
mov ax, 0x13
int 0x10
PŅniej wystarczy jedynie ustawię paletħ kolorw i umieszczaę wartoĻci w pamiħci karty
graficznej od adresu 0xA000. Jest to bardzo wygodne i dziaþa z kaŇdĢ kartĢ VGA. Z tego
powodu powstaþo wiele programw i gier wykorzystujĢcych tħ funkcjħ BIOSu.
204282265.003.png 204282265.004.png 204282265.005.png
Zgłoś jeśli naruszono regulamin