|
Rola BIOSu w dostępie do dysków twardych
BIOS pełni
różne funkcje związane z dostępem do dysków twardych:
Udostępnia przerwania do zarządzania dyskiem twardym. Dzięki przerwaniu 0x13,
programy mają standardowy sposób odwoływania się do dysku i nie muszą osobno
rozpatrywać różne modele dysków. W dzisiejszych czasach systemy operacyjne
często pomijają BIOS przy odwoływaniu się do sprzętu, ale mimo to warto o tym
wspomnieć, gdyż wiedza o funkcjach BIOSu może się przydać przy programowaniu
niskopoziomowym.
BIOS pozwala na skonfigurowanie różnych
ustawień dysków twardych zgodnych ze standardem IDE/ATA; w większości przypadków
potrafi nawet dokonać tego automatycznie, bez pomocy użytkownika.
BIOS wspiera różne sposoby odwoływania się
do twardego dysku, np. przez DMA (bezpośredni dostęp kontrolera dysku do
pamięci) albo w trybie blokowym (grupowanie operacji odczytu i zapisu).
Przerwanie 0x13
W celu ułatwienia pisania przenośnych programów niskopoziomowych, BIOS
udostępnia przerwanie 0x13 do pracy z dyskami twardymi. Niestety, jego
możliwości są znacznie ograniczone. Interfejs tego przerwania używa jedynie 24
bitów do opisu geometrii dysku.
Na tę liczbę składa się:
Daje to razem 2^24 sektorów - jeżeli każdy ma
512 bajtów, to BIOS obsługuje dyski do wielkości ok. 8 GB. W czasach, gdy
powstał pierwszy BIOS, była to nieprawdopodobnie duża liczba, dziś istnieją już
dyski o znacznie większych pojemnościach.
Starsze BIOSy miały jeszcze jedno ograniczenie - kod ładujący system operacyjny
musiał się znajdować przed pierwszą połową pierwszego gigabajta dysku. Dlatego
ludzie instalujący w połowie lat dziewięćdziesiątych Linuksa musieli używać
dodatkowych dysków, usuwać stare systemy operacyjne lub dzielić dysk na
partycje, by sektor startowy mieścił się w dopuszczalnym przez BIOS zakresie.
Na szczęście, jakiś czas temu pojawiły się rozszerzenia przerwania 0x13 BIOSu
umożliwiające korzystanie z większych dysków twardych. Są to po prostu nowe
funkcje tego przerwania, które wykorzystują 64 bity do adresowania dysku.
Przykładowe funkcje przerwania
Funkcja 1 - odczytanie stanu dysku
Parametry:
AH - 01
Zwracane wartości:
AL - stan (00 - bez błędu, 01 - zły rozkaz, 04 - sektor nie znaleziony itp.
Zwracana jest tak naprawdę zawartość spod adresu 0040:0041 Bios Data Area.
Funkcja 2 - odczytanie sektorów dysku
Parametry:
AH - 02
AL - liczba sektorów do odczytania (1-128)
CX - numer ścieżki (głowicy)/cylindra (0-1023) to 8 bitów CH
oraz 2 bity CL, 6 najmłodszych bitów CL to numer sektora
DH - numer głowicy (0-15)
DL - numer urządzenia (0x00 - stacja dysków 1, 0x01 - stacja dysków 1,
0x80 - dysk 0, 0x81 - dysk 2
ES:BX - wskaźnik na bufor
Zwracane wartości:
AX - stan
AL - liczba przeczytanych sektorów
flaga carry (CF) - 0 gdy nie było błędu, 1 gdy nastąpił błąd
Funkcja 3 - zapisanie sektorów dysku
Parametry:
AH - 02
AL - liczba sektorów do zapisania (1-128)
Pozostałe parametry są takie, jak dla funkcji numer 2.
Zwracane wartości:
AX - stan, 0 jeśli flaga carry równa 0
AL - liczba zapisanych sektorów
flaga carry (CF) - 0 gdy nie było błędu, 1 gdy nastąpił błąd
Przy pomocy tych funkcji można już napisać prosty program odczytujący zawartość
dysku, który może się przydać w razie awarii komputera. Należy go zamieścić na
pierwszym sektorze zerowej ścieżki dyskietki (dysku) i uruchomić komputer, a
BIOS go sam załaduje i uruchomi.
Autor: Filip Noworyta
D.F.
|