Rozšíření BIOS pro EGA/VGA
V této kapitole se seznámíme se službami EGA/VGA BIOS,
které nám umožní využívat specifické vlastnosti karet
EGA/VGA. Práce s těmito službami je naprosto principiálně
shodná jako s těmi předešlými. Vzhledem k tomu, že nově
poskytovaných služeb je opravdu mnoho a čísel služeb není
neomezené množství, došlo k tomu, že každá služba v sobě
zahrnuje několik podslužeb (budeme je nazývat funkce). Číslo
funkce se ukládá do registru AL nebo BL. K vyvolání vlastní
služby se opět používá INT 10h. Služby této části BIOS
můžeme rozdělit do tří hlavních skupin: služby pro práci
s barvami a paletami barev, služby pro obsluhu znakových sad
a služby zjišťující konfiguraci adaptéru.
Služba 10h - Nastavení registrů palety
======================================
Popis: Tato služba se používá ke změně jedné (nebo všech)
barev palety na jinou barvu a k nastavení barvy
rámečku. (Rámeček je plocha obrazovky na jejích
okrajích, kde se obvykle nic nezobrazuje.)
Poznámka: V šesnáctibarevných módech EGA/VGA je číslo registru
palety stejné jako číslo barvy. V kompatibilních módech
(CGA) určují registry 1-3 barvy palety 1 a registry 4-6
určují barvy palety 0. Pokud máte kartu EGA s 64K
paměti a použijete mód 10h, barvy jsou určeny
následujícím schématem:
Registr palety Čísla barev
-----------------------------------
0 0,2,8,10
1 1,3,9,11
4 4,6,12,14
7 5,7,13,15
Po každé inicializaci zobrazovacího režimu jsou hodnoty
registrů palety nastaveny na svojí původní hodnotu.
Pokud tedy používáte svoji paletu, musíte ji obnovit po
každé změně zobrazovacího režimu. Jinou možností je
učinit vaše hodnoty barev v paletě stálými. To
dosáhnete vytvořením vlastní tabulky parametrů
a nastavením ukazatele BIOS SAVE_PTR na ní. Formát této
parametrické tabulky je uveden v popisu ukládací
oblasti BIOS. Na kartě VGA můžete pomocí služby 12h
a její funkce 31h zakázat obnovu palety po resetu módu.
VGA má kromě standartních registrů palety také 256
registrů DAC (Digital to Analog Converter), které
určují výslednou barvu. Každý registr uchovává
18bitovou hodnotu. Z těchto 18 bitů přísluší vždy 6
každé ze tří barev - červené, zelené, modré (tzv. RGB
barevný model). Hodnota těchto šesti bitů udává
intenzitu příslušné barvy. Výsledným složením všech tří
základních barev dostaneme barvu výslednou, pro kterou
máme celkem 262144 (=218) možností.
Vstup: AH = 10h Číslo služby
AL = Číslo funkce
Funkce 00h - Nastavení jednoho registru palety
----------------------------------------------
Poznámka: Tato funkce může být použita i k nastavení
registrů kontroleru atributů.
Vstup: AH = 10h Číslo služby
AL = 00h Číslo funkce
BL = Číslo registru palety (00h - 0fh)
= Číslo registru atributů
10h Registr módu
11h Overscan color registr (barva rámečku)
12h Registr přístupu do bitových rovin
13h Registr určující posun obrazu doleva
14h Registr výběru barvy (pouze VGA)
BH = Hodnota nastavovaného registru
Funkce 01h - Nastavení barvy rámečku
------------------------------------
Poznámka: Nefunguje na EGA při 350 řádkových módech.
Vstup: AH = 10h Číslo služby
AL = 01h Číslo funkce
BH = Barva rámečku
Funkce 02h - Nastavení všech registrů palety
--------------------------------------------
Poznámka: Tato funkce vyžaduje, aby byla v paměti uložena
tabulka o délce 17 bytů. Prvních šestnáct byte obsahuje
hodnoty barev pro registry palety a 17. byte určuje
barvu rámečku.
Vstup: AH = 10h Číslo služby
AL = 02h Číslo funkce
ES = Segment obsahující tabulku
DX = Offset prvního byte v tabulce
Funkce 03h - Změna intenzity a blikání
--------------------------------------
Poznámka: Tato funkce určuje zda bit 3 nebo 4 atributu bude
určovat intenzitu barvy nebo blikání.
Vstup: AH = 10h Číslo služby
AL = 03h Číslo funkce
BL = 0 - povol intenzitu (zakaž blikání)
1 - povol blikání (zakaž intenzitu)
O tom jak je informace o barvě zakódována pro karty EGA
a CGA vypovídají následující tabulky.
CGA:
/-------------------------------\
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---+---+---+---+---+---+---+---|
| X | X | X | I | X | R | G | B |
\-------------------------------/
X - nepoužito
I - intenzita (případně blikání)
R, G, B - červená, zelená, modrá
a pro EGA:
/-------------------------------\
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---+---+---+---+---+---+---+---|
| X | X | R | G | B | R | G | B |
\-------------------------------/
Standardní nastavení registrů palety:
/--------------------------------------------\
| Barva | EGA | CGA |
| bity | 543210 | 543210 |
|--------------+-----------+-----------------|
| černá | 000000 | 000000 |
| modrá | 000001 | 000001 |
| zelená | 000010 | 000010 |
| tyrkysová | 000011 | 000011 |
| červená | 000100 | 000100 |
| fialová | 000101 | 000101 |
| hnědá | 010100 | 000110 |
| bílá | 000111 | 000111 |
| šedá | 111000 | 010000 |
| sv. modrá | 111001 | 010001 |
| sv. zelená | 111010 | 010010 |
| sv. tyrk. | 111011 | 010011 |
| sv. červená | 111100 | 010100 |
| sv. fialová | 111101 | 010101 |
| žlutá | 111110 | 010110 |
| bílá | 111111 | 010111 |
\--------------------------------------------/
pozn. Sv. samozřejmě znamená světle
Na VGA kartě obsahuje registr palety ukazetel do registru
DAC, ze kterého je teprve získána výsledná podoba barvy.
Funkce 07h - Zjištění obsahu jednoho registru palety - pouze VGA
----------------------------------------------------------------
Vstup: AH = 10h Číslo služby
AL = 07h Číslo funkce
BL = Číslo registru k přečtení
Výstup: Bude v registrech obsažen po zavolání služby
BH = Nastavení registru
Funkce 08h - Zjištění barvy rámečku - pouze VGA
-----------------------------------------------
Vstup: AH = 10h Číslo služby
AL = 07h Číslo funkce
Výstup: Bude v registrech obsažen po zavolání služby
BH = Barva rámečku
Funkce 09h - Načtení všech registrů palety - pouze VGA
------------------------------------------------------
Poznámka: Před voláním této funkce musíte v paměti vyhradit
17 byte. Do prvních šestnácti byte uloží funkce
registry palety a do 17. byte uloží barvu rámečku.
Vstup: AH = 10h Číslo služby
AL = 09h Číslo funkce
ES = Segment, ve kterém je tabulka
DX = Offset prvního byte tabulky
Výstup: Po zavolání služby budou změněny hodnoty tabulky o
délce 17 byte na adrese ES:DX
Funkce 10h - Nastavení jednoho DAC registru - pouze VGA
-------------------------------------------------------
Poznámka: Funkce nastaví 18bitovou hodnotu příslušného
DAC registru. Jednotlivé barevné složky RGB jsou
uloženy v registrech jako 6bitové hodnoty.
Vstup: AH = 10h Číslo služby
AL = 10h Číslo funkce
BX = DAC regitr (0-255)
CH = Zelená složka
CL = Modrá složka
DH = Červená složka
Funkce 12h - Nastavení bloku DAC registrů - pouze VGA
-----------------------------------------------------
Poznámka: Tato funkce nastavuje 18bitovou hodnotu
několika DAC regsitrů. V paměti musí být uložena
tabulka, ve které jsou postupně za sebou uloženy v
bytech hodnoty pro červenou, zelenou a modrou složku
každého z nastavovaných DAC registrů. Pro jeden
registr jsou tedy potřeba 3 byte paměti.
Vstup: AH = 10h Číslo služba
AL = 12h Číslo funkce
BX = Číslo prvního předefinovávaného DAC registru
(0-255)
CX = Počet registrů k předefinování (1-256)
ES = Segment tabulky
DX = Offset prvního byte tabulky
Funkce 13h - Výběr podmnožiny barev - pouze VGA
-----------------------------------------------
Popis: Tato funkce se skládá ze dvou podfunkcí. První z nich
(BL=0) nastavuje počet podmnožin DAC použitelných
v šestnáctibarevných módech - 4 skupiny po 64 barvách
nebo 16 skupin po 16 barvách. Druhá (BL=1) vybírá
aktivní podmnožinu.
Vstup: AH = 10h Číslo služby
AL = 13h Číslo funkce
BL = 00h Výběr stránkovacího režimu
BH = 00h 4 skupiny po 64 registrech
01h 16 skupin po 16 registrech
01h Výběr aktivní podmnožiny DAC regsitrů
BH = Aktivní podmnožina DAC (0-3 nebo 0-15)
Funkce 15h - Zjištění hodnoty jednoho DAC registru - pouze VGA
--------------------------------------------------------------
Vstup: AH = 10h Číslo služby
AL = 15h Číslo funkce
BX = Číslo DAC registru (0-255)
Výstup: Bude v registrech obsažen po zavolání služby
CH = Intenzita zelené složky
CL = Intenzita modré složky
DH = Intenzita červené složky
Funkce 17h - Zjištění hodnoty několika DAC registrů - pouze VGA
---------------------------------------------------------------
Popis: Tato funkce čte 18bitové hodnoty několika DAC
registrů. Program musí pro každý DAC registr vyhradit
3 byte paměti. Po vyvolání služby budou v tabulce za
sebou uložené hodnoty intenzity červené, zelené
a modré složky jednotlivých DAC registrů.
Vstup: AH = 10h Číslo služby
AL = 17h Číslo funkce
BX = Číslo prvního DAC registru, který se má číst
(0-255)
CX = Počet registrů DAC k přečtení (1-256)
ES = Segment tabulky
DX = Offset prvního byte tabulky
Funkce 18h - Nastavení PEL maskovacího registru - pouze VGA
-----------------------------------------------------------
Popis: Tato funkce nastavuje hodnotu PEL maskovacího
registru (port 3c6h). Všechny 8bitové čísla barev,
které mají být zpracovány DAC, jsou nejprve pomocí
logické operace AND s PEL maskovacím registrem
upraveny.
Poznámka: Nastavením PEL maskovacího registru můžete omezit
počet používaných barev. BIOS hodnotu tohoto registru
nastavuje na ffh.
Vstup: AH = 10h Číslo služby
AL = 18h Číslo funkce
BL = Nová hodnota PEL maskovacího registru
Funkce 19h - Čtení PEL maskovacího registru - pouze VGA
-------------------------------------------------------
Popis: Tato hodnota čte aktuální nastavení PEL maskovacího
registru (port 3c6h).
Vstup: AH = 10h Číslo služby
AL = 19h Číslo funkce
Výstup: Bude v registrech obsažen po zavolání služby
BL = Hodnota PEL maskovacího registru
Funkce 1ah - Zjištění nastavení podmnožiny DAC registrů - pouze VGA
-------------------------------------------------------------------
Popis: Tato funkce vrací číslo aktivní podmnožiny DAC
registrů a celkový počet podmnožin.
Vstup: AH = 10h číslo služby
AL = 1ah Číslo funkce
Výstup: Bude v registrech obsažen po zavolání služby
BH = Číslo aktivní podmnožiny DAC registrů
BL = 00h 4 podmnožiny DAC registrů
01h 16 podmnožin DAC registrů
Funkce 1bh - Přepočítání DAC registrů na odstíny šedi - pouze VGA
-----------------------------------------------------------------
Popis: Tato funkce přepočítá definovaný blok DAC registrů na
odpovídající stupně šedi. Stávající hodnoty barevných
složek se přepočítají podle následujících vztahů:
R = 0.299 * R
G = 0.587 * G
B = 0.114 * B
Vstup: AH = 10h Číslo služby
AL = 1bh Číslo funkce
BX = Číslo prvního DAC registru k přepočítání (0-255)
CX = Počet registrů k přepočítání (1-256)
Poznámka: Pokud používáte mono monitor a kartu VGA, měli
byste do vašeho souboru AUTOEXEC.BAT zařadit volání
následujícího programu VGAMONO. Ten přepočítá barvy
na odpovídající stupně šedi. Nestane se vám pak to,
že některé barvy nejsou na monitoru téměř vidět.
Program je možno zkompilovat pomocí Turbo Assembleru.
Pokud ho uložíte do souboru VGAMONO.ASM, do
spustitelného tvaru ho můžete převést pomocí příkazů:
TASM vgamono
TLINK vgamono
Výpis programu VGAMONO.ASM:
.MODEL small ; paměťový model
.STACK 100h ; definice zásobníku
.CODE ; začátek kódového segmentu
; povolení přepočítávání na stupně šedi při změně módu
; služba 12h, funkce 33h
mov AH, 12h ; číslo služby
mov BL, 33h ; číslo funkce
mov AL, 00h ; povol přepočítávání na stupně šedi
int 10h ; zavolej službu
; přepočítání prvních šesnácti registrů DAC na stupně šedi
; služba 10h, funkce 1bh
mov AX, 101bh ; číslo služby a funkce
xor BX, BX ; do BX nulu, první předefinovávaný DAC
; registr bude reg. č. 0
mov CX, 10h ; předefinovat prvních 16 registrů
int 10h ; volání služby
; nastavení zobrazovacího režimu 03h (text 80x25)
mov AX, 0003h ; číslo služby a módu
int 10h ; volání služby
; ukončení DOS aplikace (programu VGAMONO.EXE)
mov AH, 4ch
int 21h ; DOS interrupt
END ; konec zdroj. textu
Služba 11h - Funkce pro práci se znakovým generátorem
=====================================================
Popis: Tato služba vám zpřístupní práci se znakovými sadami.
V textových režimech můžete používat až 8 znakových
bloků (EGA pouze 4 a EGA 64K pouze 1). Každý takovýto
blok obsahuje definici všech 256 znaků a vy můžete
určit, který blok bude používán k zobrazování
znaků na obrazovku. Dva bloky mohou být používány
najednou k zobrazení 512 různých znaků (v grafických
režimech můžete pracovat pouze s 256 znaky).
Znakové sady pro grafický režim obsazují normalní
paměť RAM nebo ROM. Oproti tomu definice znakových
sad pro textové režimy jsou uloženy v bitové rovině
2 (ve znakových blocích). I přesto musí být po každé
inicializaci zobrazovacího módu znaková sada znovu
nahrána do paměti videoadaptéru.
Znaková sada je v paměti uložena jako sekvence bytů.
Jeden byte odpovídá jedné řádce znaku. Bity, které
jsou v tomto byte nastaveny na jedičku se zobrazují
jako body na obrazovce. Každý znak je pak definován
pomocí několika byte (nejčastějí 8, 14 nebo 16).
Definice jednotlivých znaků jsou v paměti uloženy
sekvenčně a to tak, že první byte definice odpovídá
horní řádce znaku s ASCII kódem 0 a poslední byte
znakové sady odpovídá spodní řádce znaku s ASCII
kódem 255. V textových režimech nemusí být definováno
všech 256 znaků, stačí nadefinovat nějakou souvislou
část znakové sady. V grafickém režimu musí být
definováno všech 256 znaků.
V definici znaku jsou bity s nejvyšší vahou
zobrazovány nejvíce vlevo. Definice znaku "A" pro
znakovou matici 8x8 může tedy vypadat následovně:
db 00000000b ........
db 00011000b ...**...
db 01100110b .**..**.
db 01100110b .**..**.
db 01100110b .**..**.
db 01111110b .******.
db 01100110b .**..**.
db 01100110b .**..**.
Poznámka: Znaková sada bude nastavena do svojí původní
podoby po každé inicializaci zobrazovacího režimu.
Pokud definujete vlastní znakovou sadu, musíte ji
znovu nadefinovat po každé inicializaci módu nebo
můžete změnit příslušné údaje v ukládací oblasti
BIOS. Pokud používate 512 znaků, je po inicializaci
módu nastavena 256znaková sada. To můžete opět obejít
pomocí parametrické tabulky, na kterou ukazuje BIOS
SAVE_PTR.
Funkce 00h - Načtení uživatelem definované znakové sady
-------------------------------------------------------
Popis: Tato funkce nahradí implicitní znakovou sadu (nebo
její část) v některém ze znakových bloků uživatelem
definovanou znakovou sadou.
Poznámka: Tato funkce inicializuje zobrazovací mód.
Vstup: AH = 11h Číslo služby
AL = 00h Číslo funkce
BL = Číslo znakového bloku k předefinování (0-7, EGA 0-3)
BH = Počet byte na jeden znak (nejčastěji 8, 14, 16)
CX = Počet definovaných znaků
DX = ASCII kód prvního znaku v uživatelem definované
znakové tabulce
ES = Segment, ve kterém je uživatelem definovaná
znaková sada
BP = Offset uživatelovy znakové sady
Funkce 01h - Nahrání 14řádkového ROM fontu do zn. bloku
-------------------------------------------------------
Popis: Tato funkce nahraje definici znakové sady 8x14 do
některého ze znakových bloků.
Poznámka: Tato funkce inicializuje zobrazovací mód.
Vstup: AH = 11h Číslo služby
AL = 01h Číslo funkce
BL = Číslo znakového bloku kam se má načíst ROM font
8x14 (0-7, EGA 0-3)
Funkce 02h - Nahrání 8řádkového ROM fontu do zn. bloku
------------------------------------------------------
Popis: Tato funkce načte definici znakové sady 8x8 do
některého ze znakových bloků.
Poznámka: Tato funkce inicializuje zobrazovací mód.
Vstup: AH = 11h Číslo služby
AL = 02h Číslo funkce
BL = Číslo znakového bloku kam se má načíst ROM font
8x8 (0-7, EGA 0-3)
Funkce 03h - Nastavení znakové sady pro 512 znaků
-------------------------------------------------
Popis: Tato funkce vytvoří v textových režimech znakovou
sadu s 512 znaky. Změní význam bitu 3 atributu
- místo intenzity barvy bude vybírat ze dvou
znakových bloků (každý po 256 znacích).
Vstup: AH = 11h Číslo služby
AL = 03h Číslo funkce
BL = bity 0,1,4 - používaný znakový blok, pokud je
bit 3 atributu = 0
bity 2,3,5 - používaný znakový blok, pokud je
bit 3 atributu = 1
Poznámka: Bity 4 a 5 používá pouze VGA, která má k dispozici
8 znakových bloků.
Funkce 04 - Nahrání 16řádkového ROM fontu do zn. bloku - pouze VGA
------------------------------------------------------------------
Popis: Tato funkce nahraje definici znakové sady 8x16 do
některého ze znakových bloků.
Poznámka: Tato funkce inicializuje zobrazovací mód.
Vstup: AH = 11h Číslo služby
AL = 04h Číslo funkce
BL = Číslo znakového bloku kam se má načíst ROM font
8x16 (0-7)
Následující 4 funkce (10h, 11h, 12h, 14h) jsou velmi podobné
funkcím (00h, 01h, 02h a 04h). Je tu však několik rozdílů.
Tyto funkce musejí být volány ihned po nastavení
zobrazovacího módu, aktivní zobrazovací stránka musí být 0.
Funkce dále přepočítá počet byte na znak, počet řádků na
obrazovce a délku zobrazovacího bufferu. Změní také
následující CRTC registry:
/------------------------------------------------------------\
| Registr | Nový obsah | Význam |
|----------+-----------------------------+-------------------|
| 09h1 | počet byte na znak - 1 | max. scan řádka |
|----------+-----------------------------+-------------------|
| 0ah | počet byte na znak - 2 | začátek kurzoru |
|----------+-----------------------------+-------------------|
| 0bh | 0 | konec kurzoru |
|----------+-----------------------------+-------------------|
| 12h | (počet řádků + 1) * | vertikální konec |
| | * (počet byte na znak) - 1 | obrazovky |
|----------+-----------------------------+-------------------|
| 14h2 | počet byte na znak | pozice podtržení |
\------------------------------------------------------------/
1) Tento registr je přepočítáván pouze pro mód 07h
2) Toto je chyba v EGA/VGA BIOS. Měla by zde být
hodnota o 1 nižší. Při tomto nastavení nebude
podtržení (pokud je to nastaveno pomocí atributu)
viditelné.
Funkce 10h - Načtení uživatelem definované znakové sady
-------------------------------------------------------
Popis: Tato funkce nahradí implicitní znakovou sadu (nebo
její část) v některém ze znakových bloků uživatelem
definovanou znakovou sadou.
Vstup: AH = 11h Číslo služby
AL = 10h Číslo funkce
BL = Číslo znakového bloku k předefinování (0-7, EGA 0-3)
BH = Počet byte na jeden znak (nejčastěji 8, 14, 16)
CX = Počet definovaných znaků
DX = ASCII kód prvního znaku v uživatelem definované
znakové tabulce
ES = Segment, ve kterém je uživatelem definovaná
znaková sada
BP = Offset uživatelovy znakové sady
Funkce 11h - Nahrání 14řádkového ROM fontu do zn. bloku
-------------------------------------------------------
Popis: Tato funkce nahraje definici znakové sady 8x14 do
některého ze znakových bloků.
Vstup: AH = 11h Číslo služby
AL = 11h Číslo funkce
BL = Číslo znakového bloku kam se má načíst ROM font
8x14 (0-7, EGA 0-3)
Funkce 12h - Nahrání 8řádkového ROM fontu do zn. bloku
------------------------------------------------------
Popis: Tato funkce načte definici znakové sady 8x8 do
některého ze znakových bloků.
Vstup: AH = 11h Číslo služby
AL = 12h Číslo funkce
BL = Číslo znakového bloku kam se má načíst ROM font
8x8 (0-7, EGA 0-3)
Funkce 14 - Nahrání 16řádkového ROM fontu do zn. bloku - pouze VGA
------------------------------------------------------------------
Popis: Tato funkce nahraje definici znakové sady 8x16 do
některého ze znakových bloků.
Vstup: AH = 11h Číslo služby
AL = 14h Číslo funkce
BL = Číslo znakového bloku kam se má načíst ROM font
8x16 (0-7)
Následující funkce by měly být používány ihned po
inicializaci grafických režimů (předchozí funkce pracovaly
pouze v textových režimech).
Funkce 20h - Nastav uživatelský font 8x8 v grafice
--------------------------------------------------
Popis: Tato funkce nastaví INT 1fh tak, aby ukazoval na
znakovou sadu 8x8 na znaky s ASCII kódy 128-255.
Používá se převážně v kompatibilních režimech.
Nastaví INT 1fh na hodnotu uloženou ES:BP.
Vstup: AH = 11h Číslo služby
AL = 20h Číslo funkce
ES = Segment obsahující definovanou znakovou sadu
BP = Offset znakové sady
Function 21h - Nastavení uživatelského fontu pro grafické režimy
----------------------------------------------------------------
Popis: Tato funkce nastaví INT 43h na uživatelskou znakovou
sadu.
Vstup: AH = 11h Číslo služby
AL = 21h Číslo funkce
BL = Počet řádků na obrazovce
0 - uživatelem definováno (v registru DL)
1 - 14 řádek
2 - 25 řádek
3 - 43 řádek
CX = Počet byte na znak
ES = Segment obsahující uživatelskou znakovou sadu
BP = Offset uživatelské znakové sady
Funkce 22h - Nastaví ROM font 8x14 pro grafiku
----------------------------------------------
Popis: Tato funkce nastaví INT 43h na znakovou sadu 8x14
v ROM.
Vstup: AH = 11h Číslo služby
AL = 22h Číslo funkce
BL = Počet řádků na obrazovce
0 - uživatelem definováno (v registru DL)
1 - 14 řádek
2 - 25 řádek
3 - 43 řádek
Funkce 23h - Nastaví ROM font 8x8 pro grafiku
---------------------------------------------
Popis: Tato funkce nastaví INT 43h na znakovou sadu 8x8 v
ROM.
Vstup: AH = 11h Číslo služby
AL = 23h Číslo funkce
BL = Počet řádků na obrazovce
0 - uživatelem definováno (v registru DL)
1 - 14 řádek
2 - 25 řádek
3 - 43 řádek
Funkce 24h - Nastaví ROM font 8x16 pro grafiku
----------------------------------------------
Popis: Tato funkce nastaví INT 43h na znakovou sadu 8x16 v
ROM.
Vstup: AH = 11h Číslo služby
AL = 24h Číslo funkce
BL = Počet řádků na obrazovce
0 - uživatelem definováno (v registru DL)
1 - 14 řádek
2 - 25 řádek
3 - 43 řádek
Funkce 30h - Zjišťuje informace o fontu
---------------------------------------
Popis: Tato funkce vrací informace o požadovaném fontu
(znakové sadě).
Poznámka: Fonty 9x14 a 9x16 jsou až na definice některých
znaků shodné s fonty 8x14 a 8x16. Pouze u grafických
symbolů (rámečky a blokové znaky) je osmý bod
kopírován na pozici devátého, aby rámečky nebyly
přerušované. U ostatních znaků zůstává místo
devátého bodu vždy volné.
Vstup: AH = 11h Číslo služby
AL = 30h Číslo funkce
BH = 00h Zjisti pointer na INT 1fh font
01h Zjisti pointer na INT 43h font
02h Zjisti pointer na ROM 8x14 font
03h Zjisti pointer na ROM 8x8 font
04h Zjisti pointer na ROM 8x8 font (horních 128
znaků)
05h Zjisti pointer na ROM 9x14 font
06h Zjisti pointer na ROM 8x16 font
07h Zjisti pointer na ROM 9x16 font
Výstup: CX = Počet byte na znak fontu, který je na obrazovce
(ne toho, na který se dotazujeme)
DL = Počet řádků na obrazovce - 1 (VGA)
Počet řádků na obrazovce (EGA)
ES = Segment uložení požadovaného fontu
BP = Offset uložení požadovaného fontu
Služba 12h - Alternativní výběr
===============================
Popis: Tato služba obasahuje funkce, které zjišťují aktuální
nastavení adaptéru a mohou instalovat novou rutinu
pro obsluhu stisknutí klávesy PrtScr. Na adaptérech
VGA pak obsahuje ještě několik doplňkových funkcí.
Vstup: AH = 12h Číslo služby
Funkce 10h - Zjištění informace o EGA
-------------------------------------
Popis: Zjistí aktuální konfiguraci grafické karty VGA nebo
EGA. O VGA však nezjistí všechny údaje, pouze ty,
která má VGA společné s EGA.
Vstup: AH = 12h Číslo služby
BL = 10h Číslo funkce
Výstup: BH = 0 - aktivní je barevný mód (registry adaptéru
jsou na portech 3d?h)
1 - aktivní je monochromatický mód (registry
adaptéru jsou na portech 3b?h)
BL = Velikost instalované paměti na videokartě
0 = 64K
1 = 128K
2 = 192K
3 = 256K
CH = Obsahuje kopii Feature Control registru
CL = Nastavení switchů na kartě EGA
(1 = OFF, 0 = ON)
bit 0 - switch 1
bit 1 - switch 2
bit 2 - switch 3
bit 3 - switch 4
Funkce 20h - Vyber alternativní rutinu pro tisk obrazovky
---------------------------------------------------------
Popis: Volání této funkce nahradí rutinu pro tisk obrazovky
z ROM BIOS rutinou z EGA/VGA BIOS, která zvládá tisk
i pro zobrazovací režimy s více než 25 řádky.
Vstup: AH = 12h Číslo služby
BL = 20h Číslo funkce
Funkce 30h - Nastavení vertikálního rozlišení - pouze VGA
---------------------------------------------------------
Popis: Tato funkce nastaví vertikální rozlišení pro
textový režim, který bude inicializován. Tato funkce
umožňuje i na lepších grafických adaptérech,
dosáhnout stejné kvality rozlišení jako na těch
starších. CGA používá 200 řádek, MDA a EGA 350 a
konečně VGA 400 řádek.
Vstup: AH = 12h Číslo služby
BL = 30h Číslo funkce
AL = 0 - 200 řádek
1 - 350 řádek
2 - 400 řádek
Výstup: Bude v registrech obsažen po zavolání služby
AL = 12h Pokud je funkce podporována adaptérem a
byla úspěšně provedena.
Funkce 31h - Zapnutí/vypnutí nahrání palety - pouze VGA
-------------------------------------------------------
Popis: Tato funkce umožňuje zvolit, zda při inicializaci
zobrazovacího režimu bude nahrána standardní paleta a
nebo se v činnosti ponechá aktuální paleta. Na
kartách EGA je aktuální paleta vždy přepsána
standardní paletou.
Vstup: AH = 12h Číslo služby
BL = 31h Číslo funkce
AL = 0 - Povol přepisování aktuální palety
1 - Zachovávej aktuální paletu
Výstup: Bude v registrech obsažen po zavolání služby
AL = 12h Pokud je funkce podporována adaptérem a
byla úspěšně provedena.
Funkce 32h - Zapnutí/vypnutí přístupu do videopaměti - pouze VGA
----------------------------------------------------------------
Popis: Tato funkce povoluje a zakazuje přístup do
videopaměti a k registrům videoadaptéru. Pokud se
přístup do paměti zakáže, vzhled obrazovky ani obsah
videopaměti se nezmění, ale zápisy a čtení do
videopaměti budou ignorovány do té doby, než se
zápis povolí.
Vstup: AH = 12h Číslo služby
BL = 32h Číslo funkce
AL = 0 - povol zápis
1 - zakaž zápis
Výstup: Bude v registrech obsažen po zavolání služby
AL = 12h Pokud je funkce podporována adaptérem a
byla úspěšně provedena.
Funkce 33h - Zapnutí/vypnutí přepočítávání na stupně šedi - pouze VGA
---------------------------------------------------------------------
Popis: Tato funkce povoluje a zakazuje přepočítávání barev
na odstíny šedi po inicializaci zobrazovacího módu a
po změně registrů palety. Stávající hodnoty barevných
složek budou určeny následujícími vztahy:
R = 0.299 * R
G = 0.587 * G
B = 0.114 * B
Vstup: AH = 12h Číslo služby
BL = 33h Číslo funkce
AL = 0 - povol přepočítávání na stupně šedi
1 - zakaž přepočítávání na stupně šedi
Výstup: Bude v registrech obsažen po zavolání služby
AL = 12h Pokud je funkce podporována adaptérem a
byla úspěšně provedena.
Funkce 34h - Zapnutí/vypnutí emulace kurzoru - pouze VGA
--------------------------------------------------------
Popis: Tato funkce povoluje a zakazuje emulaci textového
kurzoru. Pokud je emulace zapnuta, je informace o
začátku a konci kurzoru přepočítána z původního
rozsahu CGA 8 řádků na znak na aktuální počet řádků
na znak. Pokud je emulace vypnutá, hodnoty se
nepřepočítávají a bez úprav se použijí pro velikost
kurzoru.
Vstup: AH = 12h Číslo služby
BL = 34h Číslo funkce
AL = 0 - povol emulaci kurzoru
1 - zakaž emulaci kurzoru
Výstup: Bude v registrech obsažen po zavolání služby
AL = 12h Pokud je funkce podporována adaptérem a
byla úspěšně provedena.
Funkce 35h - Přepínání monitorů - pouze VGA
-------------------------------------------
Popis: Tato funkce přepíná mezi adaptérem umístěným na desce
počítače a externím, pokud mohou nastat nějaké
problémy s adresováním nebo přístupem k portům. Pokud
jsou v počítači dva adaptéry, externí je použit jako
defaultní adaptér.
Při první změně adptéru se musí volat dvě funkce po
sobě (AL=0 a AL=1). Pro další přepínání se používají
opět dvě volání. Nejprve AL=2, k vypnutí aktivního
adaptéru a poté AL=3, k zapnutí neaktivního adaptéru.
Program musí v paměti vyhradit dva 128 byte dlouhé
buffery pro ukládání stavových informací adaptérů.
Vstup: AH = 12h Číslo služby
BL = 35h Číslo funkce
AL = 0 - První vypnutí externího adaptéru
ES:DX - ukazatel na 128 byte dlouhý buffer
pro uložení stavových informací adaptéru
1 - První zapnutí grafické karty na desce
2 - Vypni aktivní adaptér
ES:DX - ukazatel na 128 byte dlouhý buffer
pro uložení stavových informací adaptéru
3 - Zapni neaktivní adaptér
ES:DX - ukazatel na 128 byte dlouhý buffer
s dříve uloženými stavovými informacemi
Výstup: Bude v registrech obsažen po zavolání služby
AL = 12h Pokud je funkce podporována adaptérem a
byla úspěšně provedena.
Funkce 36h - Zapnutí/vypnutí obrazovky - pouze VGA
--------------------------------------------------
Popis: Tato funkce zapíná a vypíná obrazovku. Může být
použita například jako jednoduchý šetřič obrazovky
(screen saver). Nebo můžete vypnout obrazovku,
vykreslit nějaký složitější obrázek. Pak obrazovku
zapnout a obrázek se objeví celý najednou bez
pomalého vykreslování.
Vstup: AH = 12h Číslo služby
BL = 36h Číslo funkce
AL = 0 - Zapnutí obrazovky (normálně)
1 - Vypnutí obrazovky
Výstup: Bude v registrech obsažen po zavolání služby
AL = 12h Pokud je funkce podporována adaptérem a
byla úspěšně provedena.
Služba 13h - Vypsání znakového řetězce na obrazovku
===================================================
Popis: Tato služba zobrazí řetězec znaků v paměti na
obrazovku. Jsou dvě možnosti: řetězec v paměti
obsahuje pouze znaky, jejich atribut bude určen
registrem BL. Druhou možností je, uložit do paměti
posloupnost znak, atribut, znak, atribut... Každý
znak pak má definován svůj vlastní atribut. Můžete
také určit zda se má kurzor přesunout na konec
vypisovaného řetězce nebo jestli má zůstat na své
původní pozici.
Tato služba je podobná službě 0eh. Řídící znaky jako
07h bell, 0dh CR, 0ah LF, 08h BS nejsou zobrazovány
jako znaky, ale je provedena jim odpovídající činnost
(pípnutí, přesun kurzoru na začátek řádky, posun
kurzoru o řádek dolů a smazání posledního znaku).
Vstup: AH = 13h Číslo služby
AL = bit 0 = 0 - kurzor není přesouván
= 1 - kurzor je přesunut na konec řetězce
bit 1 = 0 - řetězec obsahuje pouze znaky
1 - řetězec obsahuje i atributy
BL = Atribut znaků řetězce (Pokud bit 1 registru AL
je 0)
BH = Číslo obrazové stránky (viz. služba 05h)
CX = Počet znaků (nezapočítavají se atributy)
DX = Souřadnice prvního znaku
DH - Řádka
DL - Sloupec
ES = Segment řetězce k vypsání
BP = Offset řetězce k vypsání
Služba 1ah - Čtení/zápis kombinace monitorů - pouze VGA
=======================================================
Popis: Tato umožňuje zjistit a nastavit kódy, které určují
typ primárního a sekundárního displeje.
Vstup: AH = 1ah Číslo služby
Tabulka kódů kombinací monitorů:
/---------------------------------------\
|Kód | Druh monitoru |
|----+----------------------------------|
|00h | Monitor není připojen |
|01h | MDA |
|02h | CGA |
|04h | EGA s barevným monitorem |
|05h | EGA s monochromatickým monitorem |
|06h | PGC |
|07h | VGA s monochromatickým monitorem |
|08h | VGA s barevným monitorem |
|0ah | MCGA s digitálním monitorem |
|0bh | MCGA s monochromatickým monitorem|
|0ch | MCGA s barevným monitorem |
|ffh | Neznámý typ monitoru |
\---------------------------------------/
Funkce 00h - Čtení kombinace monitorů - pouze VGA
-------------------------------------------------
Popis: Zjistí aktuální konfiguraci monitorů.
Vstup: AH = 1ah Číslo služby
AL = 00h Číslo funkce
Výstup: Bude v registrech obsažen po zavolání služby
AL = 1ah Volání funkce proběhlo úspěšně
BH = Kód sekundárního displeje
BL = Kód aktivního displeje
Funkce 01h - Nastavení kombinace monitorů - pouze VGA
-----------------------------------------------------
Popis: Nastaví aktuální konfiguraci monitorů.
Vstup: AH = 1ah Číslo služby
AL = 01h Číslo funkce
BH = Kód sekundárního displeje
BL = Kód aktivního displeje
Výstup: Bude v registrech obsažen po zavolání služby
AL = 1ah Volání funkce proběhlo úspěšně
Služba 1bh - Zjištění stavových informací - pouze VGA
=====================================================
Popis: Tato služba zjistí informace o aktuálním nastavení
grafického adaptéru. Před voláním této služby musíte
v paměti vyhradit 64 byte pro uložení informací.
Vstup: AH = 1bh Číslo služby
BX = Typ implementace (musí být 0)
ES = Segment, ve kterém je vymezených 64 byte paměti
DI = Offset 1. byte vymezené paměti
Výstup: Bude v registrech obsažen po zavolání služby
AL = 1bh Volání funkce proběhlo úspěšně
Formát tabulky na adrese ES:DI (délka 64 byte):
/-----------------------------------------------------------\
|Offset | Velikost | Popis |
|-------+----------+----------------------------------------|
| 00h | 1 word | Offset statické tabulky režimu |
|-------+----------+----------------------------------------|
| 02h | 1 word | Segment statické tabulky režimu |
|-------+----------+----------------------------------------|
| 04h | 1 byte | Číslo aktuálního zobrazovacího režimu |
|-------+----------+----------------------------------------|
| 05h | 1 word | Počet zobrazitelných textových sloupců |
|-------+----------+----------------------------------------|
| 07h | 1 word | Velikost zabrazované paměti video |
| | | adaptéru |
|-------+----------+----------------------------------------|
| 09h | 1 word | Počáteční adresa videopaměti |
|-------+----------+----------------------------------------|
| 0bh | 1 word | Pozice kurzoru v zobrazovací stránce 0 |
| | | (Vyšší byte - řádka, |
| | | nižžsí byte - sloupec) |
|-------+----------+----------------------------------------|
| 0dh | 1 word | Pozice kurzoru v zobrazovací stránce 1 |
|-------+----------+----------------------------------------|
| 0fh | 1 word | Pozice kurzoru v zobrazovací stránce 2 |
|-------+----------+----------------------------------------|
| 11h | 1 word | Pozice kurzoru v zobrazovací stránce 3 |
|-------+----------+----------------------------------------|
| 13h | 1 word | Pozice kurzoru v zobrazovací stránce 4 |
|-------+----------+----------------------------------------|
| 15h | 1 word | Pozice kurzoru v zobrazovací stránce 5 |
|-------+----------+----------------------------------------|
| 17h | 1 word | Pozice kurzoru v zobrazovací stránce 6 |
|-------+----------+----------------------------------------|
| 19h | 1 word | Pozice kurzoru v zobrazovací stránce 7 |
|-------+----------+----------------------------------------|
| 1bh | 1 byte | Počáteční řádka kurzoru |
|-------+----------+----------------------------------------|
| 1ch | 1 byte | Koncová řádka kurzoru |
|-------+----------+----------------------------------------|
| 1dh | 1 byte | Aktivní zobrazovací stránka |
|-------+----------+----------------------------------------|
| 1eh | 1 word | Adresa portů, na kterých jsou mapovány |
| | | CRTC registry |
|-------+----------+----------------------------------------|
| 20h | 1 byte | Hodnota registru 3?8h |
|-------+----------+----------------------------------------|
| 21h | 1 byte | Hodnota registru 3?9h |
|-------+----------+----------------------------------------|
| 22h | 1 byte | Počet zobrazitelných textových řádek |
|-------+----------+----------------------------------------|
| 23h | 1 byte | Výška znaku v pixelech (počet byte na |
| | | znak) |
|-------+----------+----------------------------------------|
| 25h | 1 byte | Kód primárního displeje |
| | | (viz. tabulka kódu kombinací monitorů) |
|-------+----------+----------------------------------------|
| 26h | 1 byte | Kód sekundárního displeje |
| | | (viz. tabulka kódu kombinací monitorů) |
|-------+----------+----------------------------------------|
| 27h | 1 word | Počet barev zobrazitelných v aktuálním |
| | | zobrazovacím režimu |
|-------+----------+----------------------------------------|
| 29h | 1 byte | Počet dostupných zobrazovacích stránek |
| | | v aktuálním zobrazovacím režimu |
|-------+----------+----------------------------------------|
| 2ah | 1 byte | Počet rastrových řádek na obrazovce: |
| | | 0 - 200 řádek |
| | | 1 - 350 řádek |
| | | 2 - 400 řádek |
| | | 3 - 480 řádek |
|-------+----------+----------------------------------------|
| 2bh | 1 byte | Číslo primárního znakového bloku |
|-------+----------+----------------------------------------|
| 2ch | 1 byte | Číslo sekundárního znakového bloku |
|-------+----------+----------------------------------------|
| 2dh | 1 byte | Informace o obrazovém systému: |
| | | Bit Popis (když bit = 1) |
| | | --- ---------------------------------|
| | | 0 Podporuje všechny módy |
| | | 1 Barvy jsou přepočítávány na |
| | | odstíny šedi |
| | | 2 Připojen je monochromatický |
| | | monitor |
| | | 3 Není nahrávána standardní paleta |
| | | 4 Emulace CGA kurzoru |
| | | 5 1 = blikání, 0 = intenzita barvy |
| | | pozadí |
| | | 6-7 Vyhrazeno |
|-------+----------+----------------------------------------|
| 2eh | 3 byte | Vyhrazeno |
|-------+----------+----------------------------------------|
| 31h | 1 byte | Velikost dostupné videopaměti |
| | | 0 - 64K |
| | | 1 - 128K |
| | | 2 - 192K |
| | | 3 - 256K |
|-------+----------+----------------------------------------|
| 32h | 1 byte | Doplňkové informace o zobrazovači |
| | | Bit Popis (když bit = 1) |
| | | --- ---------------------------------|
| | | 0 Je používána 512znaková sada |
| | | 1 Je používána oblast pro uložení |
| | | palety |
| | | 2 Je používána uživatelem |
| | | definovaná znaková sada |
| | | 3 V grafickém režimu je používána |
| | | uživatelem definovaná znaková |
| | | sada |
| | | 4 Je používána uživatelem |
| | | definovaná paleta |
| | | 5 Je používána podpora |
| | | dvou-monitorového systému |
| | | 6-7 Rezervováno |
|-------+----------+----------------------------------------|
| 33h | 13 byte | Rezervováno |
\-----------------------------------------------------------/
Formát statické tabulky režimu (délka 16 byte):
/-----------------------------------------------------------\
|Offset | Velikost| Popis |
|-------+---------+-----------------------------------------|
| 00h | 1 byte | Podporované videomódy |
| | | bit 0 = 1 Mód 0 je podporován |
| | | bit 1 = 1 Mód 1 je podporován |
| | | bit 2 = 1 Mód 2 je podporován |
| | | bit 3 = 1 Mód 3 je podporován |
| | | bit 4 = 1 Mód 4 je podporován |
| | | bit 5 = 1 Mód 5 je podporován |
| | | bit 6 = 1 Mód 6 je podporován |
| | | bit 7 = 1 Mód 7 je podporován |
|-------+---------+-----------------------------------------|
| 01h | 1 byte | Podporované videomódy |
| | | bit 0 = 1 Mód 8 je podporován |
| | | bit 1 = 1 Mód 9 je podporován |
| | | bit 2 = 1 Mód 0ah je podporován |
| | | bit 3 = 1 Mód 0bh je podporován |
| | | bit 4 = 1 Mód 0ch je podporován |
| | | bit 5 = 1 Mód 0dh je podporován |
| | | bit 6 = 1 Mód 0eh je podporován |
| | | bit 7 = 1 Mód 0fh je podporován |
|-------+---------+-----------------------------------------|
| 02h | 1 byte | Podporované videomódy |
| | | bit 0 = 1 Mód 10h je podporován |
| | | bit 1 = 1 Mód 11h je podporován |
| | | bit 2 = 1 Mód 12h je podporován |
| | | bit 3 = 1 Mód 13h je podporován |
|-------+---------+-----------------------------------------|
| 03h | 4 byte | Rezervováno |
|-------+---------+-----------------------------------------|
| 07h | 1 byte | Počet rastrových řádek v textových |
| | | režimech: bit 0 = 1 - 200 řádek |
| | | bit 1 = 1 - 350 řádek |
| | | bit 2 = 1 - 400 řádek |
|-------+---------+-----------------------------------------|
| 08h | 1 byte | Celkový počet znakových bloků v |
| | | textových režimech |
|-------+---------+-----------------------------------------|
| 09h | 1 byte | Maximální počet najednou používaných |
| | | znakových bloků v textových režimech |
|-------+---------+-----------------------------------------|
| 0ah | 1 byte | Doplňkové informace |
| | | Bit Popis (když bit = 1) |
| | | --- ---------------------------------|
| | | 0 Lze používat všechny zobr. módy |
| | | 1 Je podporováno přepočítávání |
| | | barev na odstíny šedi |
| | | 2 Je podporována uživatelem |
| | | definovaná znaková sada |
| | | 3 Je podporovaná uživatelem |
| | | definovaná paleta |
| | | 4 Je podporována emulace CGA |
| | | kurzoru |
| | | 5 Jsou přítomny registry palety EGA|
| | | 6 Jsou přítomny registry palety DAC|
| | | 7 Je podporováno několik sad DAC |
| | | registrů |
|-------+---------+-----------------------------------------|
| 0bh | 1 byte | Doplňkové informace |
| | | Bit Popis (když bit = 1) |
| | | --- ---------------------------------|
| | | 0 Podpora světelného pera |
| | | 1 Podpora služby 1ch |
| | | 2 Podpora volby mezi intenzitou |
| | | pozadí a blikáním |
| | | 3 Je podporován kód kombinace |
| | | monitorů |
| | | 4-7 Rezervováno |
|-------+---------+-----------------------------------------|
| 0ch | 1 word | Rezervováno |
|-------+---------+-----------------------------------------|
| 0eh | 1 byte | Příznaky uchovávání nastavení |
| | | Bit Popis (když bit = 1) |
| | | --- ---------------------------------|
| | | 0 Uchovává se 512znaková sada |
| | | 1 Uchovává se aktuální paleta |
| | | 2 Uživatelem definovaná zn. sada |
| | | 3 Uživatelem definovaná zn. sada v |
| | | grafických režimech |
| | | 4 Uživatelem definovaná paleta |
| | | 5 Podpora dvou-monitorového systému|
| | | 6-7 Rezervováno |
|-------+---------+-----------------------------------------|
| 0fh | 1 byte | Rezervováno |
\-----------------------------------------------------------/
Služba 1ch - Uložení/obnovení aktuálního nastavení adaptéru - pouze VGA
=======================================================================
Popis: Tato služba ukládá a opět obnovuje nastavení
grafického adaptéru a aktuálního zobrazovacího režimu
(BIOS oblast, registry adaptéru, registry palety).
Program musí v paměti vyhradit místo pro uložení
informací. Požadovanou velikost bufferu vrací funkce
00h.
Poznámka: Registr CX definuje co se bude ukládat. Každý bit
definuje jednu část k ukládání. Pro uložení všech tří
skupin informací použijte CX = 7.
Funkce 00h - Zjištěni velikosti bufferu - pouze VGA
---------------------------------------------------
Vstup: AH = 1ch Číslo služby
AL = 00h Číslo funkce
CX = Určení informací k uložení/nastavení
(pokud se bit = 1, s informací se pracuje)
Bit 0 - registry grafického adaptéru
Bit 1 - datová oblast BIOS
Bit 2 - registry palety a DAC registry
Výstup: Bude v registrech obsažen po zavolání služby
AL = 1ch Funkce je podporována
BX = Velikost bufferu (v 64 byte slouhých blocích)
Funkce 01h - Uložení nastavení - pouze VGA
------------------------------------------
Vstup: AH = 1ch Číslo služby
AL = 01h Číslo funkce
ES = Segment ukládací oblasti (bufferu)
BX = Offset ukládací oblasti (bufferu)
CX = Určení informací k uložení/nastavení
(pokud se bit = 1, s informací se pracuje)
Bit 0 - registry grafického adaptéru
Bit 1 - datová oblast BIOS
Bit 2 - registry palety a DAC registry
Výstup: Bude v registrech obsažen po zavolání služby
AL = 1ch Funkce je podporována
Funkce 02h - Obnovení nastavení - pouze VGA
-------------------------------------------
Vstup: AH = 1ch Číslo služby
AL = 02h Číslo funkce
ES = Segment ukládací oblasti (bufferu)
BX = Offset ukládací oblasti (bufferu)
CX = Určení informací k uložení/nastavení
(pokud se bit = 1, s informací se pracuje)
Bit 0 - registry grafického adaptéru
Bit 1 - datová oblast BIOS
Bit 2 - registry palety a DAC registry
Výstup: Bude v registrech obsažen po zavolání služby
AL = 1ch Funkce je podporována
[Pokračování] |
[Obsah]
Copyright © Jiří Kosek