Wywołanie przerwania BIOS - BIOS interrupt call

Wywołania przerwań BIOS to funkcja, której systemy operacyjne i aplikacje używają do wywoływania funkcji oprogramowania Basic Input/Output System na komputerach zgodnych z IBM PC . Tradycyjnie wywołania systemu BIOS są używane głównie przez programy DOS i niektóre inne programy, takie jak programy ładujące (w tym, w większości historycznie, stosunkowo proste aplikacje, które uruchamiają się bezpośrednio i działają bez systemu operacyjnego — zwłaszcza oprogramowanie do gier). BIOS działa w trybie adresu rzeczywistego (tryb rzeczywisty) procesora x86, więc programy wywołujące BIOS muszą również działać w trybie rzeczywistym lub muszą przełączyć się z trybu chronionego do trybu rzeczywistego przed wywołaniem systemu BIOS i ponownym przełączeniem. Z tego powodu nowoczesne systemy operacyjne, które używają procesora w trybie chronionym lub w trybie Long, generalnie nie używają wywołań przerwań BIOS do obsługi funkcji systemowych, chociaż używają wywołań przerwań BIOS do sondowania i inicjowania sprzętu podczas rozruchu . Tryb rzeczywisty ma ograniczenie pamięci do 1 MB, nowoczesne programy ładujące (np. GRUB2 , Windows Boot Manager ) używają trybu nierzeczywistego lub chronionego (i wykonują wywołania przerwań BIOS w trybie Virtual 8086 , ale tylko do uruchamiania systemu operacyjnego), aby uzyskać dostęp do 4 GB pamięć.

We wszystkich komputerach instrukcje oprogramowania kontrolują fizyczny sprzęt (ekran, dysk, klawiatura itp.) od momentu włączenia zasilania. W komputerze system BIOS, wstępnie załadowany w pamięci ROM na płycie głównej, przejmuje kontrolę natychmiast po zresetowaniu procesora, w tym podczas włączania zasilania, po naciśnięciu przycisku resetowania sprzętu lub w przypadku krytycznej awarii oprogramowania ( potrójny błąd ) powoduje, że obwody płyty głównej automatycznie wyzwalają reset sprzętowy. BIOS testuje sprzęt i inicjuje jego stan; znajduje, ładuje i uruchamia program startowy (zwykle program ładujący system operacyjny i historyczny ROM BASIC ); i zapewnia podstawową kontrolę sprzętu dla oprogramowania uruchomionego na komputerze, które zwykle jest systemem operacyjnym (z aplikacjami), ale może być bezpośrednio uruchamianą pojedynczą aplikacją.

Ze strony IBM dostarczyli wszystkich informacji potrzebnych do pełnego wykorzystania BIOS-u lub bezpośredniego wykorzystania sprzętu i całkowitego uniknięcia BIOS-u podczas programowania wczesnych modeli IBM PC (przed PS/2). Od samego początku programiści mieli wybór, czy chcą używać BIOS-u, czy nie, na zasadzie peryferii sprzętowej. IBM zdecydowanie zachęcał do tworzenia „dobrze zachowujących się” programów, które uzyskiwały dostęp do sprzętu tylko przez wywołania BIOS INT (i wywołania usług DOS), aby wspierać zgodność oprogramowania z obecnymi i przyszłymi modelami komputerów PC z odmiennym sprzętem peryferyjnym, ale IBM zrozumiał to dla niektórych deweloperów oprogramowania i klientów sprzętu, wymagana była możliwość bezpośredniej kontroli sprzętu przez oprogramowanie użytkownika. Częściowo było tak dlatego, że znaczna część wszystkich cech sprzętowych i funkcji nie została ujawniona przez usługi BIOS-u. Dla dwóch przykładów (spośród wielu), adaptery MDA i CGA są zdolne do przewijania sprzętowego, a adapter szeregowy PC jest zdolny do przesyłania danych sterowanego przerwaniami, ale BIOS IBM nie obsługuje żadnej z tych przydatnych funkcji technicznych.

Obecnie BIOS w nowym komputerze nadal obsługuje większość, jeśli nie wszystkie, wywołania funkcji przerwań BIOS zdefiniowane przez IBM dla IBM AT (wprowadzone w 1984 r.), wraz z wieloma nowszymi, plus rozszerzenia niektórych oryginalnych ( np. rozszerzone zakresy parametrów) ogłoszone przez różne inne organizacje i współpracujące grupy branżowe. To, w połączeniu z podobnym stopniem kompatybilności sprzętowej, oznacza, że ​​większość programów napisanych dla IBM AT może nadal działać poprawnie na nowym komputerze, zakładając, że większa szybkość wykonywania jest akceptowalna (co zwykle dotyczy wszystkich gier oprócz gier, w których taktowanie oparte na procesorze). Pomimo znacznych ograniczeń usług dostępnych przez przerwania BIOS-u, okazały się one niezwykle użyteczne i odporne na zmiany technologiczne.

Cel wywołań BIOS

Wywołania przerwań systemu BIOS wykonują sterowanie sprzętowe lub funkcje we/wy żądane przez program, zwracają informacje systemowe do programu lub wykonują obie te czynności. Kluczowym elementem celu wywołań BIOS-u jest abstrakcja — wywołania BIOS-u wykonują ogólnie zdefiniowane funkcje, a szczegółowe informacje o tym, jak te funkcje są wykonywane na konkretnym sprzęcie systemu, są zawarte w BIOS-ie i ukryte przed programem. Na przykład program, który chce czytać z dysku twardego, nie musi wiedzieć, czy dysk twardy jest dyskiem ATA , SCSI , czy SATA (lub dawniej dyskiem ESDI , MFM lub RLL z być może kontroler Seagate ST-506 , być może jeden z kilku typów kontrolerów Western Digital lub z innym zastrzeżonym kontrolerem innej marki). Program musi jedynie zidentyfikować zdefiniowany w systemie BIOS numer dysku, do którego chce uzyskać dostęp, oraz adres sektora, do którego ma być odczytywany lub zapisywany, a system BIOS zajmie się przetłumaczeniem tego ogólnego żądania na określoną sekwencję wymaganych podstawowych operacji aby wykonać zadanie za pomocą określonego sprzętu kontrolera dysku, który jest podłączony do tego dysku. Program nie musi wiedzieć, jak kontrolować na niskim poziomie każdy rodzaj dysku twardego (lub karty graficznej, interfejsu portu lub urządzenia peryferyjnego zegara czasu rzeczywistego), do którego może potrzebować dostępu. To zarówno ułatwia programowanie systemów operacyjnych i aplikacji, jak i zmniejsza rozmiar programów, zmniejszając duplikację kodu programu, ponieważ funkcja zawarta w systemie BIOS nie musi być zawarta w każdym programie, który tego potrzebuje; zamiast tego programy zawierają stosunkowo krótkie wywołania systemu BIOS. (W systemach operacyjnych, w których nie jest używany system BIOS, wywołania usług dostarczane przez sam system operacyjny zazwyczaj spełniają tę samą funkcję i cel).

BIOS uwalnia również projektantów sprzętu komputerowego (w zakresie, w jakim programy są pisane wyłącznie do korzystania z BIOS-u) od przymusu zachowania dokładnej zgodności sprzętu ze starymi systemami podczas projektowania nowych systemów, aby zachować zgodność z istniejącym oprogramowaniem. Na przykład klawiatura w IBM PCjr działa zupełnie inaczej niż klawiatura we wcześniejszych modelach IBM PC, ale dla programów, które używają klawiatury tylko przez BIOS, ta różnica jest prawie niewidoczna. (Dobrym przykładem drugiej strony tego problemu jest fakt, że znaczna część programów komputerowych używanych w czasie wprowadzenia PCjr nie korzystała z klawiatury wyłącznie przez BIOS, więc IBM uwzględnił również funkcje sprzętowe w PCjr, aby emulować sposób działania oryginalnego sprzętu klawiatury IBM PC i IBM PC XT . Emulacja sprzętu nie jest dokładna, więc nie wszystkie programy, które próbują bezpośrednio korzystać ze sprzętu klawiatury, będą działać poprawnie na PCjr, ale wszystkie programy, które używają tylko usług klawiatury BIOS, będą .)

Oprócz zapewniania dostępu do urządzeń sprzętowych, BIOS zapewnia dodatkowe funkcje, które są zaimplementowane w oprogramowaniu BIOS. Na przykład BIOS utrzymuje oddzielne pozycje kursora dla maksymalnie ośmiu stron wyświetlania tekstu i zapewnia wyjście podobne do TTY z automatycznym zawijaniem wierszy i interpretacją podstawowych znaków sterujących, takich jak powrót karetki i wysuw wiersza, podczas gdy sprzęt do wyświetlania tekstu zgodny z CGA ma tylko jeden globalny kursor wyświetlacza i nie może automatycznie przesuwać kursora, używać pozycji kursora do adresowania pamięci wyświetlacza (aby określić, która komórka znaku zostanie zmieniona lub zbadana) lub zinterpretować znaki kontrolne. Na przykład interfejs klawiatury BIOS interpretuje wiele naciśnięć klawiszy i kombinacji klawiszy, aby śledzić różne stany zmiany biegów (lewy i prawy Shift , Ctrl i Alt ), aby wywołać usługę drukowania ekranu po naciśnięciu Shift + PrtScrn , aby ponownie uruchomić system po naciśnięciu klawiszy Ctrl + Alt + Del , aby śledzić stany blokady (Caps Lock, Num Lock i Scroll Lock) oraz, w maszynach klasy AT, kontrolować odpowiednie wskaźniki stanu blokady na klawiaturze, oraz do wykonywania innych podobnych funkcji interpretacyjnych i zarządzania klawiaturą. W przeciwieństwie do tego, zwykłe możliwości standardowego sprzętu klawiatury PC i PC-AT ograniczają się do zgłaszania do systemu każdego pierwotnego zdarzenia naciśnięcia lub zwolnienia pojedynczego klawisza (tj. przejścia ze stanu „zwolniony” do „wciśniętego” stanu lub odwrotnie), wykonanie polecenia resetowania i autotestu klawiatury oraz, w przypadku klawiatur klasy AT, wykonanie polecenia z systemu hosta w celu ustawienia stanów bezwzględnych wskaźników stanu blokady (diod LED).

Wywoływanie BIOS: przerwania oprogramowania BIOS

Systemy operacyjne i inne oprogramowanie komunikują się z oprogramowaniem BIOS w celu kontrolowania zainstalowanego sprzętu poprzez przerwania programowe. Przerwanie programowe to specyficzna odmiana ogólnej koncepcji przerwania. Przerwanie jest mechanizmem, za pomocą którego CPU może zostać nakłoniony do zatrzymania wykonywania programu linii głównej i natychmiastowego wykonania specjalnego programu, zwanego procedurą przerwania (ISR). Po zakończeniu ISR CPU kontynuuje pracę z programem głównym. Na procesorach x86, gdy wystąpi przerwanie, ISR do wywołania znajduje się w tablicy adresów punktów początkowych ISR (zwanych "wektorami przerwań") w pamięci: Tablica Wektorów Przerwań (IVT). Przerwanie jest wywoływane przez jego numer typu, od 0 do 255, a numer typu jest używany jako indeks w tablicy wektorów przerwań, a pod tym indeksem w tablicy znajduje się adres ISR, który zostanie uruchomiony w odpowiedzi na przerwać. Przerwanie programowe to po prostu przerwanie wyzwalane poleceniem programowym; dlatego przerwania programowe działają jak podprogramy, z tą główną różnicą, że program, który wykonuje wywołanie przerwania programowego, nie musi znać adresu ISR, tylko jego numer przerwania. Ma to zalety w zakresie modułowości, kompatybilności i elastyczności w konfiguracji systemu.

Wywołania przerwań systemu BIOS można traktować jako mechanizm przekazywania komunikatów między systemem BIOS a oprogramowaniem klienckim systemu BIOS, takim jak system operacyjny. Komunikaty żądają danych lub akcji z systemu BIOS i zwracają żądane dane, informacje o stanie i/lub produkt żądanej akcji do wywołującego. Komunikaty są podzielone na kategorie, każda z własnym numerem przerwania, a większość kategorii zawiera podkategorie, zwane "funkcjami" i identyfikowane przez "numery funkcji". Klient systemu BIOS przekazuje większość informacji do systemu BIOS w rejestrach procesora i odbiera większość informacji z powrotem w ten sam sposób, ale dane zbyt duże, aby zmieścić się w rejestrach, takie jak tabele parametrów kontrolnych lub dane sektora dysku do przesyłania dysków, są przekazywane przez przydzielenie bufora (czyli trochę miejsca) w pamięci i przekazywanie adresu bufora w rejestrach. (Czasami wiele adresów elementów danych w pamięci może być przekazywanych w strukturze danych w pamięci, z adresem tej struktury przekazywanym do BIOS w rejestrach.) Numer przerwania jest określony jako parametr instrukcji przerwania oprogramowania (w języku asemblera Intela , instrukcja „INT”), a numer funkcji jest określony w rejestrze AH; to znaczy, wywołujący ustawia w rejestrze AH numer żądanej funkcji. Ogólnie usługi BIOS odpowiadające każdemu numerowi przerwań działają niezależnie od siebie, ale funkcje w ramach jednej usługi przerwań są obsługiwane przez ten sam program BIOS i nie są niezależne. (Ten ostatni punkt dotyczy ponownego wejścia .)

Oprogramowanie BIOS zwykle powraca do wywołującego z kodem błędu, jeśli się nie powiedzie, lub z kodem stanu i/lub żądanymi danymi, jeśli się powiedzie. Same dane mogą być tak małe, jak jeden bit lub tak duże, jak 65 536 bajtów całych sektorów dysku surowego (maksymalnie, które zmieszczą się w jednym segmencie pamięci trybu rzeczywistego). BIOS był przez lata wielokrotnie rozszerzany i ulepszany przez wiele różnych podmiotów korporacyjnych, a niestety wynikiem tej ewolucji jest to, że nie wszystkie funkcje BIOS-u, które można nazwać, wykorzystują spójne konwencje formatowania i przekazywania danych lub raportowania wyników. Niektóre funkcje BIOS-u zgłaszają szczegółowe informacje o stanie, podczas gdy inne mogą nawet nie zgłaszać sukcesu lub niepowodzenia, ale po prostu wracają po cichu, pozostawiając dzwoniącemu założenie sukcesu (lub przetestowanie wyniku w inny sposób). Czasami może być również trudne ustalenie, czy określone wywołanie funkcji systemu BIOS jest obsługiwane przez system BIOS na określonym komputerze lub jakie są ograniczenia parametrów wywołania na tym komputerze. (W przypadku niektórych nieprawidłowych numerów funkcji lub poprawnych numerów funkcji z nieprawidłowymi wartościami kluczowych parametrów — szczególnie w przypadku wczesnej wersji systemu BIOS IBM — system BIOS może nic nie zrobić i powrócić bez kodu błędu; jest to [niewygodna, ale nieunikniona] odpowiedzialność wołającego, aby uniknąć tego przypadku, nie wykonując takich wywołań, lub pozytywnie przetestować oczekiwany efekt wywołania, zamiast zakładać, że wywołanie było skuteczne.Ponieważ BIOS ewoluował w wielu krokach w swojej historii, funkcja, która jest prawidłowa w jedna wersja systemu BIOS od pewnego dostawcy może nie być ważna we wcześniejszej lub odmiennej wersji systemu BIOS od tego samego dostawcy lub w wersji systemu BIOS — w dowolnym wieku — od innego dostawcy).

Ponieważ wywołania przerwań BIOS używają przekazywania parametrów w oparciu o rejestr procesora, wywołania są zorientowane tak, aby były wykonane z języka asemblera i nie mogą być bezpośrednio wykonane z większości języków wysokiego poziomu (HLL). Jednak język wysokiego poziomu może zapewnić bibliotekę procedur opakowujących, które tłumaczą parametry z formularza (zwykle opartego na stosie) używanego przez język wysokiego poziomu na formularz oparty na rejestrach wymagany przez BIOS, a następnie z powrotem do konwencji wywoływania HLL po BIOS powraca. W niektórych wariantach C, wywołania BIOS mogą być wykonane przy użyciu wbudowanego języka asemblera w module C. (Obsługa wbudowanego języka asemblerowego nie jest częścią standardu ANSI C, ale jest rozszerzeniem języka; dlatego moduły C, które używają wbudowanego języka asemblerowego są mniej przenośne niż czyste moduły C w standardzie ANSI.)

Wywołanie przerwania

Wywołanie przerwania może być wykonane przy użyciu instrukcji asemblera INT x86 . Na przykład, aby wydrukować znak na ekranie przy użyciu przerwania BIOS 0x10, można wykonać następujące instrukcje języka asemblera x86:

 mov ah, 0x0e    ; function number = 0Eh : Display Character
 mov al, '!'     ; AL = code of character to display
 int 0x10        ; call INT 10h, BIOS video service

Tabela przerwań

Listę typowych klas przerwań BIOS można znaleźć poniżej. Zauważ, że niektóre BIOS-y (szczególnie stare) nie implementują wszystkich tych klas przerwań.

BIOS używa również niektórych przerwań do przekazywania przerwań zdarzeń sprzętowych do programów, które zdecydują się je odbierać lub kierować komunikaty do własnego użytku. Poniższa tabela zawiera tylko te przerwania BIOS, które mają być wywoływane przez programy (używając instrukcji przerwania programowego języka asemblera "INT") w celu żądania usług lub informacji.

Wektor przerwania Opis
05h Wykonywane po naciśnięciu ekranu Shift- Drukuj , a także gdy BOUNDinstrukcja wykryje błąd związany.
08h To jest przerwanie zegara czasu rzeczywistego. Strzela 18,2 razy na sekundę. Podczas tego przerwania BIOS zwiększa licznik czasu.
09h To jest przerwanie klawiatury. Zwykle jest to wyzwalane po naciśnięciu klawisza na klawiaturze.
10h Usługi wideo
AH Opis
00h Ustaw tryb wideo
01h Ustaw kształt kursora
02h Ustaw pozycję kursora
03h Uzyskaj pozycję i kształt kursora
04h Uzyskaj lekką pozycję pióra
05h Ustaw stronę wyświetlania
06h Wyczyść/przewiń ekran w górę
07h Wyczyść/przewiń ekran w dół
08h Przeczytaj postać i atrybut w Cursor
09h Napisz postać i atrybut w Cursor
0Ah Wpisz znak w kursorze
0Bh Ustaw kolor obramowania
0Ch Napisz piksele graficzne
0Dh Przeczytaj piksel graficzny
0Eh Napisz znak w trybie TTY
0Fh Pobierz tryb wideo
10h Ustaw rejestry palet (EGA, VGA, SVGA)
11h Generator znaków (EGA, VGA, SVGA)
12h Alternatywne funkcje wyboru (EGA, VGA, SVGA)
13h Napisz ciąg
1Ah Pobierz lub ustaw kod kombinacji wyświetlania (VGA, SVGA)
1Bh Uzyskaj informacje o funkcjonalności (VGA, SVGA)
1Ch Zapisz lub przywróć stan wideo (VGA, SVGA)
4Fh Funkcje rozszerzenia BIOS VESA (SVGA)
11h Zwraca listę sprzętu
12h Zwróć konwencjonalny rozmiar pamięci
13h Usługi dyskowe niskiego poziomu
AH Opis
00h Zresetuj dyski twarde
01h Sprawdź stan dysku
02h Przeczytaj sektory
03h Napisz sektory
04h Zweryfikuj sektory
05h Formatuj ścieżkę
08h Uzyskaj parametry dysku
09h Inicjuj stałe parametry napędu
0Ch Szukaj określonej ścieżki
0Dh Zresetuj stały kontroler dysku
15h Pobierz typ dysku
16h Uzyskaj status zmiany nośnika dyskietki
17h Ustaw typ dysku
18h Ustaw typ nośnika stacji dyskietek
41h Kontrola instalacji rozszerzonego dysku (EDD)
42h Rozszerzone sektory odczytu
43h Rozszerzone sektory zapisu
44h Rozszerzone sektory weryfikacji
45h Zablokuj/odblokuj dysk
46h Wysuń media
47h Rozszerzone poszukiwanie
48h Rozszerzone parametry pobierania dysku
49h Rozszerzony status zmiany nośnika pobierania
4Eh Rozszerzony zestaw konfiguracji sprzętowej
14h Usługi portu szeregowego
AH Opis
00h Inicjalizacja portu szeregowego
01h Prześlij znak
02h Odbierz postać
03h Status
15h Różne usługi systemowe
AH AL Opis
00h Włącz silnik napędu kasety (tylko IBM PC/PCjr)
01h Wyłącz silnik napędu kasety (tylko IBM PC/PCjr)
02h Odczytywanie bloków danych z kasety (tylko IBM PC/PCjr)
03h Zapis bloków danych do kasety (tylko IBM PC/PCjr)
4Fh Przechwytywanie klawiatury
83h Wydarzenie Czekaj
84h Joystick odczytu (BIOS od 1986 r.)
85h Objaśnienie klucza Sysreq
86h Czekać
87h Przenieś blok
88h Uzyskaj rozszerzony rozmiar pamięci
89h Przełącz na tryb chroniony
C0h Uzyskaj parametry systemu
C1h Uzyskaj rozszerzony segment obszaru danych systemu BIOS
C2h Funkcje urządzenia wskazującego
C3h Funkcje zegara watchdoga — tylko systemy PS/2
C4h Programowalny wybór opcji — tylko systemy PS/2 z magistralą MCA
D8h Funkcje systemu EISA — tylko systemy magistrali EISA
E8h 01h Uzyskaj rozszerzony rozmiar pamięci (nowsza funkcja, od 1994 r.). Daje wyniki dla rozmiaru pamięci powyżej 64 Mb.
E8h 20h Zapytanie o mapę adresową systemu. Informacje zwrócone z E820 zastępują informacje zwracane przez starsze interfejsy AX=E801hi AH=88hinterfejsy.
16h Usługi klawiatury
AH Opis
00h Przeczytaj znak
01h Odczytywanie stanu wejścia
02h Odczytywanie stanu zmiany klawiatury
05h Przechowuj naciśnięcia klawiszy w buforze klawiatury
10h Rozszerzony odczyt znaków
11h Rozszerzony status odczytu wejścia
12h Czytaj rozszerzony status zmiany klawiatury
17h Usługi drukarskie
AH Opis
00h Drukuj znak do drukarki
01h Zainicjuj drukarkę
02h Sprawdź stan drukarki
18h Execute Cassette BASIC : Na maszynach IBM aż do wczesnej linii PS/2 to przerwanie uruchomiłoby ROM Cassette BASIC. Klony nie miały tej funkcji, a różne maszyny/BIOSy wykonywałyby różne akcje, jeśli uruchomiono INT 18h, najczęściej komunikat o błędzie informujący, że nie ma dysku startowego. Nowoczesne maszyny próbowałyby uruchomić się z sieci przez to przerwanie. Na nowoczesnych maszynach przerwanie to będzie traktowane przez BIOS jako sygnał z bootloadera, że ​​nie wykonał swojego zadania. BIOS może wtedy podjąć odpowiednie dalsze kroki.
19h Po POST to przerwanie jest używane przez BIOS do załadowania systemu operacyjnego. Program może wywołać to przerwanie w celu ponownego uruchomienia komputera (ale musi zapewnić, że przerwania sprzętowe lub operacje DMA nie spowodują zawieszenia lub awarii systemu podczas ponownej inicjalizacji systemu przez BIOS lub podczas procesu uruchamiania).
1Ah Usługi zegara czasu rzeczywistego
AH Opis
00h Przeczytaj RTC
01h Ustaw RTC
02h Odczytaj czas RTC
03h Ustaw czas RTC
04h Odczytaj datę RTC
05h Ustaw datę RTC
06h Ustaw alarm RTC
07h Zresetuj alarm RTC
1Ah Usługi PCI — implementowane przez BIOSy obsługujące PCI 2.0 lub nowsze
AX Opis
B101h Kontrola instalacji PCI
B102h Znajdź urządzenie PCI
B103h Znajdź kod klasy PCI
B106h Operacje specyficzne dla magistrali PCI
B108h Przeczytaj bajt konfiguracji
B109h Przeczytaj słowo konfiguracyjne
B10Ah Przeczytaj konfigurację Dword
B10Bh Zapisz bajt konfiguracji
B10Ch Zapisz słowo konfiguracyjne
B10Dh Zapisz konfigurację Dword
B10Eh Uzyskaj rutynowe informacje o IRQ
B10Fh Ustaw przerwanie PCI
1Bh Ctrl-Break obsługi - nazywany przez INT 09kiedy Ctrl Przerwa został naciśnięty
1Ch Obsługa taktu timera - wywoływana przez INT 08
1Dh Nie nazywać się; po prostu wskaźnik do VPT (Tabela parametrów wideo), która zawiera dane dotyczące trybów wideo
1Eh Nie nazywać się; po prostu wskaźnik do DPT (Tabela parametrów dyskietek), zawierający różne informacje dotyczące napędów dyskietek
1Fh Nie do nazwania; po prostu wskaźnik do VGCT (Video Graphics Character Table), który zawiera dane dla znaków ASCII 80hdoFFh
41h Wskaźnik adresu: FDPT = Tabela parametrów dysku stałego (1. dysk twardy)
46h Wskaźnik adresu: FDPT = Fixed Disk Parameter Table (drugi dysk twardy)
4Ah Wywoływany przez RTC w celu alarmu

INT 18h: wykonaj BASIC

INT 18htradycyjnie przeskoczyłem do implementacji Cassette BASIC (dostarczonej przez Microsoft) przechowywanej w Option ROM-ach . To wywołanie jest zwykle wywoływane, jeśli system BIOS nie może zidentyfikować żadnych woluminów dysku startowego podczas uruchamiania.

W czasie, gdy oryginalny IBM PC (maszyna IBM typ 5150) został wydany w 1981 roku, BASIC w pamięci ROM był kluczową cechą. Współczesne popularne komputery osobiste, takie jak Commodore 64 i linia Apple II, również miały w pamięci ROM Microsoft Cassette BASIC (chociaż Commodore zmienił nazwę ich licencjonowanej wersji na Commodore BASIC), więc w znacznej części zamierzonego rynku komputery IBM PC potrzebowały BASIC do konkurowania. Podobnie jak w przypadku innych systemów, ROM BASIC IBM PC służył jako prymitywny bezdyskowy system operacyjny, pozwalający użytkownikowi ładować, zapisywać i uruchamiać programy, a także pisać i udoskonalać je. (Oryginalny IBM PC był również jedynym modelem PC od IBM, który, podobnie jak jego dwaj konkurenci, zawierał interfejs kasetowy. Podstawowy model IBM PC miał tylko 16 KiB pamięci RAM i nie miał żadnych napędów dyskowych [ żadnego rodzaju ], więc kaseta interfejs i BASIC w pamięci ROM były niezbędne, aby model podstawowy był użyteczny. IBM PC z mniej niż 32 KiB pamięci RAM nie jest w stanie uruchomić się z dysku. Spośród pięciu układów 8 KiB ROM w oryginalnym IBM PC, łącznie 40 KiB, cztery zawierają BASIC i tylko jeden zawiera BIOS; gdy zainstalowane jest tylko 16 KiB RAM, ROM BASIC stanowi ponad połowę całkowitej pamięci systemowej [dokładnie 4/7].)

W miarę upływu czasu BASIC nie był już dostarczany na wszystkich komputerach, przerwanie to po prostu wyświetlało komunikat o błędzie wskazujący, że nie znaleziono woluminu startowego (słynne „No ROM BASIC” lub bardziej objaśniające komunikaty w późniejszych wersjach BIOS-u); w innych wersjach BIOS-u poprosi użytkownika o włożenie woluminu startowego i naciśnięcie klawisza, a następnie po naciśnięciu klawisza pętla z powrotem do programu ładującego (INT 19h) w celu ponownego uruchomienia systemu.

Rainbow 100 B firmy Digital INT 18hnazywał swój BIOS, który był niekompatybilny z BIOSem IBM. Turbo Pascal , Turbo C i Turbo C++ zmieniły przeznaczenie INT 18 na alokację pamięci i stronicowanie. Inne programy również ponownie wykorzystały ten wektor do własnych celów.

Haki BIOS

DOS

W systemach DOS, IO.SYS lub IBMBIO.COM przechwytuje przerwanie INT 13 w celu wykrywania zmiany dyskietki, śledzenia wywołań formatowania, korygowania błędów granic DMA i obchodzenia problemów w BIOS-ie ROM IBM „01/10/84” z kodem modelu 0xFC przed pierwsze połączenie.

Omijanie BIOS-u

Wiele nowoczesnych systemów operacyjnych (takich jak Linux i Windows NT ) omija wywołania przerwań BIOS po uruchomieniu, jądro systemu operacyjnego przełącza procesor w tryb chroniony lub tryb długi podczas uruchamiania, preferując używanie własnych programów (takich jak sterowniki jądra ) do kontroli dołączony sprzęt bezpośrednio. Powodem tego było przede wszystkim to, że te systemy operacyjne uruchamiają procesor w trybie chronionym lub trybie długim, podczas gdy wywoływanie wywołania przerwania BIOS wymaga przełączenia na tryb rzeczywisty lub tryb nierzeczywisty lub użycie trybu wirtualnego 8086 . Tryb rzeczywisty, tryb nierzeczywisty i tryb wirtualny 8086 są wolne. Istnieją jednak również poważne powody bezpieczeństwa, aby nie przełączać się w tryb rzeczywisty, a kod BIOS trybu rzeczywistego ma ograniczenia zarówno pod względem funkcjonalności, jak i szybkości, które motywują projektantów systemów operacyjnych do znalezienia dla niego zamiennika. W rzeczywistości ograniczenia szybkości BIOS-u sprawiły, że nawet w erze DOSu programy obeszły go w celu uniknięcia ograniczeń wydajności, zwłaszcza w przypadku wyświetlania grafiki wideo i szybkiej komunikacji szeregowej. Problemy z funkcjonalnością BIOS-u obejmują ograniczenia w zakresie zdefiniowanych funkcji, niespójność w podzbiorach tych funkcji obsługiwanych na różnych komputerach oraz różnice w jakości BIOS-ów (tj. niektóre BIOS-y są kompletne i niezawodne, inne są skrócone i zawierają błędy). Biorąc sprawy w swoje ręce i unikając polegania na BIOS-ie, twórcy systemów operacyjnych mogą wyeliminować niektóre zagrożenia i komplikacje, jakie napotykają przy pisaniu i wspieraniu oprogramowania systemowego. Z drugiej strony, robiąc to, ci programiści stają się odpowiedzialni za dostarczanie oprogramowania sterowników „bare-metal” dla każdego innego systemu lub urządzenia peryferyjnego, z którym zamierzają współpracować z ich systemem operacyjnym (lub za nakłonienie producentów sprzętu do dostarczenia tych sterowników). Powinno więc być oczywiste, że kompaktowe systemy operacyjne opracowane przy niewielkich budżetach mają tendencję do intensywnego używania BIOS-u, podczas gdy duże systemy operacyjne budowane przez ogromne grupy inżynierów oprogramowania z dużymi budżetami częściej wybierałyby pisanie własnych sterowników zamiast korzystania z BIOS-u — to znaczy , nawet bez uwzględnienia problemów ze zgodnością systemu BIOS i trybu chronionego.

Zobacz też

Bibliografia