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.                                                        |
\----------------------------------------------------------------------------------------------------/

[Pokracovani]


Copyright © Jiri Kosek