Rýchlosť | Organizácia videopamäte | Vzorce a výpočty | Farba (Atribút)
Všetky videoadaptéry (CGA, EGA, VGA, ...), okrem MDA, môžu byť naprogramované tak, aby zobrazovali znaky v textovom alebo grafickom režime. Keď na počítači zavádzate systém, BIOS vždy nastaví textový režim (viď tabuľka 1). Mód nastavený BIOSom je mód, ktorý po inicializácii využíva operačný systém. Pokiaľ váš program tento mód nezmení, sú všetky výstupy na displej zobrazované v tomto inicializačnom textovom móde.
Z hľadiska programovania, procedúry pre textový režim sú oveľa jednoduchšie než analogické procedúry pre grafický režim. ROM BIOS alebo operačný systém vo väčšine prípadov poskytuje programátorovi procedúry pre zobrazenie znakov, ktoré môžu pracovať v ľubovolnom textovom režime.
Mód |
Režim |
Hustota |
Adaptér |
Farby |
Začiatok videoram |
00 |
Text |
40x25 |
CGA, MCGA, EGA, VGA |
16 odtieňov šedej |
0B800h |
01 |
Text |
40x25 |
CGA, MCGA, EGA, VGA |
16 |
0B800h |
02 |
Text |
80x25 |
CGA, MCGA, EGA, VGA |
16 odtieňov šedej |
0B800h |
03 |
Text |
80x25 |
CGA, MCGA, EGA, VGA |
16 |
0B800h |
07 |
Text |
80x25 |
MDA, HERC, EGA, VGA |
čiernobiele |
0B000h |
Tabuľka 1: Prehľad textových módov.
Procedúry operačného systému pre výstup na obrazovku sú založené na skupine jednoduchých procedúr v ROM BIOSu, ktoré sú volané cez softwarové prerušenie INT 10h. Použitie týchto procedúr vás zbavuje nutnosti písať si vlastné procedúry pre zobrazovanie znakov. Výhoda procedúr BIOSu
pre zobrazovanie znakov je v tom, že program, ktorý používa iba tieto procedúry bude bežať s väčšou pravdepodobnosťou aj na iných videoadaptéroch.Rýchlosť
Samozrejme treba zdôrazniť, že výstup cez operačný systém je pomalší v porovnaní s priamym zápisom do videoram. Preto by ste si mali vždy uvážiť, čo budete programovať a akú techniku zvolíte, či už to bude priamy zápis do videoram alebo služby ROM BIOSu. Použitím priameho zápisu znížite prenositeľnosť programu, ale zvýšite jeho rýchlosť. A naopak, použitím služieb BIOSu znížite síce rýchlosť, ale zvýšite prenositeľnosť programu medzi rôznymi textovými módmi.
Čo sa týka rýchlosti, nedá sa povedať, že textový výstup na obrazovku je pomalý. Ak ho porovnáte s výstupom znakov v grafickom režime, je textový výstup zreteľne rýchlejší, pretože pre zobrazenie znakov stačí menej dát vo videoram. V textových režimoch sa adaptér sám stará o zobrazenie bodov, ktoré tvoria znak. V grafických režimoch je každý bod znaku reprezentovaný bitom vo videoram. Z toho dôvodu
je výstup v grafickom režime oveľa náročnejší než zodpovedajúci výstup v textovom režime.Organizácia videoram
Každý znak zobrazený na obrazovke je vo videoram reprezentovaný dvomi 8-bitovými hodnotami. Znaky vo videoram sú uložené ako lineárna postupnosť, ktorá sa zobrazuje na obrazovke po riadkoch zhora dole (viď obr. 1).
Generátor znakov videoadaptéru prevádza kód každého znaku do príslušného zobrazenia bodov na obrazovke. V rovnakom čase dekodér atribútov generuje pre každý znak zodpovedajúce atribúty - farbu, intenzitu, blikanie a pod. Pretože každý kód znaku vo videoram je uložený spolu s bajtom atribútu, môžete atribúty každého znaku na obrazovke riadiť nezávisle na ostatných znakoch. Generátor znakov videoadaptéra zobrazuje textový znak v pravouhlej matici bodov (viď obrázok 2).
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
1 |
- |
- |
- |
- |
- |
- |
- |
- |
2 |
- |
- |
- |
- |
- |
- |
- |
- |
3 |
- |
X |
X |
X |
X |
- |
- |
- |
4 |
- |
- |
- |
X |
X |
- |
- |
- |
5 |
- |
- |
X |
X |
X |
- |
- |
- |
6 |
- |
- |
X |
- |
X |
X |
- |
- |
7 |
- |
X |
X |
- |
X |
X |
- |
- |
8 |
- |
X |
- |
- |
X |
X |
- |
- |
9 |
X |
X |
X |
X |
X |
X |
X |
- |
10 |
X |
- |
- |
- |
- |
X |
X |
- |
11 |
X |
- |
- |
- |
- |
X |
X |
- |
12 |
X |
X |
- |
- |
X |
X |
X |
- |
13 |
- |
- |
- |
- |
- |
- |
- |
- |
14 |
- |
- |
- |
- |
- |
- |
- |
- |
15 |
- |
- |
- |
- |
- |
- |
- |
- |
16 |
- |
- |
- |
- |
- |
- |
- |
- |
Obr. 2: Matica 16x8 bodov (VGA).
Vzorce a výpočty
Ak chcete zobraziť znak, stačí ak uložíte jeho ASCII kód a atribút na zodpovedajúcu adresu vo videoram. Pretože znaky sú uložené lineárne, môžete ľahko vypočítať adresu vo videoram, ktorá zodpovedá pozícii znaku na obrazovke. Vzorec má tvar: OFFSET=((riadok*80)+stĺpec)*2.
Príklad: Výpočet offsetu pre pozíciu 3 (riadok),0 (stĺpec)
OFFSET=(3*80+0)*2=480d=01E0h
OFFSET je relatívna adresa znaku vztiahnutá k začiatku obrazovej stránky. Číslo 80 hovorí koľko má daný textový režim stĺpcov. Vo vzorci je zahrnuté násobenie dvomi, pretože každý znak vyžaduje dva bajty (ASCII kód a atribút). Hodnoty pre stĺpec a riadok sa počítajú od nuly, začínajú v ľavom hornom rohu obrazovky. Znak umiestnení na obrazovke v ľavom hornom rohu má súradnice [0,0]; znak v pravom dolnom rohu obrazovky má súradnice [24,79].
Dĺžku obrazovej stránky vypočítame zo vzorca
:DĹŽKA_STRÁNKY=2*POČET_RIADKOV*POČET_STĹPCOV
Príklad:
Výpočet dĺžky stránky v režime 80x25:Textové režimy pracujú s pamäťou o veľkosti 32 KB na (EGA, VGA). Táto pamäť je rozdelená do stránok, podľa pamäťových nárokov zvoleného režimu. Pri voľbe stránky určujeme začiatok obrazovej pamäti. Výpočet začiatku pamäti za nás vykoná program BIOS, pri priamom prístupe do pamäti použijeme vzorec:
OFFSET_STRÁNKY=DĹŽKA_STRÁNKY*ČÍSLO_STRÁNKY
Keď porovnáte skutočnú, vypočítanú dĺžku stránky (v režime 80x25 znakov - 4000 bajtov) a adresy začiatkov jednotlivých stránok, zistíte rozdiel 96 bajtov. Skutočná dĺžka stránky v režime 80*25 je 4000 bajtov a každá ďalšia stránka je posunutá o 4096 bajtov od počiatku stránky, vzniká tu voľný
priestor 96 bajtov. Zostávajúcich 96 bajtov obrazovej stránky sa niekedy využíva k uchovaniu pozície kurzora, zbytok sa nevyužíva.
Farba (atribut)
Všetky videosystémy používajú pre reprezentáciu textových údajov rovnaké usporiadanie kódu znaku a atribútu, avšak bajt atribútu sa interpretuje rôzne. Všeobecne je atribút rozdelený na 2 skupiny po 4-bitoch. Nižšia štvorica (bity 0-3) určujú farbu popredia (INK), vyššia štvorica (bity 4-7) určujú pozadie (PAPER) znaku, siedmy bit sa tiež používa aj ako blikan
ie (BLINK).
Bit |
Opis |
7 |
blikanie znaku v popredí |
6 |
červená zložka farby pozadia |
5 |
zelená zložka farby pozadia |
4 |
modrá zložka farby pozadia |
3 |
intenzita farby popredia |
2 |
červená zložka farby popredia |
1 |
zelená zložka farby popredia |
0 |
modrá zložka farby popredia |
Tabuľka 2: Atribút znaku v textovom režime
Vzorec pre výpočet atribútového bajtu je:
ATRIBÚT=(FARBA_POZADIA*16)+FARBA_POPREDIA
Ak chceme aby znak blikal, jednoducho pripočítame k hodnote ATRIBÚTU číslo 128, čo je vlastne nastave
nie 7-bitu (atribútového bajtu) na jednotku. Vzorec ATRIBÚT=ATRIBÚT+128.
|
I |
R |
G |
B |
|
|
Farba |
Intensita |
Červená |
Zelená |
Modrá |
HEX |
DEC |
čierna |
0 |
0 |
0 |
0 |
00 |
00 |
modrá |
0 |
0 |
0 |
1 |
01 |
01 |
zelená |
0 |
0 |
1 |
0 |
02 |
02 |
azúrová |
0 |
0 |
1 |
1 |
03 |
03 |
červená |
0 |
1 |
0 |
0 |
04 |
04 |
fialová |
0 |
1 |
0 |
1 |
05 |
05 |
hnedá |
0 |
1 |
1 |
0 |
06 |
06 |
biela |
0 |
1 |
1 |
1 |
07 |
07 |
šedá |
0 |
0 |
0 |
0 |
08 |
08 |
svetlo-modrá |
1 |
0 |
0 |
1 |
09 |
09 |
svetlo-zelená |
1 |
0 |
1 |
0 |
0A |
10 |
svetlo-azúrová |
1 |
0 |
1 |
1 |
0B |
11 |
svetlo-červená |
1 |
1 |
0 |
0 |
0C |
12 |
svetlo-fialová |
1 |
1 |
0 |
1 |
0D |
13 |
svetlo-žltá |
1 |
1 |
1 |
0 |
0E |
14 |
jasne-biela |
1 |
1 |
1 |
1 |
0F |
15 |
Zobrazovací adaptér EGA využíva v 16-farebnom textovom režime rovnaký bajt atributu ako CGA. Adaptér EGA má v zobrazovacom atribúte zakódovanú voľbu palety farieb. Kódovanie atribútu zobrazenia na EGA, MCGA a VGA závisí tiež na použitom monitore. Monitor určený pre adaptér EGA pracuje so šiestimi základnými farebnými signálmi. Tri signály základných farieb (RGB) vyššej intenzity a tri signály (RGB)
nižšej intenzity (viď tabuľka 3). Z týchto šiestich základných signálov je možné vytvoriť 64 kombinácií farieb, ktoré sa odlišujú odtieňom alebo intenzitou. Adaptér VGA emuluje režimy adaptéru EGA vrátane spôsobu práce s registrami palety farieb.