Úvod k BIOSu, Přehled sys. přerušení, Přehled služeb BIOSu, Hardwarová přerušení, Konfigurace BIOSu, Uprade BIOSu

HW Přerušení

Tyto přerušení (služby Biosu) jsou volána vždy, když dojde v hardwaru počítače k události, kterou je třeba obsloužit programem na vektoru tohoto přerušení.

Přeplnění při dělení-INT 00h

Toto přerušení je rezervované pro mikroprocesor. Je volané vždy, pokud se při provádění instrukcí div nebo idiv výsledek nevejde (dojde k přeplnění) do prostoru (registru) pro uložení výsledku nebo nastalo dělení nulou. Obslužná rutina provede výpis hlášení DIVISION OVERFLOW s následným zastavením činnosti počítače.

Přerušení při krokování-INT 01h

Zase se jedná o přerušení rezervované pro mikroprocesor. K jeho volání dojde po každé provedené instrukci pokud je nastaven příznak TF v registru příznaků. Při provádění obslužné rutiny je příznak TF nulován a po jejím ukončení je nastaven na původní hodnotu. Standardně obsahuje obsluha přerušení pouze instrukci IRET. Přerušení je výhodné použit k ladicím účelům, kde obslunou rutinou je monitor zobrazující hodnoty registrů a zajímavých oblastí paměti, ale je třeba nejprve nastavit na tento monitor vektor přerušení.

Nemaskovatelné přerušení-INT 02h

Pokud je toto přerušení volané hardwarově pomocí signálu NMI na mikroprocesoru nelze jej maskovat instrukcí CLI. Z tohoto důvodu je používáno k obsluze událostí, které vyžadují obsluhu okamžitě a vždy (např. výpadek napětí). Obvykle se používá jako obsluná rutina chyby parity paměti (provede se pokus o opakovaný přístup a při opakované chybě dojde k zastavení systému) nebo pokud je připojen numerický koprocesor, je přerušení využito k obsluze jeho chyb.

Přerušení BREAKPOINTU-INT 03h

Toto přerušení je voláno jednak dvoubajtovou instrukcí INT a jednak jednobytovou instrukcí INT. Toho se využívá k ladění programů, kde se na kontrolní místo v paměti umístí tzv. BREAKPOINT (jednobytové INT). Pokud má být toto přerušení použito v ladicím monitoru, je třeba nastavit vektor tohoto přerušení na adresu ladicího monitoru, protože standardně rutina obsluhy přerušení obsahuje instrukci IRET.

Přerušení při plnění-INT 04h

Pokud je příznak OF v registru příznaků nastaven, je moné přerušení volat instrukcí INTO. Toho lze použít v uivatelských programech a testovat zda dolo k přetečení při provádění aritmetických instrukcí a provést příslušnou odezvu. Standardně obsahuje obsluná rutina pouze instrukci IRET.

Tisk obrazovky (PRINT SCREEN)-INT 05h

Pokud je na klávesnici stisknuto tlačítko Print Screen dojde k volání tohoto přerušení, které slouží k vytisknutí kopie obrazovky na tiskárně. Přerušení lze samozřejmě volat i programově instrukcí INT 05. Využití přerušení může přináet problémy na počítačích AT, protože toto přerušení je generováno instrukcí BOUND a podle doporučení Intelu jde tedy o přerušení rezervované a jakékoli jeho jiné použití pak předpokládá, že v uživatelském sowtvaru není instrukce BOUND použita.

Přerušení časovače-INT 08h

Hardwarový požadavek o obsluhu přerušení IRQ0 volá toto přerušení. Požadavek je generován obvodem čítače-časovače, kanálem 0, pravidelně co 55 ms, neboli s frekvecí18,2 Hz a slouží jako hodiny reálného času.

Bios této obslužné rutiny nastavuje hodnotu hodin reálného času na adrese 46Ch a modifikuje hodnotu na adrese 440h, tak to je zabezpečeno vypnutí motoru disketové mechaniky po skončení I/O operace. Pokud se toto přerušení přesměruje, je třeba zabezpečit aby řadič přerušení byl informován o tom že rutina přerušení skončila. To se zajistí instrukcemi:

MOV AL,20h
OUT 20h,AL
Takto se zašle příkaz nazvaný EOI (End Of Interrupt). Přerušení s tímto kódem je také generováno při detekci výpadku mikroprocesoru INTEL 80286 v módu virtuální paměti, ale v tomto případě se používá definované tabulky vektorů přerušení, která je umístěná na libovolné místo v paměti a ne standardní tabulky umístěné na adrese paměti 0, kterou používá Bios.

Přerušení klávesnice-INT 09h

Zase se jedná o přerušení generované hardwarem při poadavku o obsluhu přerušení IRQ1, které signalizuje e buffer klávesnice obsahuje znak. Obsluná rutina v Biosu tento znak jen je uloen v tzv. IBM SCAN kódu převede do jejího ASCII vyjádření a uloí do kruhového bufferu klávesnice na adrese 41Eh v paměti.

Opět pokud dojde k přesměrování tohoto vektoru přerušení je třeba zajistit opětovné regulérní nastavení portu klávesnice. K tomu můe slouit např. tento sled instrukcí :

IN AL,61h ;Zjisti hodnotu řídící linky
MOV AH,AL ;a uschovej ji
OR AL,80h ;nastav příznak povolení klávesnice
OUT 61h,AL ;a zapiš jej na řídící linku klávesnice
MOV AL,AH ;obnov původní hodnotu řídící linky klávesnice
OUT 61h,AL ;a zapiš ji pět
MOV AL,20h ;Nastav signál EOI řadiče přerušení
OUT 20h,AL ;
Znak z bufferu klávesnice se čte na portu 60h. Přerušení s tímto číslem je také generováno při chybě ochrany numerického koprocesoru INTEL80287 mikroprocesorem INTEL 80286 v módu chráněné virtuální paměti. Ale jako u předešlého přerušení se používá definované tabulky vektorů přerušení umístěné na libovolné místo v paměti.

Přerušení od portů(IRQ3-5,7) INT0Bh-0Dh,0Fh

Tato přerušení jsou generována jednotlivými vstupně výstupovími porty počítače jako požadavek na obsluhu vzniklé události na nich.

Přerušení řadiče disket(IRQ6)-INT 0Eh

Přerušení je generováno řadičem disket při dokončení každé diskové operace. Obslužná rutina nastavuje v případě potřeby příslušný bit proměnné Biosu na adrese 43Eh, který je užit rutinou INT 13h k určení toho, zda disková jednotka potřebuje před provedením požadované činnosti rekalibraci.