Ukladaci oblast BIOS Pokazde, kdyz je inicializovan zobrazovaci rezim, jsou registry nastaveny na jejich standardni hodnoty pro zvoleny rezim a je aktivovana standardni znakova sada. Zjisteni techto standardnich hodnot nastaveni je na kartach EGA ponekud obtizne, nebot registry teto karty neumoznuji cteni jejich obsahu. Tyto hodnoty vyuzivaji programy, ktere nastavuji vlastni zobrazovaci rezimy a nebo pouzivaji prepinani nekolika zobrazovacich rezimu. Na pomoc zde prichazi EGA/VGA BIOS, ktery v pameti RAM vyhradi nekolik oblasti s informacemi, ktere pomahaji nektere nedostatky v praci s registry na EGA obejit (samozrejme, ze tyto informace lze vyuzit i na adaptertech VGA). Na adrese 0040:00a8 je ulozen ukazatel (BIOS_SAVE_PTR) na ukladaci tabulku osmi ukazatelu. Po spusteni pocitace je tato tabulka ulozena v pameti ROM v EGA/VGA BIOS. Jediny ukazatel z osmi je inicializovan (na VGA jeste ukazatel na sekundarni ukladaci tabulku). Je to ukazatel na tabulku parametru. Ostatni ukazatele ukladaci tabulky jsou nastaveny na 0000:0000, tj. jsou zatim nepouzity. Pokud chcete ukadaci tabulku modifikovat musite ji nejprve presunout z ROM do RAM a zmenit ukazatel na adrese 0040:00a8. Ukladaci tabulka Format ukladaci tabulky je nasledujici: /----------------------------------------------------------------------------------------------------\ | Offset | Velikost | Popis | |--------+----------+--------------------------------------------------------------------------------| | 0 | DWORD | Ukazatel na tabulku parametru | | | | Tato tabulka obsahuje standardni nastaveni registru adapteru pro vsechny | | | | zobrazovaci rezimy, vcetne internich (08-0ch). Na EGA je to jedina tabulka, | | | | ktera je pozadovana pro spravnou funkci adapteru. Na VGA je k cinnosti | | | | zapotrebi jeste sekundarni ukladaci tabulky. | |--------+----------+--------------------------------------------------------------------------------| | 4 | DWORD | Ukazatel na dynamickou ukladaci oblast | | | | Tento ukazatel ukazuje na 256 byte velkou oblast RAM, kam se pri inicializaci | | | | zobrazovaciho rezimu ulozi nastaveni 16 paletovych registru a registru | | | | obsahujiciho barvu ramecku. Pri kazde zmene registru palety, je zmenena | | | | i prislusna hodnota v teto tabulce (zmena musi byt provadena pomoci sluzeb | | | | BIOS, primy zapis na porty adapteru zde samozrejme nebude promitnut). | |--------+----------+--------------------------------------------------------------------------------| | 8 | DWORD | Ukazatel na pomocnou tabulku textovych rezimu | | | | Tento ukazatel ukazuje na tabulku, ktera obsahuje deskriptory pro znakove sady | | | | textovych rezimu. Behem inicializace zobrazovaciho rezimu je do bitove roviny | | | | 2 nahrana standardni znakova sada a pokud tento ukazatel neni 0000:0000 je | | | | nahrana i znakova sada urcena pomocnou tabulkou textovych rezimu. Pokud je | | | | jako znakovy blok teto znakove sady uvedena 0, nahradi se novou znakovou sadou | | | | standardni znakova sada. V opacnem pripade jsou k dispozici dve znakove sady | | | | najednou. | |--------+----------+--------------------------------------------------------------------------------| | 12 | DWORD | Ukazatel na pomocnou tabulku grafickych rezimu | | | | Tento ukazatel ukazuje na tabulku, ktera obsahuje popis pouzite znakove sady | | | | pro graficke rezimy. Pokud je tento ukazatel nastaven na 0000:0000 pouzije se | | | | standardni znakova sada z ROM. V opacnem pripade se pouzije uzivatelem | | | | nadefinovana znakova sada. | |--------+----------+--------------------------------------------------------------------------------| | 10h | DWORD | Ukazatel na sekundarni ukladaci tabulku - pouze VGA | | | | Tabulka rozsirujici moznosti ukladaci tabulky pro potreby adapteru VGA. | |--------+----------+--------------------------------------------------------------------------------| | 14h- | 12 byte | Nepouzito | | -1fh | | | \----------------------------------------------------------------------------------------------------/ Sekundarni ukladaci tabulka Sekundarni ukladaci tabulka pridava nekolik dalsich polozek: /----------------------------------------------------------------------------------------------------\ | Offset | Velikost | Popis | |--------+----------+--------------------------------------------------------------------------------| | 0 | WORD | Velikost sekundarni ukladaci tabulky v byte. Do teto velikosti se zapocitava | | | | i tato prvni dvojslabika. Velikost tabulky je tu z duvodu moznosti dalsiho | | | | rozsireni. | |--------+----------+--------------------------------------------------------------------------------| | 2 | DWORD | Ukazatel na tabulku kombinaci monitoru | | | | Tato tabulka obsahuje mozne kombinace monitoru v systemu. | |--------+----------+--------------------------------------------------------------------------------| | 6 | DWORD | Ukazatel na druhou pomocnou tabulku textovych rezimu | | | | Pokud neni tento ukazatel nastaven na 0000:0000 ukazuje na deskriptor | | | | sekundarni znakove sady. Po inicializaci modu je tato znakova sada nahrana do | | | | bitove roviny, muzete tak pouzivat 512 uzivatelem definovanych znaku (pokud i | | | | pomoci prvni pomocne tabulky textovyxh rezimu nahrajete vlastni znakovou | | | | sadu). | |--------+----------+--------------------------------------------------------------------------------| | 10 | DWORD | Ukazatel na tabulku profilu palety | | | | Pomoci tabulky profilu palety muzete nastavit vlastni hodnoty registru palety | | | | a DAC registru, ktere se obnovi po kazde inicializaci rezimu. | \----------------------------------------------------------------------------------------------------/ Tabulka parametru Tato tabulka obsahuje nastaveni registru adapteru pro kazdou obmenu zobrazovacich rezimu (jsou zde tedy polozky pro rezim 0 pro 200, 350 i 400 radku). Tabulka odpovidajici jednomu rezimu je 64 byte dlouha a ma nasledujici strukturu: /----------------------------------------------------------------------------------------------------\ | Offset | Velikost | Popis | |--------+----------+--------------------------------------------------------------------------------| | 0 | 1 BYTE | Pocet zobrazovanych sloupcu | |--------+----------+--------------------------------------------------------------------------------| | 1 | 1 BYTE | Pocet zabrazovanych radek | |--------+----------+--------------------------------------------------------------------------------| | 2 | 1 BYTE | Vyska znaku v pixelech | |--------+----------+--------------------------------------------------------------------------------| | 3 | 1 WORD | Pamet potrebna pro jednu obrazovou stranku | |----------------------------------------------------------------------------------------------------| | Registry sequenceru: | |----------------------------------------------------------------------------------------------------| | 5 | 1 BYTE | Rezim casovace (Clocking Mode) | |--------+----------+--------------------------------------------------------------------------------| | 6 | 1 BYTE | Map mask registr | |--------+----------+--------------------------------------------------------------------------------| | 7 | 1 BYTE | Vyber znakoveho bloku (Character Map Select) | |--------+----------+--------------------------------------------------------------------------------| | 8 | 1 BYTE | Pametovy rezim (Memory Mode) | |----------------------------------------------------------------------------------------------------| | Externi registry: | |----------------------------------------------------------------------------------------------------| | 9 | 1 BYTE | Miscellaneous Output register | |----------------------------------------------------------------------------------------------------| | CRTC Registry: | |----------------------------------------------------------------------------------------------------| | 0ah | 1 BYTE | Celkovy horizontalni pocet znaku | |--------+----------+--------------------------------------------------------------------------------| | 0bh | 1 BYTE | Horizontalni pocet zobrazovanych znaku | |--------+----------+--------------------------------------------------------------------------------| | 0ch | 1 BYTE | Zacatek horizontalniho zatemneni | |--------+----------+--------------------------------------------------------------------------------| | 0dh | 1 BYTE | Konec horizontalniho zatemneni | |--------+----------+--------------------------------------------------------------------------------| | 0eh | 1 BYTE | Zacatek horizontalniho zpetneho chodu paprsku | |--------+----------+--------------------------------------------------------------------------------| | 0fh | 1 BYTE | Konec horizontalniho zpetneho chodu paprsku | |--------+----------+--------------------------------------------------------------------------------| | 10h | 1 BYTE | Celkovy vertikalni pocet radek | |--------+----------+--------------------------------------------------------------------------------| | 11h | 1 BYTE | Registr preteceni | |--------+----------+--------------------------------------------------------------------------------| | 12h | 1 BYTE | Verikalni posun ve znakovych rezimech | |--------+----------+--------------------------------------------------------------------------------| | 13h | 1 BYTE | Pocet radek na znak | |--------+----------+--------------------------------------------------------------------------------| | 14h | 1 BYTE | Zacatek kurzoru | |--------+----------+--------------------------------------------------------------------------------| | 15h | 1 BYTE | Konec kurzoru | |--------+----------+--------------------------------------------------------------------------------| | 16h | 1 BYTE | Nepouzito | |--------+----------+--------------------------------------------------------------------------------| | 17h | 1 BYTE | Nepouzito | |--------+----------+--------------------------------------------------------------------------------| | 18h | 1 BYTE | Nepouzito | |--------+----------+--------------------------------------------------------------------------------| | 19h | 1 BYTE | Nepouzito | |--------+----------+--------------------------------------------------------------------------------| | 1ah | 1 BYTE | Zacatek vertikalniho zpetneho chodu | |--------+----------+--------------------------------------------------------------------------------| | 1bh | 1 BYTE | Konec vertikalniho zpetneho chodu | |--------+----------+--------------------------------------------------------------------------------| | 1ch | 1 BYTE | Vertikalni pocet zobrazovanych radek | |--------+----------+--------------------------------------------------------------------------------| | 1dh | 1 BYTE | Offset | |--------+----------+--------------------------------------------------------------------------------| | 1eh | 1 BYTE | Pozice podtrzeni | |--------+----------+--------------------------------------------------------------------------------| | 1fh | 1 BYTE | Zacatek vertikalniho zatemneni | |--------+----------+--------------------------------------------------------------------------------| | 20h | 1 BYTE | Konec vertikalniho zatemneni | |--------+----------+--------------------------------------------------------------------------------| | 21h | 1 BYTE | Ovladani rezimu | |--------+----------+--------------------------------------------------------------------------------| | 22h | 1 BYTE | Porovnani radky | |----------------------------------------------------------------------------------------------------| | Registry atributoveho kontroleru: | |----------------------------------------------------------------------------------------------------| | 23h- | 16 BYTE | Paletove registry 0-15 | | -32h| | | |--------+----------+--------------------------------------------------------------------------------| | 33h | 1 BYTE | Rezim atributoveho kontroleru | |--------+----------+--------------------------------------------------------------------------------| | 34h | 1 BYTE | Barva ramecku | |--------+----------+--------------------------------------------------------------------------------| | 35h | 1 BYTE | Povoleni bitovych rovin | |--------+----------+--------------------------------------------------------------------------------| | 36h | 1 BYTE | Horizontalni posun | |----------------------------------------------------------------------------------------------------| | Registry grafickeho kontroleru: | |----------------------------------------------------------------------------------------------------| | 37h | 1 BYTE | Set/Reset | |--------+----------+--------------------------------------------------------------------------------| | 38h | 1 BYTE | Povoleni Set/Reset (Enable Set/Reset) | |--------+----------+--------------------------------------------------------------------------------| | 39h | 1 BYTE | Porovnani barev (Color Compare) | |--------+----------+--------------------------------------------------------------------------------| | 3ah | 1 BYTE | Kombinace dat (Data Rotate) | |--------+----------+--------------------------------------------------------------------------------| | 3bh | 1 BYTE | Mapa pro cteni (Read Map Select) | |--------+----------+--------------------------------------------------------------------------------| | 3ch | 1 BYTE | Rezim grafickeho kontroleru (Mode Register) | |--------+----------+--------------------------------------------------------------------------------| | 3dh | 1 BYTE | Ruzne (Miscellaneous) | |--------+----------+--------------------------------------------------------------------------------| | 3eh | 1 BYTE | Eliminace barev (Color Don't Care) | |--------+----------+--------------------------------------------------------------------------------| | 3fh | 1 BYTE | Bit mask | \----------------------------------------------------------------------------------------------------/ Nastaveni registru zacatek a konec kurzoru pouziva nastaveni BIOS, ktere je kompatibilni s CGA, tj. 8radkove hodnoty jsou prevedeny na odpovidajici 14 ci 16radkove. V tabulce parametru pro kartu EGA jsou ulozena nastaveni registru pro 23 modu v nasledujicim poradi: 0-3 pro CGA, 4-0eh, 0fh-10h pokud je mene nez 64K pameti, 0fh-10h pokud je vice jak 64K pameti, 0-3 pro EGA (350 radek). VGA pridava dalsich 6 modu: 0-3 (400 radek), 7 (400 radek), 11h-13h. Pomocna tabulka textovych rezimu Tato tabulka definuje parametry rezidentni, uzivatelem definovane znakove sady. Jeji format je: /----------------------------------------------------------------------------------------------------\ | Offset | Velikost | Popis | |--------+----------+--------------------------------------------------------------------------------| | 0 | 1 BYTE | Vyska znaku v bodech | |--------+----------+--------------------------------------------------------------------------------| | 1 | 1 BYTE | Znakovy blok (0-3 EGA, 0-7 VGA) | |--------+----------+--------------------------------------------------------------------------------| | 2 | 1 WORD | Pocet definovanych znaku ve znakove sade (obvykle 256) | |--------+----------+--------------------------------------------------------------------------------| | 4 | 1 WORD | ASCII kod prvniho znaku ve znakove sade (obvykle 0) | |--------+----------+--------------------------------------------------------------------------------| | 6 | DWORD | Ukazatel na definici znakove sady | |--------+----------+--------------------------------------------------------------------------------| | 10 | 1 BYTE | Pocet radek na obrazovce. Pokud obsahuje 0ffh, spocita se nejvyssi mozna | | | | hodnota. | |--------+----------+--------------------------------------------------------------------------------| | 11-? | n BYTE | Seznam cisel textovych rezimu, pro ktere se ma toto nasatveni pouzivat. | | | | Ukonceny hodnotou 0ffh. | \----------------------------------------------------------------------------------------------------/ Sekundarni tabulka textovych rezimu Tato tabulka ma ponekud odlisny format od te predchozi. Zde popsana znakova sada musi obsahovat definici vsech 256 znaku. /----------------------------------------------------------------------------------------------------\ | Offset | Velikost | Popis | |--------+----------+--------------------------------------------------------------------------------| | 0 | 1 BYTE | Vyska znaku v bodech | |--------+----------+--------------------------------------------------------------------------------| | 1 | 1 BYTE | Znakovy blok (0-3 EGA, 0-7 VGA) | |--------+----------+--------------------------------------------------------------------------------| | 2 | 1 BYTE | Nepouzito | |--------+----------+--------------------------------------------------------------------------------| | 3 | DWORD | Ukazatel na definici znakove sady | |--------+----------+--------------------------------------------------------------------------------| | 4-? | n BYTE | Seznam cisel textovych rezimu, pro ktere se uvedena znakova sada pouzije, | | | | ukonceny hodnotou 0ffh. | \----------------------------------------------------------------------------------------------------/ Pomocna tabulka grafickych rezimu Tato taulka obsahuje informace potrebne k pouzivani uzivatelsky definovane znakove sady v grafickych rezimech. Musi byt definovano vsech 256 znaku. /----------------------------------------------------------------------------------------------------\ | Offset | Velikost | Popis | |--------+----------+--------------------------------------------------------------------------------| | 0 | 1 BYTE | Pocet znakovych radek na obrazovce | |--------+----------+--------------------------------------------------------------------------------| | 1 | 1 WORD | Delka definice jednoha znaku (tj. vyska znaku v pixelech) | |--------+----------+--------------------------------------------------------------------------------| | 3 | DWORD | Ukazatel na definici znakove sady | |--------+----------+--------------------------------------------------------------------------------| | 4-? | n BYTE | Seznam cisel grafickych rezimu, pro ktere lze uvedenou znakovou sadu pouzit, | | | | ukonceny hodnotou 0ffh. | \----------------------------------------------------------------------------------------------------/ Tabulka kombinaci monitoru Tato tabulka obsahuje seznam dvojic zobrazovacich adapteru, ktere mohou byt pouzivany najednou bez konfliktu adresniho prostoru. Kody adapteru jsou nasledujici: /------------------------------------------------------\ | Kod | Adapter/monitor | |-----+------------------------------------------------| | 00h | Adapter neni pripojen | | 01h | MDA s monochromatickym monitorem | | 02h | CGA s barevnym monitorem | | 03h | Rezervovano | | 04h | EGA s barevnym monitorem | | 05h | EGA s monochromatickym monitorem | | 06h | PGC | | 07h | VGA s monochromatickym monitorem | | 08h | VGA s barevnym monitorem | | 09h | Rezervovano | | 0ah | MCGA s digitalnim barevnym monitorem | | 0bh | MCGA s analogovym monochromatickym monitorem | | 0ch | MCGA s analogovym barevnym monitorem | | ffh | Nerozpoznany graficky adapter | \------------------------------------------------------/ Pro kazdou pripustnou kombinaci adapteru je v tabulce ulozeno jedno slovo, jez se skada ze dvou kodu adapteru. Format tabulky kombinaci monitoru: /----------------------------------------------------------------------------------------------------\ | Offset | Velikost | Popis | |--------+----------+--------------------------------------------------------------------------------| | 0 | 1 BYTE | Pocet zaznamu | |--------+----------+--------------------------------------------------------------------------------| | 1 | 1 BYTE | Verze tabulky kombinaci monitoru | |--------+----------+--------------------------------------------------------------------------------| | 2 | 1 BYTE | Maximalni hodnota kodu v tabulce kombinaci monitoru | |--------+----------+--------------------------------------------------------------------------------| | 3 | 1 BYTE | Nepouzito | |--------+----------+--------------------------------------------------------------------------------| | 4-? | n WORD | Zaznamy o pripustnosti kombinaci monitoru | \----------------------------------------------------------------------------------------------------/ Tabulka profilu palety Tato tabulka umoznuje definovat si registry palety a registry DAC, ktere se vzdy nactou znovu po inicializaci zobrazovaciho rezimu. Hodnoty pro registry palety jsou v pameti sekvencne ulozene hodnoty prislusnych paletovych registru. Hodnoty pro DAC registry jsou take ulozene sekvencne. Jednomu registru vsak odpovidaji tri byte, prislusici postupne cervene, zelene a modre slozce intenzity barvy. /----------------------------------------------------------------------------------------------------\ | Offset | Velikost | Popis | |--------+----------+--------------------------------------------------------------------------------| | 0 | 1 BYTE | Pouzivani podtrzeni | | | | = 0 Podtrzeni pouze v modech MDA | | | | = 1 Pouzivej podtrzeni ve vsech textovych rezimech | | | | = 0ffh Nepouzivej podtrzeni nikdy | |--------+----------+--------------------------------------------------------------------------------| | 1 | 1 BYTE | Rezervovano | |--------+----------+--------------------------------------------------------------------------------| | 2 | 1 WORD | Rezervovano | |--------+----------+--------------------------------------------------------------------------------| | 4 | 1 WORD | Pocet registru palety v tabulce (0-17) | |--------+----------+--------------------------------------------------------------------------------| | 6 | 1 WORD | Index prvniho registru palety v tabulce (0-16) | |--------+----------+--------------------------------------------------------------------------------| | 8 | DWORD | Ukazatel na tabulku obsahujici registry palety | |--------+----------+--------------------------------------------------------------------------------| | 0ch | 1 WORD | Pocet DAC registru v tabulce (0-256) | |--------+----------+--------------------------------------------------------------------------------| | 0eh | 1 WORD | Index prvniho DAC registru v tabulce (0-255) | |--------+----------+--------------------------------------------------------------------------------| | 10h | DWORD | Ukazatel na tabulku obsahujici DAC registry | |--------+----------+--------------------------------------------------------------------------------| | 14h-? | n BYTE | Seznam zobrazovacich rezimu, pro ktere se ma toto nastaveni palet pouzit, | | | | ukonceny hodnotou 0ffh. | \----------------------------------------------------------------------------------------------------/
Copyright © Jiri Kosek