BIOS a twarde dyski


Rola BIOSu w dostępie do dysków twardych

BIOS pełni różne funkcje związane z dostępem do dysków twardych:

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.


[Wstecz]  [Dalej]  [Główna]