Rozsireni BIOS pro EGA/VGA V teto kapitole se seznamime se sluzbami EGA/VGA BIOS, ktere nam umozni vyuzivat specificke vlastnosti karet EGA/VGA. Prace s temito sluzbami je naprosto principialne shodna jako s temi predeslymi. Vzhledem k tomu, ze nove poskytovanych sluzeb je opravdu mnoho a cisel sluzeb neni neomezene mnozstvi, doslo k tomu, ze kazda sluzba v sobe zahrnuje nekolik podsluzeb (budeme je nazyvat funkce). Cislo funkce se uklada do registru AL nebo BL. K vyvolani vlastni sluzby se opet pouziva INT 10h. Sluzby teto casti BIOS muzeme rozdelit do tri hlavnich skupin: sluzby pro praci s barvami a paletami barev, sluzby pro obsluhu znakovych sad a sluzby zjistujici konfiguraci adapteru. Sluzba 10h - Nastaveni registru palety ====================================== Popis: Tato sluzba se pouziva ke zmene jedne (nebo vsech) barev palety na jinou barvu a k nastaveni barvy ramecku. (Ramecek je plocha obrazovky na jejich okrajich, kde se obvykle nic nezobrazuje.) Poznamka: V sesnactibarevnych modech EGA/VGA je cislo registru palety stejne jako cislo barvy. V kompatibilnich modech (CGA) urcuji registry 1-3 barvy palety 1 a registry 4-6 urcuji barvy palety 0. Pokud mate kartu EGA s 64K pameti a pouzijete mod 10h, barvy jsou urceny nasledujicim schematem: Registr palety Cisla barev ----------------------------------- 0 0,2,8,10 1 1,3,9,11 4 4,6,12,14 7 5,7,13,15 Po kazde inicializaci zobrazovaciho rezimu jsou hodnoty registru palety nastaveny na svoji puvodni hodnotu. Pokud tedy pouzivate svoji paletu, musite ji obnovit po kazde zmene zobrazovaciho rezimu. Jinou moznosti je ucinit vase hodnoty barev v palete stalymi. To dosahnete vytvorenim vlastni tabulky parametru a nastavenim ukazatele BIOS SAVE_PTR na ni. Format teto parametricke tabulky je uveden v popisu ukladaci oblasti BIOS. Na karte VGA muzete pomoci sluzby 12h a jeji funkce 31h zakazat obnovu palety po resetu modu. VGA ma krome standartnich registru palety take 256 registru DAC (Digital to Analog Converter), ktere urcuji vyslednou barvu. Kazdy registr uchovava 18bitovou hodnotu. Z techto 18 bitu prislusi vzdy 6 kazde ze tri barev - cervene, zelene, modre (tzv. RGB barevny model). Hodnota techto sesti bitu udava intenzitu prislusne barvy. Vyslednym slozenim vsech tri zakladnich barev dostaneme barvu vyslednou, pro kterou mame celkem 262144 (=218) moznosti. Vstup: AH = 10h Cislo sluzby AL = Cislo funkce Funkce 00h - Nastaveni jednoho registru palety ---------------------------------------------- Poznamka: Tato funkce muze byt pouzita i k nastaveni registru kontroleru atributu. Vstup: AH = 10h Cislo sluzby AL = 00h Cislo funkce BL = Cislo registru palety (00h - 0fh) = Cislo registru atributu 10h Registr modu 11h Overscan color registr (barva ramecku) 12h Registr pristupu do bitovych rovin 13h Registr urcujici posun obrazu doleva 14h Registr vyberu barvy (pouze VGA) BH = Hodnota nastavovaneho registru Funkce 01h - Nastaveni barvy ramecku ------------------------------------ Poznamka: Nefunguje na EGA pri 350 radkovych modech. Vstup: AH = 10h Cislo sluzby AL = 01h Cislo funkce BH = Barva ramecku Funkce 02h - Nastaveni vsech registru palety -------------------------------------------- Poznamka: Tato funkce vyzaduje, aby byla v pameti ulozena tabulka o delce 17 bytu. Prvnich sestnact byte obsahuje hodnoty barev pro registry palety a 17. byte urcuje barvu ramecku. Vstup: AH = 10h Cislo sluzby AL = 02h Cislo funkce ES = Segment obsahujici tabulku DX = Offset prvniho byte v tabulce Funkce 03h - Zmena intenzity a blikani -------------------------------------- Poznamka: Tato funkce urcuje zda bit 3 nebo 4 atributu bude urcovat intenzitu barvy nebo blikani. Vstup: AH = 10h Cislo sluzby AL = 03h Cislo funkce BL = 0 - povol intenzitu (zakaz blikani) 1 - povol blikani (zakaz intenzitu) O tom jak je informace o barve zakodovana pro karty EGA a CGA vypovidaji nasledujici tabulky. CGA: /-------------------------------\ | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |---+---+---+---+---+---+---+---| | X | X | X | I | X | R | G | B | \-------------------------------/ X - nepouzito I - intenzita (pripadne blikani) R, G, B - cervena, zelena, modra a pro EGA: /-------------------------------\ | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |---+---+---+---+---+---+---+---| | X | X | R | G | B | R | G | B | \-------------------------------/ Standardni nastaveni registru palety: /--------------------------------------------\ | Barva | EGA | CGA | | bity | 543210 | 543210 | |--------------+-----------+-----------------| | cerna | 000000 | 000000 | | modra | 000001 | 000001 | | zelena | 000010 | 000010 | | tyrkysova | 000011 | 000011 | | cervena | 000100 | 000100 | | fialova | 000101 | 000101 | | hneda | 010100 | 000110 | | bila | 000111 | 000111 | | seda | 111000 | 010000 | | sv. modra | 111001 | 010001 | | sv. zelena | 111010 | 010010 | | sv. tyrk. | 111011 | 010011 | | sv. cervena | 111100 | 010100 | | sv. fialova | 111101 | 010101 | | zluta | 111110 | 010110 | | bila | 111111 | 010111 | \--------------------------------------------/ pozn. Sv. samozrejme znamena svetle Na VGA karte obsahuje registr palety ukazetel do registru DAC, ze ktereho je teprve ziskana vysledna podoba barvy. Funkce 07h - Zjisteni obsahu jednoho registru palety - pouze VGA ---------------------------------------------------------------- Vstup: AH = 10h Cislo sluzby AL = 07h Cislo funkce BL = Cislo registru k precteni Vystup: Bude v registrech obsazen po zavolani sluzby BH = Nastaveni registru Funkce 08h - Zjisteni barvy ramecku - pouze VGA ----------------------------------------------- Vstup: AH = 10h Cislo sluzby AL = 07h Cislo funkce Vystup: Bude v registrech obsazen po zavolani sluzby BH = Barva ramecku Funkce 09h - Nacteni vsech registru palety - pouze VGA ------------------------------------------------------ Poznamka: Pred volanim teto funkce musite v pameti vyhradit 17 byte. Do prvnich sestnacti byte ulozi funkce registry palety a do 17. byte ulozi barvu ramecku. Vstup: AH = 10h Cislo sluzby AL = 09h Cislo funkce ES = Segment, ve kterem je tabulka DX = Offset prvniho byte tabulky Vystup: Po zavolani sluzby budou zmeneny hodnoty tabulky o delce 17 byte na adrese ES:DX Funkce 10h - Nastaveni jednoho DAC registru - pouze VGA ------------------------------------------------------- Poznamka: Funkce nastavi 18bitovou hodnotu prislusneho DAC registru. Jednotlive barevne slozky RGB jsou ulozeny v registrech jako 6bitove hodnoty. Vstup: AH = 10h Cislo sluzby AL = 10h Cislo funkce BX = DAC regitr (0-255) CH = Zelena slozka CL = Modra slozka DH = Cervena slozka Funkce 12h - Nastaveni bloku DAC registru - pouze VGA ----------------------------------------------------- Poznamka: Tato funkce nastavuje 18bitovou hodnotu nekolika DAC regsitru. V pameti musi byt ulozena tabulka, ve ktere jsou postupne za sebou ulozeny v bytech hodnoty pro cervenou, zelenou a modrou slozku kazdeho z nastavovanych DAC registru. Pro jeden registr jsou tedy potreba 3 byte pameti. Vstup: AH = 10h Cislo sluzba AL = 12h Cislo funkce BX = Cislo prvniho predefinovavaneho DAC registru (0-255) CX = Pocet registru k predefinovani (1-256) ES = Segment tabulky DX = Offset prvniho byte tabulky Funkce 13h - Vyber podmnoziny barev - pouze VGA ----------------------------------------------- Popis: Tato funkce se sklada ze dvou podfunkci. Prvni z nich (BL=0) nastavuje pocet podmnozin DAC pouzitelnych v sestnactibarevnych modech - 4 skupiny po 64 barvach nebo 16 skupin po 16 barvach. Druha (BL=1) vybira aktivni podmnozinu. Vstup: AH = 10h Cislo sluzby AL = 13h Cislo funkce BL = 00h Vyber strankovaciho rezimu BH = 00h 4 skupiny po 64 registrech 01h 16 skupin po 16 registrech 01h Vyber aktivni podmnoziny DAC regsitru BH = Aktivni podmnozina DAC (0-3 nebo 0-15) Funkce 15h - Zjisteni hodnoty jednoho DAC registru - pouze VGA -------------------------------------------------------------- Vstup: AH = 10h Cislo sluzby AL = 15h Cislo funkce BX = Cislo DAC registru (0-255) Vystup: Bude v registrech obsazen po zavolani sluzby CH = Intenzita zelene slozky CL = Intenzita modre slozky DH = Intenzita cervene slozky Funkce 17h - Zjisteni hodnoty nekolika DAC registru - pouze VGA --------------------------------------------------------------- Popis: Tato funkce cte 18bitove hodnoty nekolika DAC registru. Program musi pro kazdy DAC registr vyhradit 3 byte pameti. Po vyvolani sluzby budou v tabulce za sebou ulozene hodnoty intenzity cervene, zelene a modre slozky jednotlivych DAC registru. Vstup: AH = 10h Cislo sluzby AL = 17h Cislo funkce BX = Cislo prvniho DAC registru, ktery se ma cist (0-255) CX = Pocet registru DAC k precteni (1-256) ES = Segment tabulky DX = Offset prvniho byte tabulky Funkce 18h - Nastaveni PEL maskovaciho registru - pouze VGA ----------------------------------------------------------- Popis: Tato funkce nastavuje hodnotu PEL maskovaciho registru (port 3c6h). Vsechny 8bitove cisla barev, ktere maji byt zpracovany DAC, jsou nejprve pomoci logicke operace AND s PEL maskovacim registrem upraveny. Poznamka: Nastavenim PEL maskovaciho registru muzete omezit pocet pouzivanych barev. BIOS hodnotu tohoto registru nastavuje na ffh. Vstup: AH = 10h Cislo sluzby AL = 18h Cislo funkce BL = Nova hodnota PEL maskovaciho registru Funkce 19h - Cteni PEL maskovaciho registru - pouze VGA ------------------------------------------------------- Popis: Tato hodnota cte aktualni nastaveni PEL maskovaciho registru (port 3c6h). Vstup: AH = 10h Cislo sluzby AL = 19h Cislo funkce Vystup: Bude v registrech obsazen po zavolani sluzby BL = Hodnota PEL maskovaciho registru Funkce 1ah - Zjisteni nastaveni podmnoziny DAC registru - pouze VGA ------------------------------------------------------------------- Popis: Tato funkce vraci cislo aktivni podmnoziny DAC registru a celkovy pocet podmnozin. Vstup: AH = 10h cislo sluzby AL = 1ah Cislo funkce Vystup: Bude v registrech obsazen po zavolani sluzby BH = Cislo aktivni podmnoziny DAC registru BL = 00h 4 podmnoziny DAC registru 01h 16 podmnozin DAC registru Funkce 1bh - Prepocitani DAC registru na odstiny sedi - pouze VGA ----------------------------------------------------------------- Popis: Tato funkce prepocita definovany blok DAC registru na odpovidajici stupne sedi. Stavajici hodnoty barevnych slozek se prepocitaji podle nasledujicich vztahu: R = 0.299 * R G = 0.587 * G B = 0.114 * B Vstup: AH = 10h Cislo sluzby AL = 1bh Cislo funkce BX = Cislo prvniho DAC registru k prepocitani (0-255) CX = Pocet registru k prepocitani (1-256) Poznamka: Pokud pouzivate mono monitor a kartu VGA, meli byste do vaseho souboru AUTOEXEC.BAT zaradit volani nasledujiciho programu VGAMONO. Ten prepocita barvy na odpovidajici stupne sedi. Nestane se vam pak to, ze nektere barvy nejsou na monitoru temer videt. Program je mozno zkompilovat pomoci Turbo Assembleru. Pokud ho ulozite do souboru VGAMONO.ASM, do spustitelneho tvaru ho muzete prevest pomoci prikazu: TASM vgamono TLINK vgamono Vypis programu VGAMONO.ASM: .MODEL small ; pametovy model .STACK 100h ; definice zasobniku .CODE ; zacatek kodoveho segmentu ; povoleni prepocitavani na stupne sedi pri zmene modu ; sluzba 12h, funkce 33h mov AH, 12h ; cislo sluzby mov BL, 33h ; cislo funkce mov AL, 00h ; povol prepocitavani na stupne sedi int 10h ; zavolej sluzbu ; prepocitani prvnich sesnacti registru DAC na stupne sedi ; sluzba 10h, funkce 1bh mov AX, 101bh ; cislo sluzby a funkce xor BX, BX ; do BX nulu, prvni predefinovavany DAC ; registr bude reg. c. 0 mov CX, 10h ; predefinovat prvnich 16 registru int 10h ; volani sluzby ; nastaveni zobrazovaciho rezimu 03h (text 80x25) mov AX, 0003h ; cislo sluzby a modu int 10h ; volani sluzby ; ukonceni DOS aplikace (programu VGAMONO.EXE) mov AH, 4ch int 21h ; DOS interrupt END ; konec zdroj. textu Sluzba 11h - Funkce pro praci se znakovym generatorem ===================================================== Popis: Tato sluzba vam zpristupni praci se znakovymi sadami. V textovych rezimech muzete pouzivat az 8 znakovych bloku (EGA pouze 4 a EGA 64K pouze 1). Kazdy takovyto blok obsahuje definici vsech 256 znaku a vy muzete urcit, ktery blok bude pouzivan k zobrazovani znaku na obrazovku. Dva bloky mohou byt pouzivany najednou k zobrazeni 512 ruznych znaku (v grafickych rezimech muzete pracovat pouze s 256 znaky). Znakove sady pro graficky rezim obsazuji normalni pamet RAM nebo ROM. Oproti tomu definice znakovych sad pro textove rezimy jsou ulozeny v bitove rovine 2 (ve znakovych blocich). I presto musi byt po kazde inicializaci zobrazovaciho modu znakova sada znovu nahrana do pameti videoadapteru. Znakova sada je v pameti ulozena jako sekvence bytu. Jeden byte odpovida jedne radce znaku. Bity, ktere jsou v tomto byte nastaveny na jedicku se zobrazuji jako body na obrazovce. Kazdy znak je pak definovan pomoci nekolika byte (nejcasteji 8, 14 nebo 16). Definice jednotlivych znaku jsou v pameti ulozeny sekvencne a to tak, ze prvni byte definice odpovida horni radce znaku s ASCII kodem 0 a posledni byte znakove sady odpovida spodni radce znaku s ASCII kodem 255. V textovych rezimech nemusi byt definovano vsech 256 znaku, staci nadefinovat nejakou souvislou cast znakove sady. V grafickem rezimu musi byt definovano vsech 256 znaku. V definici znaku jsou bity s nejvyssi vahou zobrazovany nejvice vlevo. Definice znaku "A" pro znakovou matici 8x8 muze tedy vypadat nasledovne: db 00000000b ........ db 00011000b ...**... db 01100110b .**..**. db 01100110b .**..**. db 01100110b .**..**. db 01111110b .******. db 01100110b .**..**. db 01100110b .**..**. Poznamka: Znakova sada bude nastavena do svoji puvodni podoby po kazde inicializaci zobrazovaciho rezimu. Pokud definujete vlastni znakovou sadu, musite ji znovu nadefinovat po kazde inicializaci modu nebo muzete zmenit prislusne udaje v ukladaci oblasti BIOS. Pokud pouzivate 512 znaku, je po inicializaci modu nastavena 256znakova sada. To muzete opet obejit pomoci parametricke tabulky, na kterou ukazuje BIOS SAVE_PTR. Funkce 00h - Nacteni uzivatelem definovane znakove sady ------------------------------------------------------- Popis: Tato funkce nahradi implicitni znakovou sadu (nebo jeji cast) v nekterem ze znakovych bloku uzivatelem definovanou znakovou sadou. Poznamka: Tato funkce inicializuje zobrazovaci mod. Vstup: AH = 11h Cislo sluzby AL = 00h Cislo funkce BL = Cislo znakoveho bloku k predefinovani (0-7, EGA 0-3) BH = Pocet byte na jeden znak (nejcasteji 8, 14, 16) CX = Pocet definovanych znaku DX = ASCII kod prvniho znaku v uzivatelem definovane znakove tabulce ES = Segment, ve kterem je uzivatelem definovana znakova sada BP = Offset uzivatelovy znakove sady Funkce 01h - Nahrani 14radkoveho ROM fontu do zn. bloku ------------------------------------------------------- Popis: Tato funkce nahraje definici znakove sady 8x14 do nektereho ze znakovych bloku. Poznamka: Tato funkce inicializuje zobrazovaci mod. Vstup: AH = 11h Cislo sluzby AL = 01h Cislo funkce BL = Cislo znakoveho bloku kam se ma nacist ROM font 8x14 (0-7, EGA 0-3) Funkce 02h - Nahrani 8radkoveho ROM fontu do zn. bloku ------------------------------------------------------ Popis: Tato funkce nacte definici znakove sady 8x8 do nektereho ze znakovych bloku. Poznamka: Tato funkce inicializuje zobrazovaci mod. Vstup: AH = 11h Cislo sluzby AL = 02h Cislo funkce BL = Cislo znakoveho bloku kam se ma nacist ROM font 8x8 (0-7, EGA 0-3) Funkce 03h - Nastaveni znakove sady pro 512 znaku ------------------------------------------------- Popis: Tato funkce vytvori v textovych rezimech znakovou sadu s 512 znaky. Zmeni vyznam bitu 3 atributu - misto intenzity barvy bude vybirat ze dvou znakovych bloku (kazdy po 256 znacich). Vstup: AH = 11h Cislo sluzby AL = 03h Cislo funkce BL = bity 0,1,4 - pouzivany znakovy blok, pokud je bit 3 atributu = 0 bity 2,3,5 - pouzivany znakovy blok, pokud je bit 3 atributu = 1 Poznamka: Bity 4 a 5 pouziva pouze VGA, ktera ma k dispozici 8 znakovych bloku. Funkce 04 - Nahrani 16radkoveho ROM fontu do zn. bloku - pouze VGA ------------------------------------------------------------------ Popis: Tato funkce nahraje definici znakove sady 8x16 do nektereho ze znakovych bloku. Poznamka: Tato funkce inicializuje zobrazovaci mod. Vstup: AH = 11h Cislo sluzby AL = 04h Cislo funkce BL = Cislo znakoveho bloku kam se ma nacist ROM font 8x16 (0-7) Nasledujici 4 funkce (10h, 11h, 12h, 14h) jsou velmi podobne funkcim (00h, 01h, 02h a 04h). Je tu vsak nekolik rozdilu. Tyto funkce museji byt volany ihned po nastaveni zobrazovaciho modu, aktivni zobrazovaci stranka musi byt 0. Funkce dale prepocita pocet byte na znak, pocet radku na obrazovce a delku zobrazovaciho bufferu. Zmeni take nasledujici CRTC registry: /------------------------------------------------------------\ | Registr | Novy obsah | Vyznam | |----------+-----------------------------+-------------------| | 09h1 | pocet byte na znak - 1 | max. scan radka | |----------+-----------------------------+-------------------| | 0ah | pocet byte na znak - 2 | zacatek kurzoru | |----------+-----------------------------+-------------------| | 0bh | 0 | konec kurzoru | |----------+-----------------------------+-------------------| | 12h | (pocet radku + 1) * | vertikalni konec | | | * (pocet byte na znak) - 1 | obrazovky | |----------+-----------------------------+-------------------| | 14h2 | pocet byte na znak | pozice podtrzeni | \------------------------------------------------------------/ 1) Tento registr je prepocitavan pouze pro mod 07h 2) Toto je chyba v EGA/VGA BIOS. Mela by zde byt hodnota o 1 nizsi. Pri tomto nastaveni nebude podtrzeni (pokud je to nastaveno pomoci atributu) viditelne. Funkce 10h - Nacteni uzivatelem definovane znakove sady ------------------------------------------------------- Popis: Tato funkce nahradi implicitni znakovou sadu (nebo jeji cast) v nekterem ze znakovych bloku uzivatelem definovanou znakovou sadou. Vstup: AH = 11h Cislo sluzby AL = 10h Cislo funkce BL = Cislo znakoveho bloku k predefinovani (0-7, EGA 0-3) BH = Pocet byte na jeden znak (nejcasteji 8, 14, 16) CX = Pocet definovanych znaku DX = ASCII kod prvniho znaku v uzivatelem definovane znakove tabulce ES = Segment, ve kterem je uzivatelem definovana znakova sada BP = Offset uzivatelovy znakove sady Funkce 11h - Nahrani 14radkoveho ROM fontu do zn. bloku ------------------------------------------------------- Popis: Tato funkce nahraje definici znakove sady 8x14 do nektereho ze znakovych bloku. Vstup: AH = 11h Cislo sluzby AL = 11h Cislo funkce BL = Cislo znakoveho bloku kam se ma nacist ROM font 8x14 (0-7, EGA 0-3) Funkce 12h - Nahrani 8radkoveho ROM fontu do zn. bloku ------------------------------------------------------ Popis: Tato funkce nacte definici znakove sady 8x8 do nektereho ze znakovych bloku. Vstup: AH = 11h Cislo sluzby AL = 12h Cislo funkce BL = Cislo znakoveho bloku kam se ma nacist ROM font 8x8 (0-7, EGA 0-3) Funkce 14 - Nahrani 16radkoveho ROM fontu do zn. bloku - pouze VGA ------------------------------------------------------------------ Popis: Tato funkce nahraje definici znakove sady 8x16 do nektereho ze znakovych bloku. Vstup: AH = 11h Cislo sluzby AL = 14h Cislo funkce BL = Cislo znakoveho bloku kam se ma nacist ROM font 8x16 (0-7) Nasledujici funkce by mely byt pouzivany ihned po inicializaci grafickych rezimu (predchozi funkce pracovaly pouze v textovych rezimech). Funkce 20h - Nastav uzivatelsky font 8x8 v grafice -------------------------------------------------- Popis: Tato funkce nastavi INT 1fh tak, aby ukazoval na znakovou sadu 8x8 na znaky s ASCII kody 128-255. Pouziva se prevazne v kompatibilnich rezimech. Nastavi INT 1fh na hodnotu ulozenou ES:BP. Vstup: AH = 11h Cislo sluzby AL = 20h Cislo funkce ES = Segment obsahujici definovanou znakovou sadu BP = Offset znakove sady Function 21h - Nastaveni uzivatelskeho fontu pro graficke rezimy ---------------------------------------------------------------- Popis: Tato funkce nastavi INT 43h na uzivatelskou znakovou sadu. Vstup: AH = 11h Cislo sluzby AL = 21h Cislo funkce BL = Pocet radku na obrazovce 0 - uzivatelem definovano (v registru DL) 1 - 14 radek 2 - 25 radek 3 - 43 radek CX = Pocet byte na znak ES = Segment obsahujici uzivatelskou znakovou sadu BP = Offset uzivatelske znakove sady Funkce 22h - Nastavi ROM font 8x14 pro grafiku ---------------------------------------------- Popis: Tato funkce nastavi INT 43h na znakovou sadu 8x14 v ROM. Vstup: AH = 11h Cislo sluzby AL = 22h Cislo funkce BL = Pocet radku na obrazovce 0 - uzivatelem definovano (v registru DL) 1 - 14 radek 2 - 25 radek 3 - 43 radek Funkce 23h - Nastavi ROM font 8x8 pro grafiku --------------------------------------------- Popis: Tato funkce nastavi INT 43h na znakovou sadu 8x8 v ROM. Vstup: AH = 11h Cislo sluzby AL = 23h Cislo funkce BL = Pocet radku na obrazovce 0 - uzivatelem definovano (v registru DL) 1 - 14 radek 2 - 25 radek 3 - 43 radek Funkce 24h - Nastavi ROM font 8x16 pro grafiku ---------------------------------------------- Popis: Tato funkce nastavi INT 43h na znakovou sadu 8x16 v ROM. Vstup: AH = 11h Cislo sluzby AL = 24h Cislo funkce BL = Pocet radku na obrazovce 0 - uzivatelem definovano (v registru DL) 1 - 14 radek 2 - 25 radek 3 - 43 radek Funkce 30h - Zjistuje informace o fontu --------------------------------------- Popis: Tato funkce vraci informace o pozadovanem fontu (znakove sade). Poznamka: Fonty 9x14 a 9x16 jsou az na definice nekterych znaku shodne s fonty 8x14 a 8x16. Pouze u grafickych symbolu (ramecky a blokove znaky) je osmy bod kopirovan na pozici devateho, aby ramecky nebyly prerusovane. U ostatnich znaku zustava misto devateho bodu vzdy volne. Vstup: AH = 11h Cislo sluzby AL = 30h Cislo 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 (hornich 128 znaku) 05h Zjisti pointer na ROM 9x14 font 06h Zjisti pointer na ROM 8x16 font 07h Zjisti pointer na ROM 9x16 font Vystup: CX = Pocet byte na znak fontu, ktery je na obrazovce (ne toho, na ktery se dotazujeme) DL = Pocet radku na obrazovce - 1 (VGA) Pocet radku na obrazovce (EGA) ES = Segment ulozeni pozadovaneho fontu BP = Offset ulozeni pozadovaneho fontu Sluzba 12h - Alternativni vyber =============================== Popis: Tato sluzba obasahuje funkce, ktere zjistuji aktualni nastaveni adapteru a mohou instalovat novou rutinu pro obsluhu stisknuti klavesy PrtScr. Na adapterech VGA pak obsahuje jeste nekolik doplnkovych funkci. Vstup: AH = 12h Cislo sluzby Funkce 10h - Zjisteni informace o EGA ------------------------------------- Popis: Zjisti aktualni konfiguraci graficke karty VGA nebo EGA. O VGA vsak nezjisti vsechny udaje, pouze ty, ktera ma VGA spolecne s EGA. Vstup: AH = 12h Cislo sluzby BL = 10h Cislo funkce Vystup: BH = 0 - aktivni je barevny mod (registry adapteru jsou na portech 3d?h) 1 - aktivni je monochromaticky mod (registry adapteru jsou na portech 3b?h) BL = Velikost instalovane pameti na videokarte 0 = 64K 1 = 128K 2 = 192K 3 = 256K CH = Obsahuje kopii Feature Control registru CL = Nastaveni switchu na karte EGA (1 = OFF, 0 = ON) bit 0 - switch 1 bit 1 - switch 2 bit 2 - switch 3 bit 3 - switch 4 Funkce 20h - Vyber alternativni rutinu pro tisk obrazovky --------------------------------------------------------- Popis: Volani teto funkce nahradi rutinu pro tisk obrazovky z ROM BIOS rutinou z EGA/VGA BIOS, ktera zvlada tisk i pro zobrazovaci rezimy s vice nez 25 radky. Vstup: AH = 12h Cislo sluzby BL = 20h Cislo funkce Funkce 30h - Nastaveni vertikalniho rozliseni - pouze VGA --------------------------------------------------------- Popis: Tato funkce nastavi vertikalni rozliseni pro textovy rezim, ktery bude inicializovan. Tato funkce umoznuje i na lepsich grafickych adapterech, dosahnout stejne kvality rozliseni jako na tech starsich. CGA pouziva 200 radek, MDA a EGA 350 a konecne VGA 400 radek. Vstup: AH = 12h Cislo sluzby BL = 30h Cislo funkce AL = 0 - 200 radek 1 - 350 radek 2 - 400 radek Vystup: Bude v registrech obsazen po zavolani sluzby AL = 12h Pokud je funkce podporovana adapterem a byla uspesne provedena. Funkce 31h - Zapnuti/vypnuti nahrani palety - pouze VGA ------------------------------------------------------- Popis: Tato funkce umoznuje zvolit, zda pri inicializaci zobrazovaciho rezimu bude nahrana standardni paleta a nebo se v cinnosti ponecha aktualni paleta. Na kartach EGA je aktualni paleta vzdy prepsana standardni paletou. Vstup: AH = 12h Cislo sluzby BL = 31h Cislo funkce AL = 0 - Povol prepisovani aktualni palety 1 - Zachovavej aktualni paletu Vystup: Bude v registrech obsazen po zavolani sluzby AL = 12h Pokud je funkce podporovana adapterem a byla uspesne provedena. Funkce 32h - Zapnuti/vypnuti pristupu do videopameti - pouze VGA ---------------------------------------------------------------- Popis: Tato funkce povoluje a zakazuje pristup do videopameti a k registrum videoadapteru. Pokud se pristup do pameti zakaze, vzhled obrazovky ani obsah videopameti se nezmeni, ale zapisy a cteni do videopameti budou ignorovany do te doby, nez se zapis povoli. Vstup: AH = 12h Cislo sluzby BL = 32h Cislo funkce AL = 0 - povol zapis 1 - zakaz zapis Vystup: Bude v registrech obsazen po zavolani sluzby AL = 12h Pokud je funkce podporovana adapterem a byla uspesne provedena. Funkce 33h - Zapnuti/vypnuti prepocitavani na stupne sedi - pouze VGA --------------------------------------------------------------------- Popis: Tato funkce povoluje a zakazuje prepocitavani barev na odstiny sedi po inicializaci zobrazovaciho modu a po zmene registru palety. Stavajici hodnoty barevnych slozek budou urceny nasledujicimi vztahy: R = 0.299 * R G = 0.587 * G B = 0.114 * B Vstup: AH = 12h Cislo sluzby BL = 33h Cislo funkce AL = 0 - povol prepocitavani na stupne sedi 1 - zakaz prepocitavani na stupne sedi Vystup: Bude v registrech obsazen po zavolani sluzby AL = 12h Pokud je funkce podporovana adapterem a byla uspesne provedena. Funkce 34h - Zapnuti/vypnuti emulace kurzoru - pouze VGA -------------------------------------------------------- Popis: Tato funkce povoluje a zakazuje emulaci textoveho kurzoru. Pokud je emulace zapnuta, je informace o zacatku a konci kurzoru prepocitana z puvodniho rozsahu CGA 8 radku na znak na aktualni pocet radku na znak. Pokud je emulace vypnuta, hodnoty se neprepocitavaji a bez uprav se pouziji pro velikost kurzoru. Vstup: AH = 12h Cislo sluzby BL = 34h Cislo funkce AL = 0 - povol emulaci kurzoru 1 - zakaz emulaci kurzoru Vystup: Bude v registrech obsazen po zavolani sluzby AL = 12h Pokud je funkce podporovana adapterem a byla uspesne provedena. Funkce 35h - Prepinani monitoru - pouze VGA ------------------------------------------- Popis: Tato funkce prepina mezi adapterem umistenym na desce pocitace a externim, pokud mohou nastat nejake problemy s adresovanim nebo pristupem k portum. Pokud jsou v pocitaci dva adaptery, externi je pouzit jako defaultni adapter. Pri prvni zmene adpteru se musi volat dve funkce po sobe (AL=0 a AL=1). Pro dalsi prepinani se pouzivaji opet dve volani. Nejprve AL=2, k vypnuti aktivniho adapteru a pote AL=3, k zapnuti neaktivniho adapteru. Program musi v pameti vyhradit dva 128 byte dlouhe buffery pro ukladani stavovych informaci adapteru. Vstup: AH = 12h Cislo sluzby BL = 35h Cislo funkce AL = 0 - Prvni vypnuti externiho adapteru ES:DX - ukazatel na 128 byte dlouhy buffer pro ulozeni stavovych informaci adapteru 1 - Prvni zapnuti graficke karty na desce 2 - Vypni aktivni adapter ES:DX - ukazatel na 128 byte dlouhy buffer pro ulozeni stavovych informaci adapteru 3 - Zapni neaktivni adapter ES:DX - ukazatel na 128 byte dlouhy buffer s drive ulozenymi stavovymi informacemi Vystup: Bude v registrech obsazen po zavolani sluzby AL = 12h Pokud je funkce podporovana adapterem a byla uspesne provedena. Funkce 36h - Zapnuti/vypnuti obrazovky - pouze VGA -------------------------------------------------- Popis: Tato funkce zapina a vypina obrazovku. Muze byt pouzita napriklad jako jednoduchy setric obrazovky (screen saver). Nebo muzete vypnout obrazovku, vykreslit nejaky slozitejsi obrazek. Pak obrazovku zapnout a obrazek se objevi cely najednou bez pomaleho vykreslovani. Vstup: AH = 12h Cislo sluzby BL = 36h Cislo funkce AL = 0 - Zapnuti obrazovky (normalne) 1 - Vypnuti obrazovky Vystup: Bude v registrech obsazen po zavolani sluzby AL = 12h Pokud je funkce podporovana adapterem a byla uspesne provedena. Sluzba 13h - Vypsani znakoveho retezce na obrazovku =================================================== Popis: Tato sluzba zobrazi retezec znaku v pameti na obrazovku. Jsou dve moznosti: retezec v pameti obsahuje pouze znaky, jejich atribut bude urcen registrem BL. Druhou moznosti je, ulozit do pameti posloupnost znak, atribut, znak, atribut... Kazdy znak pak ma definovan svuj vlastni atribut. Muzete take urcit zda se ma kurzor presunout na konec vypisovaneho retezce nebo jestli ma zustat na sve puvodni pozici. Tato sluzba je podobna sluzbe 0eh. Ridici znaky jako 07h bell, 0dh CR, 0ah LF, 08h BS nejsou zobrazovany jako znaky, ale je provedena jim odpovidajici cinnost (pipnuti, presun kurzoru na zacatek radky, posun kurzoru o radek dolu a smazani posledniho znaku). Vstup: AH = 13h Cislo sluzby AL = bit 0 = 0 - kurzor neni presouvan = 1 - kurzor je presunut na konec retezce bit 1 = 0 - retezec obsahuje pouze znaky 1 - retezec obsahuje i atributy BL = Atribut znaku retezce (Pokud bit 1 registru AL je 0) BH = Cislo obrazove stranky (viz. sluzba 05h) CX = Pocet znaku (nezapocitavaji se atributy) DX = Souradnice prvniho znaku DH - Radka DL - Sloupec ES = Segment retezce k vypsani BP = Offset retezce k vypsani Sluzba 1ah - Cteni/zapis kombinace monitoru - pouze VGA ======================================================= Popis: Tato umoznuje zjistit a nastavit kody, ktere urcuji typ primarniho a sekundarniho displeje. Vstup: AH = 1ah Cislo sluzby Tabulka kodu kombinaci monitoru: /---------------------------------------\ |Kod | Druh monitoru | |----+----------------------------------| |00h | Monitor neni pripojen | |01h | MDA | |02h | CGA | |04h | EGA s barevnym monitorem | |05h | EGA s monochromatickym monitorem | |06h | PGC | |07h | VGA s monochromatickym monitorem | |08h | VGA s barevnym monitorem | |0ah | MCGA s digitalnim monitorem | |0bh | MCGA s monochromatickym monitorem| |0ch | MCGA s barevnym monitorem | |ffh | Neznamy typ monitoru | \---------------------------------------/ Funkce 00h - Cteni kombinace monitoru - pouze VGA ------------------------------------------------- Popis: Zjisti aktualni konfiguraci monitoru. Vstup: AH = 1ah Cislo sluzby AL = 00h Cislo funkce Vystup: Bude v registrech obsazen po zavolani sluzby AL = 1ah Volani funkce probehlo uspesne BH = Kod sekundarniho displeje BL = Kod aktivniho displeje Funkce 01h - Nastaveni kombinace monitoru - pouze VGA ----------------------------------------------------- Popis: Nastavi aktualni konfiguraci monitoru. Vstup: AH = 1ah Cislo sluzby AL = 01h Cislo funkce BH = Kod sekundarniho displeje BL = Kod aktivniho displeje Vystup: Bude v registrech obsazen po zavolani sluzby AL = 1ah Volani funkce probehlo uspesne Sluzba 1bh - Zjisteni stavovych informaci - pouze VGA ===================================================== Popis: Tato sluzba zjisti informace o aktualnim nastaveni grafickeho adapteru. Pred volanim teto sluzby musite v pameti vyhradit 64 byte pro ulozeni informaci. Vstup: AH = 1bh Cislo sluzby BX = Typ implementace (musi byt 0) ES = Segment, ve kterem je vymezenych 64 byte pameti DI = Offset 1. byte vymezene pameti Vystup: Bude v registrech obsazen po zavolani sluzby AL = 1bh Volani funkce probehlo uspesne Format tabulky na adrese ES:DI (delka 64 byte): /-----------------------------------------------------------\ |Offset | Velikost | Popis | |-------+----------+----------------------------------------| | 00h | 1 word | Offset staticke tabulky rezimu | |-------+----------+----------------------------------------| | 02h | 1 word | Segment staticke tabulky rezimu | |-------+----------+----------------------------------------| | 04h | 1 byte | Cislo aktualniho zobrazovaciho rezimu | |-------+----------+----------------------------------------| | 05h | 1 word | Pocet zobrazitelnych textovych sloupcu | |-------+----------+----------------------------------------| | 07h | 1 word | Velikost zabrazovane pameti video | | | | adapteru | |-------+----------+----------------------------------------| | 09h | 1 word | Pocatecni adresa videopameti | |-------+----------+----------------------------------------| | 0bh | 1 word | Pozice kurzoru v zobrazovaci strance 0 | | | | (Vyssi byte - radka, | | | | nizzsi byte - sloupec) | |-------+----------+----------------------------------------| | 0dh | 1 word | Pozice kurzoru v zobrazovaci strance 1 | |-------+----------+----------------------------------------| | 0fh | 1 word | Pozice kurzoru v zobrazovaci strance 2 | |-------+----------+----------------------------------------| | 11h | 1 word | Pozice kurzoru v zobrazovaci strance 3 | |-------+----------+----------------------------------------| | 13h | 1 word | Pozice kurzoru v zobrazovaci strance 4 | |-------+----------+----------------------------------------| | 15h | 1 word | Pozice kurzoru v zobrazovaci strance 5 | |-------+----------+----------------------------------------| | 17h | 1 word | Pozice kurzoru v zobrazovaci strance 6 | |-------+----------+----------------------------------------| | 19h | 1 word | Pozice kurzoru v zobrazovaci strance 7 | |-------+----------+----------------------------------------| | 1bh | 1 byte | Pocatecni radka kurzoru | |-------+----------+----------------------------------------| | 1ch | 1 byte | Koncova radka kurzoru | |-------+----------+----------------------------------------| | 1dh | 1 byte | Aktivni zobrazovaci stranka | |-------+----------+----------------------------------------| | 1eh | 1 word | Adresa portu, na kterych jsou mapovany | | | | CRTC registry | |-------+----------+----------------------------------------| | 20h | 1 byte | Hodnota registru 3?8h | |-------+----------+----------------------------------------| | 21h | 1 byte | Hodnota registru 3?9h | |-------+----------+----------------------------------------| | 22h | 1 byte | Pocet zobrazitelnych textovych radek | |-------+----------+----------------------------------------| | 23h | 1 byte | Vyska znaku v pixelech (pocet byte na | | | | znak) | |-------+----------+----------------------------------------| | 25h | 1 byte | Kod primarniho displeje | | | | (viz. tabulka kodu kombinaci monitoru) | |-------+----------+----------------------------------------| | 26h | 1 byte | Kod sekundarniho displeje | | | | (viz. tabulka kodu kombinaci monitoru) | |-------+----------+----------------------------------------| | 27h | 1 word | Pocet barev zobrazitelnych v aktualnim | | | | zobrazovacim rezimu | |-------+----------+----------------------------------------| | 29h | 1 byte | Pocet dostupnych zobrazovacich stranek | | | | v aktualnim zobrazovacim rezimu | |-------+----------+----------------------------------------| | 2ah | 1 byte | Pocet rastrovych radek na obrazovce: | | | | 0 - 200 radek | | | | 1 - 350 radek | | | | 2 - 400 radek | | | | 3 - 480 radek | |-------+----------+----------------------------------------| | 2bh | 1 byte | Cislo primarniho znakoveho bloku | |-------+----------+----------------------------------------| | 2ch | 1 byte | Cislo sekundarniho znakoveho bloku | |-------+----------+----------------------------------------| | 2dh | 1 byte | Informace o obrazovem systemu: | | | | Bit Popis (kdyz bit = 1) | | | | --- ---------------------------------| | | | 0 Podporuje vsechny mody | | | | 1 Barvy jsou prepocitavany na | | | | odstiny sedi | | | | 2 Pripojen je monochromaticky | | | | monitor | | | | 3 Neni nahravana standardni paleta | | | | 4 Emulace CGA kurzoru | | | | 5 1 = blikani, 0 = intenzita barvy | | | | pozadi | | | | 6-7 Vyhrazeno | |-------+----------+----------------------------------------| | 2eh | 3 byte | Vyhrazeno | |-------+----------+----------------------------------------| | 31h | 1 byte | Velikost dostupne videopameti | | | | 0 - 64K | | | | 1 - 128K | | | | 2 - 192K | | | | 3 - 256K | |-------+----------+----------------------------------------| | 32h | 1 byte | Doplnkove informace o zobrazovaci | | | | Bit Popis (kdyz bit = 1) | | | | --- ---------------------------------| | | | 0 Je pouzivana 512znakova sada | | | | 1 Je pouzivana oblast pro ulozeni | | | | palety | | | | 2 Je pouzivana uzivatelem | | | | definovana znakova sada | | | | 3 V grafickem rezimu je pouzivana | | | | uzivatelem definovana znakova | | | | sada | | | | 4 Je pouzivana uzivatelem | | | | definovana paleta | | | | 5 Je pouzivana podpora | | | | dvou-monitoroveho systemu | | | | 6-7 Rezervovano | |-------+----------+----------------------------------------| | 33h | 13 byte | Rezervovano | \-----------------------------------------------------------/ Format staticke tabulky rezimu (delka 16 byte): /-----------------------------------------------------------\ |Offset | Velikost| Popis | |-------+---------+-----------------------------------------| | 00h | 1 byte | Podporovane videomody | | | | bit 0 = 1 Mod 0 je podporovan | | | | bit 1 = 1 Mod 1 je podporovan | | | | bit 2 = 1 Mod 2 je podporovan | | | | bit 3 = 1 Mod 3 je podporovan | | | | bit 4 = 1 Mod 4 je podporovan | | | | bit 5 = 1 Mod 5 je podporovan | | | | bit 6 = 1 Mod 6 je podporovan | | | | bit 7 = 1 Mod 7 je podporovan | |-------+---------+-----------------------------------------| | 01h | 1 byte | Podporovane videomody | | | | bit 0 = 1 Mod 8 je podporovan | | | | bit 1 = 1 Mod 9 je podporovan | | | | bit 2 = 1 Mod 0ah je podporovan | | | | bit 3 = 1 Mod 0bh je podporovan | | | | bit 4 = 1 Mod 0ch je podporovan | | | | bit 5 = 1 Mod 0dh je podporovan | | | | bit 6 = 1 Mod 0eh je podporovan | | | | bit 7 = 1 Mod 0fh je podporovan | |-------+---------+-----------------------------------------| | 02h | 1 byte | Podporovane videomody | | | | bit 0 = 1 Mod 10h je podporovan | | | | bit 1 = 1 Mod 11h je podporovan | | | | bit 2 = 1 Mod 12h je podporovan | | | | bit 3 = 1 Mod 13h je podporovan | |-------+---------+-----------------------------------------| | 03h | 4 byte | Rezervovano | |-------+---------+-----------------------------------------| | 07h | 1 byte | Pocet rastrovych radek v textovych | | | | rezimech: bit 0 = 1 - 200 radek | | | | bit 1 = 1 - 350 radek | | | | bit 2 = 1 - 400 radek | |-------+---------+-----------------------------------------| | 08h | 1 byte | Celkovy pocet znakovych bloku v | | | | textovych rezimech | |-------+---------+-----------------------------------------| | 09h | 1 byte | Maximalni pocet najednou pouzivanych | | | | znakovych bloku v textovych rezimech | |-------+---------+-----------------------------------------| | 0ah | 1 byte | Doplnkove informace | | | | Bit Popis (kdyz bit = 1) | | | | --- ---------------------------------| | | | 0 Lze pouzivat vsechny zobr. mody | | | | 1 Je podporovano prepocitavani | | | | barev na odstiny sedi | | | | 2 Je podporovana uzivatelem | | | | definovana znakova sada | | | | 3 Je podporovana uzivatelem | | | | definovana paleta | | | | 4 Je podporovana emulace CGA | | | | kurzoru | | | | 5 Jsou pritomny registry palety EGA| | | | 6 Jsou pritomny registry palety DAC| | | | 7 Je podporovano nekolik sad DAC | | | | registru | |-------+---------+-----------------------------------------| | 0bh | 1 byte | Doplnkove informace | | | | Bit Popis (kdyz bit = 1) | | | | --- ---------------------------------| | | | 0 Podpora svetelneho pera | | | | 1 Podpora sluzby 1ch | | | | 2 Podpora volby mezi intenzitou | | | | pozadi a blikanim | | | | 3 Je podporovan kod kombinace | | | | monitoru | | | | 4-7 Rezervovano | |-------+---------+-----------------------------------------| | 0ch | 1 word | Rezervovano | |-------+---------+-----------------------------------------| | 0eh | 1 byte | Priznaky uchovavani nastaveni | | | | Bit Popis (kdyz bit = 1) | | | | --- ---------------------------------| | | | 0 Uchovava se 512znakova sada | | | | 1 Uchovava se aktualni paleta | | | | 2 Uzivatelem definovana zn. sada | | | | 3 Uzivatelem definovana zn. sada v | | | | grafickych rezimech | | | | 4 Uzivatelem definovana paleta | | | | 5 Podpora dvou-monitoroveho systemu| | | | 6-7 Rezervovano | |-------+---------+-----------------------------------------| | 0fh | 1 byte | Rezervovano | \-----------------------------------------------------------/ Sluzba 1ch - Ulozeni/obnoveni aktualniho nastaveni adapteru - pouze VGA ======================================================================= Popis: Tato sluzba uklada a opet obnovuje nastaveni grafickeho adapteru a aktualniho zobrazovaciho rezimu (BIOS oblast, registry adapteru, registry palety). Program musi v pameti vyhradit misto pro ulozeni informaci. Pozadovanou velikost bufferu vraci funkce 00h. Poznamka: Registr CX definuje co se bude ukladat. Kazdy bit definuje jednu cast k ukladani. Pro ulozeni vsech tri skupin informaci pouzijte CX = 7. Funkce 00h - Zjisteni velikosti bufferu - pouze VGA --------------------------------------------------- Vstup: AH = 1ch Cislo sluzby AL = 00h Cislo funkce CX = Urceni informaci k ulozeni/nastaveni (pokud se bit = 1, s informaci se pracuje) Bit 0 - registry grafickeho adapteru Bit 1 - datova oblast BIOS Bit 2 - registry palety a DAC registry Vystup: Bude v registrech obsazen po zavolani sluzby AL = 1ch Funkce je podporovana BX = Velikost bufferu (v 64 byte slouhych blocich) Funkce 01h - Ulozeni nastaveni - pouze VGA ------------------------------------------ Vstup: AH = 1ch Cislo sluzby AL = 01h Cislo funkce ES = Segment ukladaci oblasti (bufferu) BX = Offset ukladaci oblasti (bufferu) CX = Urceni informaci k ulozeni/nastaveni (pokud se bit = 1, s informaci se pracuje) Bit 0 - registry grafickeho adapteru Bit 1 - datova oblast BIOS Bit 2 - registry palety a DAC registry Vystup: Bude v registrech obsazen po zavolani sluzby AL = 1ch Funkce je podporovana Funkce 02h - Obnoveni nastaveni - pouze VGA ------------------------------------------- Vstup: AH = 1ch Cislo sluzby AL = 02h Cislo funkce ES = Segment ukladaci oblasti (bufferu) BX = Offset ukladaci oblasti (bufferu) CX = Urceni informaci k ulozeni/nastaveni (pokud se bit = 1, s informaci se pracuje) Bit 0 - registry grafickeho adapteru Bit 1 - datova oblast BIOS Bit 2 - registry palety a DAC registry Vystup: Bude v registrech obsazen po zavolani sluzby AL = 1ch Funkce je podporovana
Copyright © Jiri Kosek