Wywołanie przerwania systemu BIOS

Wywołania przerwań systemu BIOS to funkcja używana przez systemy operacyjne i aplikacje do wywoływania funkcji oprogramowania układowego podstawowego systemu wejścia/wyjścia 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, głównie 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, które wywołują BIOS, albo muszą działać w trybie rzeczywistym, albo muszą przełączyć się z trybu chronionego do trybu rzeczywistego przed wywołaniem BIOS-u, a następnie przełączeniem z powrotem. Z tego powodu nowoczesne systemy operacyjne , które używają procesora w trybie chronionym lub długim , generalnie nie używają wywołań przerwań systemu BIOS do obsługi funkcji systemowych, chociaż używają wywołań przerwań systemu BIOS do sondowania i inicjowania sprzętu podczas uruchamiania . Tryb rzeczywisty ma ograniczenie pamięci do 1 MB, nowoczesne programy ładujące (np. GRUB2 , Windows Boot Manager ) używają trybu nierzeczywistego lub trybu 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 programowe sterują fizycznym sprzętem (ekranem, dyskiem, klawiaturą itp.) od momentu włączenia zasilania. W komputerze PC 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ętowego lub w przypadku krytycznej awarii oprogramowania (potrójny błąd ) powoduje, że obwód płyty głównej automatycznie uruchamia reset sprzętowy. BIOS testuje sprzęt i inicjuje jego stan; wyszukuje, ładuje i uruchamia program rozruchowy (zwykle program ładujący system operacyjny i historyczną pamięć ROM BASIC ); i zapewnia podstawową kontrolę sprzętu nad oprogramowaniem działającym na maszynie, którym zwykle jest system operacyjny (z aplikacjami), ale może to być bezpośrednio uruchamiana pojedyncza aplikacja.

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 używać BIOS-u, czy nie, w zależności od sprzętu i urządzeń peryferyjnych. IBM zdecydowanie zachęcał do tworzenia „dobrze zachowujących się” programów, które uzyskiwały dostęp do sprzętu tylko za pośrednictwem wywołań BIOS INT (i wywołań serwisowych DOS), aby zapewnić kompatybilność oprogramowania z obecnymi i przyszłymi modelami komputerów PC wyposażonymi w inny sprzęt peryferyjny, ale IBM rozumiał, że dla niektórych programistów i klientów sprzętu, wymagana była możliwość bezpośredniego sterowania sprzętem przez oprogramowanie użytkownika. Po części wynikało to z faktu, że znaczna część wszystkich cech i funkcji sprzętowych nie była udostępniana przez usługi systemu BIOS. Dla dwóch przykładów (spośród wielu), adaptery MDA i CGA są zdolne do przewijania sprzętowego, a adapter szeregowy PC może przesyłać dane sterowane przerwaniami, ale IBM BIOS nie obsługuje żadnej z tych przydatnych funkcji technicznych.

Obecnie BIOS w nowym komputerze nadal obsługuje większość, jeśli nie wszystkie, wywołań funkcji przerwań BIOS zdefiniowanych przez IBM dla IBM AT (wprowadzony w 1984 r.), wraz z wieloma nowszymi, a także rozszerzeniami niektórych oryginałów ( 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 PC, zakładając, że większa szybkość wykonywania jest akceptowalna (co zwykle dotyczy wszystkich gier z wyjątkiem gier korzystających z taktowanie oparte na procesorze). Pomimo znacznych ograniczeń usług dostępnych za pośrednictwem przerwań systemu BIOS, okazały się one niezwykle przydatne i odporne na zmiany technologiczne.

Cel wywołań systemu BIOS

Wywołania przerwań systemu BIOS wykonują sterowanie sprzętowe lub funkcje wejścia/wyjścia żądane przez program, zwracają informacje systemowe do programu lub wykonują jedno i drugie. Kluczowym elementem celu wywołań systemu BIOS jest abstrakcja — wywołania systemu BIOS wykonują ogólnie zdefiniowane funkcje, a szczegółowe informacje na temat sposobu wykonywania tych funkcji na określonym sprzęcie systemu są zawarte w systemie BIOS 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 inny zastrzeżony kontroler innej marki). Program musi tylko zidentyfikować zdefiniowany przez BIOS numer dysku, do którego chce uzyskać dostęp, oraz adres sektora, który musi odczytać lub zapisać, a BIOS zajmie się przełożeniem tego ogólnego żądania na określoną sekwencję wymaganych podstawowych operacji 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 typ dysku twardego (lub karty graficznej, interfejsu portu lub urządzenia peryferyjnego z zegarem czasu rzeczywistego), do którego może potrzebować dostępu. Ułatwia to zarówno programowanie systemów operacyjnych i aplikacji, jak i zmniejsza rozmiary programów, redukując powielanie kodu programu, ponieważ funkcje zawarte w systemie BIOS nie muszą być uwzględniane w każdym programie, który tego potrzebuje; Zamiast tego w programach są zawarte stosunkowo krótkie wywołania BIOS-u. (W systemach operacyjnych, w których nie jest używany system BIOS, zgłoszenia serwisowe dostarczane przez sam system operacyjny zasadniczo spełniają tę samą funkcję i mają ten sam 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 konieczności zachowania dokładnej zgodności sprzętu ze starymi systemami podczas projektowania nowych systemów, w celu zachowania zgodności z istniejącym oprogramowaniem. Na przykład sprzętowa klawiatura w IBM PCjr działa zupełnie inaczej niż sprzętowa klawiatura we wcześniejszych modelach IBM PC, ale w programach, które używają klawiatury tylko przez BIOS, ta różnica jest prawie niewidoczna. (Jako dobry przykład drugiej strony tego problemu, znaczna część programów komputerowych używanych w czasie wprowadzenia PCjr nie korzystała wyłącznie z klawiatury w systemie 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 użyć sprzętu klawiatury, będą działać poprawnie na komputerze PCjr, ale wszystkie programy, które używają tylko usług klawiatury systemu BIOS , będą działać .)

Oprócz zapewniania dostępu do funkcji sprzętowych system 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 TTY z automatycznym zawijaniem wierszy i interpretacją podstawowych znaków sterujących, takich jak powrót karetki i nowy wiersz, 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) ani interpretować znaków sterujących. Inny przykład: interfejs klawiatury systemu BIOS interpretuje wiele naciśnięć klawiszy i kombinacji klawiszy, aby śledzić różne stany przesunięcia (lewy i prawy Shift , Ctrl i Alt ), wywołać usługę drukowania ekranu po naciśnięciu klawiszy Shift + PrtScrn , aby ponownie uruchomić komputer system po naciśnięciu Ctrl + Alt + Del , aby śledzić stany blokady (Caps Lock, Num Lock i Scroll Lock) oraz, w maszynach klasy AT, kontrolować odpowiednie kontrolki stanu blokady na klawiaturze, oraz do wykonywania innych podobnych funkcji interpretacyjnych i zarządzania dla klawiatury. Natomiast zwykłe możliwości standardowego sprzętu komputerowego PC i klawiatury PC-AT ograniczają się do raportowania do systemu każdego prymitywnego zdarzenia naciśnięcia lub zwolnienia indywidualnego klawisza (tj. lub odwrotnie), wykonanie polecenia resetowania i autotestu klawiatury oraz, w przypadku klawiatur klasy AT, wykonanie polecenia z systemu hosta w celu ustawienia bezwzględnych stanów wskaźników stanu blokady (diod LED).

Wywoływanie systemu BIOS: przerwania oprogramowania systemu BIOS

Systemy operacyjne i inne oprogramowanie komunikują się z oprogramowaniem BIOS w celu sterowania zainstalowanym sprzętem za pośrednictwem przerwań programowych. Przerwanie programowe jest specyficzną odmianą ogólnej koncepcji przerwania. Przerwanie to mechanizm, za pomocą którego można nakazać procesorowi zaprzestanie wykonywania programu głównego i zamiast tego natychmiastowe wykonanie specjalnego programu, zwanego procedurą obsługi przerwań (Interrupt Service Routine, ISR). Po zakończeniu ISR CPU kontynuuje program główny. W procesorach x86, gdy wystąpi przerwanie, ISR do wywołania jest znajdowany przez wyszukanie go w tabeli adresów punktów początkowych ISR (zwanej „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 jest po prostu przerwaniem wyzwalanym przez polecenie programowe; 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, a jedynie 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, z których każda ma własny numer przerwania, a większość kategorii zawiera podkategorie, zwane „funkcjami” i identyfikowane przez „numery funkcji”. Klient BIOS przekazuje większość informacji do BIOS-u w rejestrach procesora i odbiera większość informacji z powrotem w ten sam sposób, ale dane zbyt duże, aby zmieściły się w rejestrach, takie jak tabele parametrów kontrolnych lub dane sektora dysku do transferu dysku, są przekazywane przez przydzielenie bufora (tj. trochę miejsca) w pamięci i przekazanie adresu bufora w rejestrach. (Czasami w strukturze danych w pamięci może być przekazywanych wiele adresów elementów danych w pamięci, z adresem tej struktury przekazywanym do systemu BIOS w rejestrach). Numer przerwania jest określany jako parametr instrukcji przerwania programowego (w asemblerze Intela , instrukcja „INT”), a numer funkcji jest określony w rejestrze AH; to znaczy wywołujący ustawia rejestr AH na numer żądanej funkcji. Ogólnie rzecz biorąc, usługi BIOS odpowiadające każdemu numerowi przerwania działają niezależnie od siebie, ale funkcje w obrębie jednej usługi przerwania są obsługiwane przez ten sam program BIOS i nie są niezależne. (Ten ostatni punkt dotyczy ponownego wejścia ).

Oprogramowanie BIOS zwykle zwraca wywołującemu kod 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 nieprzetworzonych sektorów dysku (maksimum, które zmieści się w jednym segmencie pamięci w trybie rzeczywistym). System BIOS był wielokrotnie rozszerzany i ulepszany przez wiele różnych podmiotów korporacyjnych i niestety wynikiem tej ewolucji jest to, że nie wszystkie funkcje systemu BIOS, które można nazwać, wykorzystują spójne konwencje formatowania i przesyłania danych lub raportowania wyników. Niektóre funkcje systemu BIOS zgłaszają szczegółowe informacje o stanie, podczas gdy inne mogą nawet nie informować o powodzeniu lub niepowodzeniu, ale po prostu powracają po cichu, pozostawiając dzwoniącemu założenie sukcesu (lub przetestowanie wyniku w inny sposób). Czasami może być również trudno określić, 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 prawidłowych numerów funkcji z nieprawidłowymi wartościami kluczowych parametrów — szczególnie w przypadku wczesnej wersji systemu IBM BIOS — BIOS może nic nie zrobić i powrócić bez kodu błędu; wtedy [niewygodna, ale nieunikniona] odpowiedzialność spoczywa na dzwoniącego, aby uniknąć takiego przypadku, nie wykonując takich połączeń, lub pozytywnie przetestować oczekiwany efekt wywołania, zamiast zakładać, że wywołanie było skuteczne.Ponieważ system BIOS ewoluował w wielu krokach w swojej historii, funkcja, która jest ważna w jedna wersja systemu BIOS od określonego dostawcy może nie być ważna we wcześniejszej lub rozbieżnej wersji systemu BIOS od tego samego dostawcy lub w wersji systemu BIOS — o dowolnym względnym wieku — od innego dostawcy).

Ponieważ wywołania przerwań systemu BIOS wykorzystują przekazywanie parametrów na podstawie rejestrów procesora, są one zorientowane na wykonywanie z języka asemblera i nie mogą być wykonywane bezpośrednio z większości języków wysokiego poziomu (HLL). Jednak język wysokiego poziomu może udostępniać bibliotekę procedur opakowujących, które tłumaczą parametry z postaci (zwykle opartej na stosie) używanej przez język wysokiego poziomu na postać opartą na rejestrach wymaganą przez BIOS, a następnie z powrotem na konwencję wywoływania HLL po BIOS powraca. W niektórych wariantach C wywołania BIOS-u mogą być wykonywane przy użyciu wbudowanego języka asemblera w module C. (Obsługa wbudowanego języka asemblera nie jest częścią standardu ANSI C, ale jest rozszerzeniem języka, dlatego moduły C korzystające z wbudowanego języka asemblera są mniej przenośne niż moduły C w czystym standardzie ANSI).

Wywołanie przerwania

Wywołanie przerwania można wykonać za pomocą instrukcji asemblera INT x86 . Na przykład, aby wyświetlić znak na ekranie za pomocą przerwania BIOS 0x10, można wykonać następujące instrukcje asemblera x86:

       
        
           ruch  ah  ,  0x0e  ; numer funkcji = 0Eh : Wyświetl   ruch  znaku  ,  '!'  ; AL = kod znaku do wyświetlenia   int  0x10  ; zadzwoń pod numer INT 10h, serwis wideo systemu BIOS  

Tablica przerwań

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

BIOS wykorzystuje również niektóre przerwania do przekazywania przerwań sprzętowych do programów, które zdecydują się je odbierać lub do kierowania komunikatów na własny użytek. Poniższa tabela zawiera tylko te przerwania systemu BIOS, które mają być wywoływane przez programy (przy użyciu instrukcji przerwania programowego języka asemblera „INT”) w celu żądania usług lub informacji.

Wektor przerwań Opis
05h Wykonywana po naciśnięciu klawisza Shift- Print screen , a także gdy instrukcja BOUND wykryje błąd związany.
08h To jest przerwanie zegara czasu rzeczywistego. Wystrzeliwuje 18,2 razy na sekundę. Podczas tego przerwania BIOS zwiększa licznik czasu dnia.
09h To jest przerwanie klawiatury. Zwykle jest to wyzwalane po naciśnięciu klawisza na klawiaturze.
10 godz 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 pozycję pióra świetlnego
05h Ustaw wyświetlaną stronę
06h Wyczyść/przewiń ekran w górę
07h Wyczyść/przewiń ekran w dół
08h Odczytywanie znaku i atrybutu przy kursorze
09h Napisz znak i atrybut w kursorze
0 Ah Napisz znak na kursorze
0Bh Ustaw kolor obramowania
0Ch Napisz piksel graficzny
0Dh Przeczytaj piksel graficzny
0Ech Napisz znak w trybie TTY
0Ph Uzyskaj tryb wideo
10 godz Ustaw rejestry palet (EGA, VGA, SVGA)
11 godz Generator znaków (EGA, VGA, SVGA)
12:00 Alternatywne funkcje wyboru (EGA, VGA, SVGA)
13 godz Napisz ciąg
1 Ah Uzyskaj lub ustaw kod kombinacji wyświetlania (VGA, SVGA)
1Bh Uzyskaj informacje o funkcjonalności (VGA, SVGA)
1 rozdz Zapisz lub przywróć stan wideo (VGA, SVGA)
4Fh rozszerzeń VESA BIOS (SVGA)
11 godz Zwraca listę wyposażenia
12:00 Zwróć konwencjonalny rozmiar pamięci
13 godz Usługi dyskowe niskiego poziomu
AH Opis
00h Zresetuj dyski
01h Sprawdź stan dysku
02h Przeczytaj Sektory
03h Napisz sektory
04h Sprawdź sektory
05h Formatuj ścieżkę
08h Uzyskaj parametry napędu
09h Zainicjuj parametry dysku stałego
0Ch Szukaj określonej ścieżki
0Dh Zresetuj kontroler dysku stałego
15 godz Pobierz typ dysku
16 godz Uzyskaj status zmiany nośnika napędu dyskietek
17:00 Ustaw typ dysku
18h Ustaw typ nośnika napędu dyskietek
41h Kontrola instalacji rozszerzonego dysku (EDD).
42h Rozszerzone sektory odczytu
43 godz Rozszerzone sektory zapisu
44h Rozszerzona weryfikacja sektorów
45 godz Zablokuj/Odblokuj Dysk
46 godz Wysuń nośnik
47 godz Wyszukiwanie rozszerzone
48h Rozszerzone parametry pobierania dysku
49 godz Rozszerzony Uzyskaj stan zmiany multimediów
4Ech Konfiguracja sprzętu rozszerzonego zestawu
14h Usługi portu szeregowego
AH Opis
00h Inicjalizacja portu szeregowego
01h Prześlij znak
02h Odbierz postać
03h Status
15 godz Różne usługi systemowe
AH glin Opis
00h Włączanie silnika 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 Zapisywanie bloków danych na kasecie (tylko IBM PC/PCjr)
4Fh Przechwytywanie klawiatury
83 godz Zdarzenie Oczekiwanie
84 godz Odczyt joysticka (BIOSy od 1986 r.)
85 godz Wywołanie klawisza Sysreq
86 godz Czekać
87 godz Przenieś blok
88 godz Uzyskaj rozszerzony rozmiar pamięci
89 godz Przełącz na tryb chroniony
C0h Pobierz parametry systemowe
C1 godz Uzyskaj rozszerzony segment obszaru danych systemu BIOS
C2h Funkcje urządzeń wskazujących
C3h Funkcje zegara Watchdog — 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 wielkości pamięci powyżej 64 Mb.
E8h 20h Mapa adresów systemu zapytań. Informacje zwrócone z E820 zastępują informacje zwrócone ze starszych interfejsów AX=E801h i AH=88h .
16 godz Usługi klawiatury
AH Opis
00h Przeczytaj charakter
01h Przeczytaj stan wejścia
02h Przeczytaj stan przesunięcia klawiatury
05h Przechowuj naciśnięcia klawiszy w buforze klawiatury
10 godz Przeczytaj rozszerzoną postać
11 godz Przeczytaj stan wejścia rozszerzony
12:00 Przeczytaj przedłużony stan przesunięcia klawiatury
17:00 Usługi drukarskie
AH Opis
00h Wydrukuj znak do drukarki
01h Zainicjuj drukarkę
02h Sprawdź stan drukarki
18h Execute Cassette BASIC : Na maszynach IBM do wczesnej linii PS/2 to przerwanie uruchomiłoby ROM Cassette BASIC. Klony nie miały tej funkcji, a różne maszyny/systemy BIOS wykonywałyby różne działania, gdyby wykonano 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 to przerwanie będzie traktowane przez BIOS jako sygnał od bootloadera, że ​​nie wykonał on swojego zadania. BIOS może następnie podjąć odpowiednie kolejne kroki.
19h Po teście 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 upewnić się, że przerwania sprzętowe lub operacje DMA nie spowodują zawieszenia lub awarii systemu podczas ponownej inicjalizacji systemu przez system BIOS lub procesu rozruchu).
1 Ah Usługi zegara czasu rzeczywistego
AH Opis
00h Czytaj RTC
01h Ustaw zegar czasu rzeczywistego
02h Odczyt czasu RTC
03h Ustaw czas RTC
04h Odczyt daty RTC
05h Ustaw datę RTC
06h Ustaw alarm RTC
07h Zresetuj alarm RTC
1 Ah PCI — realizowane przez BIOS-y obsługujące PCI 2.0 lub nowsze
TOPÓR Opis
B101h Kontrola instalacji PCI
B102h Znajdź urządzenie PCI
B103h Znajdź kod klasy PCI
B106h Operacje specyficzne dla magistrali PCI
B108h Odczyt bajtu konfiguracji
B109h Przeczytaj słowo konfiguracyjne
B10Ah Przeczytaj konfigurację Dword
B10Bh Zapisz bajt konfiguracji
B10Ch Napisz słowo konfiguracyjne
B10Dh Zapisz konfigurację Dword
B10 Ech Uzyskaj informacje o rutynowych przerwaniach IRQ
B10Fh Ustaw PCI IRQ
1Bh Program obsługi Ctrl-Break - wywoływany przez INT 09 po naciśnięciu Ctrl- Break
1 rozdz Program obsługi taktów zegara — wywoływany przez INT 08
1Dh Nie być nazywanym; po prostu wskaźnik do VPT (Video Parameter Table), która zawiera dane o trybach wideo
1 Ech Nie być nazywanym; po prostu wskaźnik do DPT (Diskette Parameter Table), zawierającej różnorodne informacje dotyczące napędów dyskietek
1Fh Nie być nazywanym; po prostu wskaźnik do VGCT (Video Graphics Character Table), który zawiera dane dla znaków ASCII od 80h do FFh
41h Wskaźnik adresu: FDPT = Tabela parametrów dysku stałego (1. dysk twardy)
46 godz Wskaźnik adresu: FDPT = Tabela parametrów dysku stałego (drugi dysk twardy)
4 Ah Wywołany przez RTC dla alarmu

INT 18h : wykonaj BASIC

INT 18h tradycyjnie przeskakiwał do implementacji Cassette BASIC (dostarczonej przez Microsoft) przechowywanej w Option ROM . To wywołanie byłoby zwykle wywoływane, gdyby system BIOS nie był w stanie zidentyfikować żadnych rozruchowych woluminów dysku podczas uruchamiania.

W czasie, gdy w 1981 roku wypuszczono oryginalny IBM PC (maszyna IBM 5150), BASIC w pamięci ROM był kluczową funkcją. Współczesne popularne komputery osobiste, takie jak Commodore 64 i linia Apple II, również miały Microsoft Cassette BASIC w pamięci ROM (chociaż Commodore zmieniło nazwę swojej licencjonowanej wersji Commodore BASIC), więc na znacznej części docelowego rynku IBM PC potrzebował BASIC do konkurowania. Podobnie jak w tych innych systemach, ROM BASIC komputera IBM PC służył jako prymitywny bezdyskowy system operacyjny, umożliwiający użytkownikowi ładowanie, zapisywanie i uruchamianie programów, a także pisanie i udoskonalanie ich. (Oryginalny IBM PC był także jedynym modelem komputera PC firmy IBM, który, podobnie jak jego dwaj wspomniani konkurenci, zawierał sprzęt z interfejsem kasetowym. Podstawowy model IBM PC miał tylko 16 KiB pamięci RAM i nie miał dysków [ż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. Z pięciu układów 8 KiB ROM w oryginalnym IBM PC, łącznie 40 KiB, cztery zawierają BASIC i tylko jeden zawiera BIOS; kiedy zainstalowano tylko 16 KiB RAM, ROM BASIC stanowi ponad połowę całkowitej pamięci systemowej [4/7, mówiąc dokładniej].)

W miarę upływu czasu i BASIC nie był już dostarczany na wszystkich komputerach PC, to przerwanie po prostu wyświetlałoby komunikat o błędzie wskazujący, że nie znaleziono woluminu startowego (słynny „Brak ROM BASIC” lub bardziej wyjaśniające komunikaty w późniejszych wersjach BIOS-u); w innych wersjach BIOS-u monitowałby użytkownika o włożenie woluminu startowego i naciśnięcie klawisza, a następnie po naciśnięciu klawisza przez użytkownika zapętliłby się z powrotem do programu ładującego (INT 19h), aby spróbować ponownie uruchomić.

Digital Rainbow 100 B użył INT 18h do wywołania swojego BIOS-u, który był niekompatybilny z BIOS-em IBM. Turbo Pascal , Turbo C i Turbo C++ zmieniły przeznaczenie INT 18 do alokacji pamięci i stronicowania. Inne programy również ponownie wykorzystywały ten wektor do własnych celów.

Haki BIOS-u

DOS

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

Omijanie BIOS-u

Wiele nowoczesnych systemów operacyjnych (takich jak Linux i Windows ) w ogóle nie używa żadnych wywołań przerwań BIOS-u po uruchomieniu, zamiast tego wybiera bezpośredni interfejs ze sprzętem. Aby to zrobić, polegają na sterownikach , które są częścią samego jądra systemu operacyjnego , są dostarczane wraz z systemem operacyjnym lub są dostarczane przez dostawców sprzętu.

Istnieje kilka powodów tej praktyki. Najbardziej znaczące jest to, że nowoczesne systemy operacyjne działają z procesorem w chronionym (lub długim ), podczas gdy kod BIOS będzie wykonywany tylko w trybie rzeczywistym . Oznacza to, że gdyby system operacyjny działający w trybie chronionym chciał wykonać wywołanie BIOS-u, musiałby najpierw przełączyć się w tryb rzeczywisty, następnie wykonać wywołanie i poczekać na jego powrót, a na końcu przełączyć się z powrotem do trybu chronionego. Byłoby to strasznie powolne i nieefektywne. Kod, który działa w trybie rzeczywistym (w tym BIOS) jest ograniczony do dostępu do nieco ponad 1 MiB pamięci, ze względu na użycie 16-bitowego segmentowanego adresowania pamięci . Ponadto BIOS zazwyczaj nie jest najszybszym sposobem na wykonanie określonego zadania. W rzeczywistości ograniczenia prędkości systemu BIOS sprawiły, że nawet w erze DOS programy często go omijały, aby uniknąć ograniczeń wydajności, zwłaszcza w przypadku wyświetlania grafiki wideo i szybkiej komunikacji szeregowej.

Poza powyższymi czynnikami problemy z funkcjonalnością systemu BIOS obejmują ograniczenia w zakresie zdefiniowanych funkcji, niespójność podzbiorów tych funkcji obsługiwanych na różnych komputerach oraz różnice w jakości systemów BIOS (tj. niektóre systemy BIOS są kompletne i niezawodne, inne są skrócone i powozik). Biorąc sprawy w swoje ręce i unikając polegania na systemie BIOS, programiści systemów operacyjnych mogą wyeliminować niektóre zagrożenia i komplikacje, z jakimi borykają się przy pisaniu i wspieraniu oprogramowania systemowego. Z drugiej strony, robiąc to, 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ą pracować w swoim systemie operacyjnym (lub za nakłanianie producentów sprzętu do dostarczania tych sterowników).

Dlatego powinno być oczywiste, że kompaktowe systemy operacyjne opracowane przy niewielkich budżetach będą miały tendencję do intensywnego korzystania z systemu BIOS, podczas gdy duże systemy operacyjne tworzone przez ogromne grupy inżynierów oprogramowania z dużymi budżetami częściej decydowałyby się na pisanie własnych sterowników zamiast korzystania z systemu BIOS — to znaczy , nawet bez uwzględnienia problemów ze zgodnością systemu BIOS i trybu chronionego.

Zobacz też