Ukládací oblast BIOS

     Pokaždé, když je inicializován zobrazovací režim, jsou
registry nastaveny na jejich standardní hodnoty pro zvolený
režim a je aktivována standardní znaková sada. Zjištění
těchto standardních hodnot nastavení je na kartách EGA
poněkud obtížné, neboť registry této karty neumožňují čtení
jejich obsahu. Tyto hodnoty využívají programy, které
nastavují vlastní zobrazovací režimy a nebo používají
přepínaní několika zobrazovacích režimů. Na pomoc zde
přichází EGA/VGA BIOS, který v paměti RAM vyhradí několik
oblastí s informacemi, které pomáhají některé nedostatky v
práci s registry na EGA obejít (samozřejmě, že tyto
informace lze využít i na adaptértech VGA).
     Na adrese 0040:00a8 je uložen ukazatel (BIOS_SAVE_PTR)
na ukládací tabulku osmi ukazatelů. Po spuštění počítače je
tato tabulka uložena v paměti ROM v EGA/VGA BIOS. Jediný
ukazatel z osmi je inicializován (na VGA ještě ukazatel na
sekundární ukládací tabulku). Je to ukazatel na tabulku
parametrů. Ostatní ukazatele ukládací tabulky jsou nastaveny
na 0000:0000, tj. jsou zatím nepoužity. Pokud chcete ukádací
tabulku modifikovat musíte jí nejprve přesunout z ROM do RAM
a změnit ukazatel na adrese 0040:00a8.

Ukládací tabulka
     Formát ukládací tabulky je následující:
/----------------------------------------------------------------------------------------------------\
| Offset | Velikost | Popis                                                                          |
|--------+----------+--------------------------------------------------------------------------------|
|    0   |  DWORD   | Ukazatel na tabulku parametrů                                                  |
|        |          | Tato tabulka obsahuje standardní nastavení registrů adaptéru pro všechny       |
|        |          | zobrazovací režimy, včetně interních (08-0ch). Na EGA je to jediná tabulka,    |
|        |          | která je požadovaná pro správnou funkci adaptéru. Na VGA je k činnosti         |
|        |          | zapotřebí ještě sekundární ukládací tabulky.                                   |
|--------+----------+--------------------------------------------------------------------------------|
|    4   |  DWORD   | Ukazatel na dynamickou ukládací oblast                                         |
|        |          | Tento ukazatel ukazuje na 256 byte velkou oblast RAM, kam se při inicializaci  |
|        |          | zobrazovacího režimu uloží nastavení 16 paletových registrů a registru         |
|        |          | obsahujícího barvu rámečku. Při každé změně registru palety, je změněna        |
|        |          | i příslušná hodnota v této tabulce (změna musí být prováděna pomocí služeb     |
|        |          | BIOS, přímý zápis na porty adaptéru zde samozřejmě nebude promítnut).          |
|--------+----------+--------------------------------------------------------------------------------|
|    8   |  DWORD   | Ukazatel na pomocnou tabulku textových režimů                                  |
|        |          | Tento ukazatel ukazuje na tabulku, která obsahuje deskriptory pro znakové sady |
|        |          | textových režimů. Během inicializace zobrazovacího režimu je do bitové roviny  |
|        |          | 2 nahrána standardní znaková sada a pokud tento ukazatel není 0000:0000 je     |
|        |          | nahrána i znaková sada určená pomocnou tabulkou textových režimů. Pokud je     |
|        |          | jako znakový blok této znakové sady uvedena 0, nahradí se novou znakovou sadou |
|        |          | standardní znaková sada. V opačném případě jsou k dispozici dvě znakové sady   |
|        |          | najednou.                                                                      |
|--------+----------+--------------------------------------------------------------------------------|
|   12   |  DWORD   | Ukazatel na pomocnou tabulku grafických režimů                                 |
|        |          | Tento ukazatel ukazuje na tabulku, která obsahuje popis použité znakové sady   |
|        |          | pro grafické režimy. Pokud je tento ukazatel nastaven na 0000:0000 použije se  |
|        |          | standardní znaková sada z ROM. V opačném případě se použije uživatelem         |
|        |          | nadefinovaná znaková sada.                                                     |
|--------+----------+--------------------------------------------------------------------------------|
|   10h  |  DWORD   | Ukazatel na sekundární ukládací tabulku - pouze VGA                            |
|        |          | Tabulka rozšiřující možnosti ukládací tabulky pro potřeby adaptéru VGA.        |
|--------+----------+--------------------------------------------------------------------------------|
| 14h-   | 12 byte  | Nepoužito                                                                      |
|   -1fh |          |                                                                                |
\----------------------------------------------------------------------------------------------------/

Sekundární ukládací tabulka
     Sekundární ukládací tabulka přidává několik dalších
položek:
/----------------------------------------------------------------------------------------------------\
| Offset | Velikost | Popis                                                                          |
|--------+----------+--------------------------------------------------------------------------------|
|    0   |  WORD    | Velikost sekundární ukládací tabulky v byte. Do této velikosti se započítává   |
|        |          | i tato první dvojslabika. Velikost tabulky je tu z důvodu možnosti dalšího     |
|        |          | rozšíření.                                                                     |
|--------+----------+--------------------------------------------------------------------------------|
|    2   |  DWORD   | Ukazatel na tabulku kombinací monitorů                                         |
|        |          | Tato tabulka obsahuje možné kombinace monitorů v systému.                      |
|--------+----------+--------------------------------------------------------------------------------|
|    6   |  DWORD   | Ukazatel na druhou pomocnou tabulku textových režimů                           |
|        |          | Pokud není tento ukazatel nastaven na 0000:0000 ukazuje na deskriptor          |
|        |          | sekundární znakové sady. Po inicializaci módu je tato znaková sada nahrána do  |
|        |          | bitové roviny, můžete tak používat 512 uživatelem definovaných znaků (pokud i  |
|        |          | pomocí první pomocné tabulky textovýxh režimů nahrajete vlastní znakovou       |
|        |          | sadu).                                                                         |
|--------+----------+--------------------------------------------------------------------------------|
|   10   |  DWORD   | Ukazatel na tabulku profilu palety                                             |
|        |          | Pomocí tabulky profilu palety můžete nastavit vlastní hodnoty registrů palety  |
|        |          | a DAC registrů, které se obnoví po každé inicializaci režimu.                  |
\----------------------------------------------------------------------------------------------------/

Tabulka parametrů
     Tato tabulka obsahuje nastavení registrů adaptéru pro
každou obměnu zobrazovacích režimů (jsou zde tedy položky
pro režim 0 pro 200, 350 i 400 řádků). Tabulka odpovídající
jednomu režimu je 64 byte dlouhá a má následující strukturu:
/----------------------------------------------------------------------------------------------------\
| Offset | Velikost | Popis                                                                          |
|--------+----------+--------------------------------------------------------------------------------|
|    0   |  1 BYTE  | Počet zobrazovaných sloupců                                                    |
|--------+----------+--------------------------------------------------------------------------------|
|    1   |  1 BYTE  | Počet zabrazovaných řádek                                                      |
|--------+----------+--------------------------------------------------------------------------------|
|    2   |  1 BYTE  | Výška znaku v pixelech                                                         |
|--------+----------+--------------------------------------------------------------------------------|
|    3   |  1 WORD  | Pamět potřebná pro jednu obrazovou stránku                                     |
|----------------------------------------------------------------------------------------------------|
|   Registry sequenceru:                                                                             |
|----------------------------------------------------------------------------------------------------|
|    5   |  1 BYTE  | Režim časovače (Clocking Mode)                                                 |
|--------+----------+--------------------------------------------------------------------------------|
|    6   |  1 BYTE  | Map mask registr                                                               |
|--------+----------+--------------------------------------------------------------------------------|
|    7   |  1 BYTE  | Výběr znakového bloku (Character Map Select)                                   |
|--------+----------+--------------------------------------------------------------------------------|
|    8   |  1 BYTE  | Paměťový režim (Memory Mode)                                                   |
|----------------------------------------------------------------------------------------------------|
|   Externí registry:                                                                                |
|----------------------------------------------------------------------------------------------------|
|    9   |  1 BYTE  | Miscellaneous Output register                                                  |
|----------------------------------------------------------------------------------------------------|
|   CRTC Registry:                                                                                   |
|----------------------------------------------------------------------------------------------------|
|   0ah  |  1 BYTE  | Celkový horizontální počet znaků                                               |
|--------+----------+--------------------------------------------------------------------------------|
|   0bh  |  1 BYTE  | Horizontální počet zobrazovaných znaků                                         |
|--------+----------+--------------------------------------------------------------------------------|
|   0ch  |  1 BYTE  | Začátek horizontálního zatemnění                                               |
|--------+----------+--------------------------------------------------------------------------------|
|   0dh  |  1 BYTE  | Konec horizontálního zatemnění                                                 |
|--------+----------+--------------------------------------------------------------------------------|
|   0eh  |  1 BYTE  | Začátek horizontálního zpětného chodu paprsku                                  |
|--------+----------+--------------------------------------------------------------------------------|
|   0fh  |  1 BYTE  | Konec horizontálního zpětného chodu paprsku                                    |
|--------+----------+--------------------------------------------------------------------------------|
|   10h  |  1 BYTE  | Celkový vertikální počet řádek                                                 |
|--------+----------+--------------------------------------------------------------------------------|
|   11h  |  1 BYTE  | Registr přetečení                                                              |
|--------+----------+--------------------------------------------------------------------------------|
|   12h  |  1 BYTE  | Verikální posun ve znakových režimech                                          |
|--------+----------+--------------------------------------------------------------------------------|
|   13h  |  1 BYTE  | Počet řádek na znak                                                            |
|--------+----------+--------------------------------------------------------------------------------|
|   14h  |  1 BYTE  | Začátek kurzoru                                                                |
|--------+----------+--------------------------------------------------------------------------------|
|   15h  |  1 BYTE  | Konec kurzoru                                                                  |
|--------+----------+--------------------------------------------------------------------------------|
|   16h  |  1 BYTE  | Nepoužito                                                                      |
|--------+----------+--------------------------------------------------------------------------------|
|   17h  |  1 BYTE  | Nepoužito                                                                      |
|--------+----------+--------------------------------------------------------------------------------|
|   18h  |  1 BYTE  | Nepoužito                                                                      |
|--------+----------+--------------------------------------------------------------------------------|
|   19h  |  1 BYTE  | Nepoužito                                                                      |
|--------+----------+--------------------------------------------------------------------------------|
|   1ah  |  1 BYTE  | Začátek vertikálního zpětného chodu                                            |
|--------+----------+--------------------------------------------------------------------------------|
|   1bh  |  1 BYTE  | Konec vertikálního zpětného chodu                                              |
|--------+----------+--------------------------------------------------------------------------------|
|   1ch  |  1 BYTE  | Vertikální počet zobrazovaných řádek                                           |
|--------+----------+--------------------------------------------------------------------------------|
|   1dh  |  1 BYTE  | Offset                                                                         |
|--------+----------+--------------------------------------------------------------------------------|
|   1eh  |  1 BYTE  | Pozice podtržení                                                               |
|--------+----------+--------------------------------------------------------------------------------|
|   1fh  |  1 BYTE  | Začátek vertikálního zatemnění                                                 |
|--------+----------+--------------------------------------------------------------------------------|
|   20h  |  1 BYTE  | Konec vertikálního zatemnění                                                   |
|--------+----------+--------------------------------------------------------------------------------|
|   21h  |  1 BYTE  | Ovládání režimu                                                                |
|--------+----------+--------------------------------------------------------------------------------|
|   22h  |  1 BYTE  | Porovnání řádky                                                                |
|----------------------------------------------------------------------------------------------------|
|   Registry atributového kontroleru:                                                                |
|----------------------------------------------------------------------------------------------------|
| 23h-   | 16 BYTE  | Paletové registry 0-15                                                         |
|    -32h|          |                                                                                |
|--------+----------+--------------------------------------------------------------------------------|
|   33h  |  1 BYTE  | Režim atributového kontroleru                                                  |
|--------+----------+--------------------------------------------------------------------------------|
|   34h  |  1 BYTE  | Barva rámečku                                                                  |
|--------+----------+--------------------------------------------------------------------------------|
|   35h  |  1 BYTE  | Povolení bitových rovin                                                        |
|--------+----------+--------------------------------------------------------------------------------|
|   36h  |  1 BYTE  | Horizontální posun                                                             |
|----------------------------------------------------------------------------------------------------|
|   Registry grafického kontroleru:                                                                  |
|----------------------------------------------------------------------------------------------------|
|   37h  |  1 BYTE  | Set/Reset                                                                      |
|--------+----------+--------------------------------------------------------------------------------|
|   38h  |  1 BYTE  | Povolení Set/Reset (Enable Set/Reset)                                          |
|--------+----------+--------------------------------------------------------------------------------|
|   39h  |  1 BYTE  | Porovnání barev (Color Compare)                                                |
|--------+----------+--------------------------------------------------------------------------------|
|   3ah  |  1 BYTE  | Kombinace dat (Data Rotate)                                                    |
|--------+----------+--------------------------------------------------------------------------------|
|   3bh  |  1 BYTE  | Mapa pro čtení (Read Map Select)                                               |
|--------+----------+--------------------------------------------------------------------------------|
|   3ch  |  1 BYTE  | Režim grafického kontroleru (Mode Register)                                    |
|--------+----------+--------------------------------------------------------------------------------|
|   3dh  |  1 BYTE  | Různé (Miscellaneous)                                                          |
|--------+----------+--------------------------------------------------------------------------------|
|   3eh  |  1 BYTE  | Eliminace barev (Color Don't Care)                                             |
|--------+----------+--------------------------------------------------------------------------------|
|   3fh  |  1 BYTE  | Bit mask                                                                       |
\----------------------------------------------------------------------------------------------------/
     Nastavení registrů začátek a konec kurzoru používá
nastavení BIOS, které je kompatibilní s CGA, tj. 8řádkové
hodnoty jsou převedeny na odpovídající 14 či 16řádkové.
     V tabulce parametrů pro kartu EGA jsou uložena
nastavení registrů pro 23 módů v následujícím pořadí: 0-3
pro CGA, 4-0eh, 0fh-10h pokud je méně než 64K paměti,
0fh-10h pokud je více jak 64K paměti, 0-3 pro EGA (350
řádek). VGA přidává dalších 6 módů: 0-3 (400 řádek), 7 (400
řádek), 11h-13h.

Pomocná tabulka textových režimů
     Tato tabulka definuje parametry rezidentní, uživatelem
definované znakové sady. Její formát je:
/----------------------------------------------------------------------------------------------------\
| Offset | Velikost | Popis                                                                          |
|--------+----------+--------------------------------------------------------------------------------|
|    0   |  1 BYTE  | Výška znaku v bodech                                                           |
|--------+----------+--------------------------------------------------------------------------------|
|    1   |  1 BYTE  | Znakový blok (0-3 EGA, 0-7 VGA)                                                |
|--------+----------+--------------------------------------------------------------------------------|
|    2   |  1 WORD  | Počet definovaných znaků ve znakové sadě (obvykle 256)                         |
|--------+----------+--------------------------------------------------------------------------------|
|    4   |  1 WORD  | ASCII kód prvního znaku ve znakové sadě (obvykle 0)                            |
|--------+----------+--------------------------------------------------------------------------------|
|    6   |  DWORD   | Ukazatel na definici znakové sady                                              |
|--------+----------+--------------------------------------------------------------------------------|
|   10   |  1 BYTE  | Počet řádek na obrazovce. Pokud obsahuje 0ffh, spočítá se nejvyšší možná       |
|        |          | hodnota.                                                                       |
|--------+----------+--------------------------------------------------------------------------------|
|   11-? |  n BYTE  | Seznam čísel textových režimů, pro které se má toto nasatvení používat.        |
|        |          | Ukončený hodnotou 0ffh.                                                        |
\----------------------------------------------------------------------------------------------------/

Sekundární tabulka textových režimů
     Tato tabulka má poněkud odlišný formát od té předchozí.
Zde popsaná znaková sada musí obsahovat definici všech 256
znaků.
/----------------------------------------------------------------------------------------------------\
| Offset | Velikost | Popis                                                                          |
|--------+----------+--------------------------------------------------------------------------------|
|    0   |  1 BYTE  | Výška znaku v bodech                                                           |
|--------+----------+--------------------------------------------------------------------------------|
|    1   |  1 BYTE  | Znakový blok (0-3 EGA, 0-7 VGA)                                                |
|--------+----------+--------------------------------------------------------------------------------|
|    2   |  1 BYTE  | Nepoužito                                                                      |
|--------+----------+--------------------------------------------------------------------------------|
|    3   |  DWORD   | Ukazatel na definici znakové sady                                              |
|--------+----------+--------------------------------------------------------------------------------|
|   4-?  |  n BYTE  | Seznam čísel textových režimů, pro které se uvedená znaková sada použije,      |
|        |          | ukončený hodnotou 0ffh.                                                        |
\----------------------------------------------------------------------------------------------------/

Pomocná tabulka grafických režimů
     Tato taulka obsahuje informace potřebné k používání
uživatelsky definované znakové sady v grafických režimech.
Musí být definováno všech 256 znaků.
/----------------------------------------------------------------------------------------------------\
| Offset | Velikost | Popis                                                                          |
|--------+----------+--------------------------------------------------------------------------------|
|    0   |  1 BYTE  | Počet znakových řádek na obrazovce                                             |
|--------+----------+--------------------------------------------------------------------------------|
|    1   |  1 WORD  | Délka definice jednoha znaku (tj. výška znaku v pixelech)                      |
|--------+----------+--------------------------------------------------------------------------------|
|    3   |  DWORD   | Ukazatel na definici znakové sady                                              |
|--------+----------+--------------------------------------------------------------------------------|
|   4-?  |  n BYTE  | Seznam čísel grafických režimů, pro které lze uvedenou znakovou sadu použít,   |
|        |          | ukončený hodnotou 0ffh.                                                        |
\----------------------------------------------------------------------------------------------------/

Tabulka kombinací monitorů
     Tato tabulka obsahuje seznam dvojic zobrazovacích
adaptérů, které mohou být používány najednou bez konfliktu
adresního prostoru. Kódy adaptéru jsou následující:
   /------------------------------------------------------\
   | Kód | Adaptér/monitor                                |
   |-----+------------------------------------------------|
   | 00h | Adaptér není připojen                          |
   | 01h | MDA s monochromatickým monitorem               |
   | 02h | CGA s barevným monitorem                       |
   | 03h | Rezervováno                                    |
   | 04h | EGA s barevným monitorem                       |
   | 05h | EGA s monochromatickým monitorem               |
   | 06h | PGC                                            |
   | 07h | VGA s monochromatickým monitorem               |
   | 08h | VGA s barevným monitorem                       |
   | 09h | Rezervováno                                    |
   | 0ah | MCGA s digitálním barevným monitorem           |
   | 0bh | MCGA s analogovým monochromatickým monitorem   |
   | 0ch | MCGA s analogovým barevným monitorem           |
   | ffh | Nerozpoznaný grafický adaptér                  |
   \------------------------------------------------------/
Pro každou přípustnou kombinaci adaptérů je v tabulce
uloženo jedno slovo, jež se skádá ze dvou kódů adaptérů.
     Formát tabulky kombinací monitorů:
/----------------------------------------------------------------------------------------------------\
| Offset | Velikost | Popis                                                                          |
|--------+----------+--------------------------------------------------------------------------------|
|    0   |  1 BYTE  | Počet záznamů                                                                  |
|--------+----------+--------------------------------------------------------------------------------|
|    1   |  1 BYTE  | Verze tabulky kombinací monitorů                                               |
|--------+----------+--------------------------------------------------------------------------------|
|    2   |  1 BYTE  | Maximální hodnota kódů v tabulce kombinací monitorů                            |
|--------+----------+--------------------------------------------------------------------------------|
|    3   |  1 BYTE  | Nepoužito                                                                      |
|--------+----------+--------------------------------------------------------------------------------|
|   4-?  |  n WORD  | Záznamy o přípustnosti kombinací monitorů                                      |
\----------------------------------------------------------------------------------------------------/

Tabulka profilu palety
     Tato tabulka umožňuje definovat si registry palety a
registry DAC, které se vždy načtou znovu po inicializaci
zobrazovacího režimu. Hodnoty pro registry palety jsou v
paměti sekvenčně uložené hodnoty příslušných paletových
registrů. Hodnoty pro DAC registry jsou také uložené
sekvenčně. Jednomu registru však odpovídají tři byte,
příslušící postupně červené, zelené a modré složce intenzity
barvy.
/----------------------------------------------------------------------------------------------------\
| Offset | Velikost | Popis                                                                          |
|--------+----------+--------------------------------------------------------------------------------|
|    0   |  1 BYTE  | Používání podtržení                                                            |
|        |          |          = 0     Podtržení pouze v módech MDA                                  |
|        |          |          = 1     Používej podtržení ve všech textových režimech                |
|        |          |          = 0ffh  Nepoužívej podtržení nikdy                                    |
|--------+----------+--------------------------------------------------------------------------------|
|    1   |  1 BYTE  | Rezervováno                                                                    |
|--------+----------+--------------------------------------------------------------------------------|
|    2   |  1 WORD  | Rezervováno                                                                    |
|--------+----------+--------------------------------------------------------------------------------|
|    4   |  1 WORD  | Počet registrů palety v tabulce (0-17)                                         |
|--------+----------+--------------------------------------------------------------------------------|
|    6   |  1 WORD  | Index prvního registru palety v tabulce (0-16)                                 |
|--------+----------+--------------------------------------------------------------------------------|
|    8   |  DWORD   | Ukazatel na tabulku obsahující registry palety                                 |
|--------+----------+--------------------------------------------------------------------------------|
|   0ch  |  1 WORD  | Počet DAC registrů v tabulce (0-256)                                           |
|--------+----------+--------------------------------------------------------------------------------|
|   0eh  |  1 WORD  | Index prvního DAC registru v tabulce (0-255)                                   |
|--------+----------+--------------------------------------------------------------------------------|
|   10h  |  DWORD   | Ukazatel na tabulku obsahující DAC registry                                    |
|--------+----------+--------------------------------------------------------------------------------|
| 14h-?  |  n BYTE  | Seznam zobrazovacích režimů, pro které se má toto nastavení palet použít,      |
|        |          | ukončený hodnotou 0ffh.                                                        |
\----------------------------------------------------------------------------------------------------/

[Pokračování] | [Obsah]


Copyright © Jiří Kosek