Textovy rezim

Priklad

Rychlost | Organizacia videopamate | Vzorce a vypocty | Farba (Atribut)

Vsetky videoadaptery (CGA, EGA, VGA, ...), okrem MDA, mozu byt naprogramovane tak, aby zobrazovali znaky v textovom alebo grafickom rezime. Ked na pocitaci zavadzate system, BIOS vzdy nastavi textovy rezim (vid tabulka 1). Mod nastaveny BIOSom je mod, ktory po inicializacii vyuziva operacny system. Pokial vas program tento mod nezmeni, su vsetky vystupy na displej zobrazovane v tomto inicializacnom textovom mode.

Z hladiska programovania, procedury pre textovy rezim su ovela jednoduchsie nez analogicke procedury pre graficky rezim. ROM BIOS alebo operacny system vo vacsine pripadov poskytuje programatorovi procedury pre zobrazenie znakov, ktore mozu pracovat v lubovolnom textovom rezime.

Mod

Rezim

Hustota

Adapter

Farby

Zaciatok videoram

00

Text

40x25

CGA, MCGA, EGA, VGA

16 odtienov sedej

0B800h

01

Text

40x25

CGA, MCGA, EGA, VGA

16

0B800h

02

Text

80x25

CGA, MCGA, EGA, VGA

16 odtienov sedej

0B800h

03

Text

80x25

CGA, MCGA, EGA, VGA

16

0B800h

07

Text

80x25

MDA, HERC, EGA, VGA

ciernobiele

0B000h

Tabulka 1: Prehlad textovych modov.

Procedury operacneho systemu pre vystup na obrazovku su zalozene na skupine jednoduchych procedur v ROM BIOSu, ktore su volane cez softwarove prerusenie INT 10h. Pouzitie tychto procedur vas zbavuje nutnosti pisat si vlastne procedury pre zobrazovanie znakov. Vyhoda procedur BIOSu pre zobrazovanie znakov je v tom, ze program, ktory pouziva iba tieto procedury bude bezat s vacsou pravdepodobnostou aj na inych videoadapteroch.

 

Rychlost

Samozrejme treba zdoraznit, ze vystup cez operacny system je pomalsi v porovnani s priamym zapisom do videoram. Preto by ste si mali vzdy uvazit, co budete programovat a aku techniku zvolite, ci uz to bude priamy zapis do videoram alebo sluzby ROM BIOSu. Pouzitim priameho zapisu znizite prenositelnost programu, ale zvysite jeho rychlost. A naopak, pouzitim sluzieb BIOSu znizite sice rychlost, ale zvysite prenositelnost programu medzi roznymi textovymi modmi.

Co sa tyka rychlosti, neda sa povedat, ze textovy vystup na obrazovku je pomaly. Ak ho porovnate s vystupom znakov v grafickom rezime, je textovy vystup zretelne rychlejsi, pretoze pre zobrazenie znakov staci menej dat vo videoram. V textovych rezimoch sa adapter sam stara o zobrazenie bodov, ktore tvoria znak. V grafickych rezimoch je kazdy bod znaku reprezentovany bitom vo videoram. Z toho dovodu je vystup v grafickom rezime ovela narocnejsi nez zodpovedajuci vystup v textovom rezime.

 

Organizacia videoram

Kazdy znak zobrazeny na obrazovke je vo videoram reprezentovany dvomi 8-bitovymi hodnotami. Znaky vo videoram su ulozene ako linearna postupnost, ktora sa zobrazuje na obrazovke po riadkoch zhora dole (vid obr. 1).



Obrazok 1 znazornuje videopamat v textovom mode 3 (80x25 znakov)

Generator znakov videoadapteru prevadza kod kazdeho znaku do prislusneho zobrazenia bodov na obrazovke. V rovnakom case dekoder atributov generuje pre kazdy znak zodpovedajuce atributy - farbu, intenzitu, blikanie a pod. Pretoze kazdy kod znaku vo videoram je ulozeny spolu s bajtom atributu, mozete atributy kazdeho znaku na obrazovke riadit nezavisle na ostatnych znakoch. Generator znakov videoadaptera zobrazuje textovy znak v pravouhlej matici bodov (vid obrazok 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 vypocty

Ak chcete zobrazit znak, staci ak ulozite jeho ASCII kod a atribut na zodpovedajucu adresu vo videoram. Pretoze znaky su ulozene linearne, mozete lahko vypocitat adresu vo videoram, ktora zodpoveda pozicii znaku na obrazovke. Vzorec ma tvar: OFFSET=((riadok*80)+stlpec)*2.

Priklad: Vypocet offsetu pre poziciu 3 (riadok),0 (stlpec)

OFFSET=(3*80+0)*2=480d=01E0h

OFFSET je relativna adresa znaku vztiahnuta k zaciatku obrazovej stranky. Cislo 80 hovori kolko ma dany textovy rezim stlpcov. Vo vzorci je zahrnute nasobenie dvomi, pretoze kazdy znak vyzaduje dva bajty (ASCII kod a atribut). Hodnoty pre stlpec a riadok sa pocitaju od nuly, zacinaju v lavom hornom rohu obrazovky. Znak umiestneni na obrazovke v lavom hornom rohu ma suradnice [0,0]; znak v pravom dolnom rohu obrazovky ma suradnice [24,79].

Dlzku obrazovej stranky vypocitame zo vzorca:

DLZKA_STRANKY=2*POCET_RIADKOV*POCET_STLPCOV

Priklad: Vypocet dlzky stranky v rezime 80x25:

dlzka_stranky=2*25*80=4000 bajtov

Textove rezimy pracuju s pamatou o velkosti 32 KB na (EGA, VGA). Tato pamat je rozdelena do stranok, podla pamatovych narokov zvoleneho rezimu. Pri volbe stranky urcujeme zaciatok obrazovej pamati. Vypocet zaciatku pamati za nas vykona program BIOS, pri priamom pristupe do pamati pouzijeme vzorec:

OFFSET_STRANKY=DLZKA_STRANKY*CISLO_STRANKY

Ked porovnate skutocnu, vypocitanu dlzku stranky (v rezime 80x25 znakov - 4000 bajtov) a adresy zaciatkov jednotlivych stranok, zistite rozdiel 96 bajtov. Skutocna dlzka stranky v rezime 80*25 je 4000 bajtov a kazda dalsia stranka je posunuta o 4096 bajtov od pociatku stranky, vznika tu volny priestor 96 bajtov. Zostavajucich 96 bajtov obrazovej stranky sa niekedy vyuziva k uchovaniu pozicie kurzora, zbytok sa nevyuziva.

 

Farba (atribut)

Vsetky videosystemy pouzivaju pre reprezentaciu textovych udajov rovnake usporiadanie kodu znaku a atributu, avsak bajt atributu sa interpretuje rozne. Vseobecne je atribut rozdeleny na 2 skupiny po 4-bitoch. Nizsia stvorica (bity 0-3) urcuju farbu popredia (INK), vyssia stvorica (bity 4-7) urcuju pozadie (PAPER) znaku, siedmy bit sa tiez pouziva aj ako blikanie (BLINK).

Bit

Opis

7

blikanie znaku v popredi

6

cervena zlozka farby pozadia

5

zelena zlozka farby pozadia

4

modra zlozka farby pozadia

3

intenzita farby popredia

2

cervena zlozka farby popredia

1

zelena zlozka farby popredia

0

modra zlozka farby popredia

Tabulka 2: Atribut znaku v textovom rezime

Vzorec pre vypocet atributoveho bajtu je:

ATRIBUT=(FARBA_POZADIA*16)+FARBA_POPREDIA

Ak chceme aby znak blikal, jednoducho pripocitame k hodnote ATRIBUTU cislo 128, co je vlastne nastavenie 7-bitu (atributoveho bajtu) na jednotku. Vzorec ATRIBUT=ATRIBUT+128.

 

I

R

G

B

 

 

Farba

Intensita

Cervena

Zelena

Modra

HEX

DEC

cierna

0

0

0

0

00

00

modra

0

0

0

1

01

01

zelena

0

0

1

0

02

02

azurova

0

0

1

1

03

03

cervena

0

1

0

0

04

04

fialova

0

1

0

1

05

05

hneda

0

1

1

0

06

06

biela

0

1

1

1

07

07

seda

0

0

0

0

08

08

svetlo-modra

1

0

0

1

09

09

svetlo-zelena

1

0

1

0

0A

10

svetlo-azurova

1

0

1

1

0B

11

svetlo-cervena

1

1

0

0

0C

12

svetlo-fialova

1

1

0

1

0D

13

svetlo-zlta

1

1

1

0

0E

14

jasne-biela

1

1

1

1

0F

15

Tabulka 3: Implicitne nastavenie registrov palety

Zobrazovaci adapter EGA vyuziva v 16-farebnom textovom rezime rovnaky bajt atributu ako CGA. Adapter EGA ma v zobrazovacom atribute zakodovanu volbu palety farieb. Kodovanie atributu zobrazenia na EGA, MCGA a VGA zavisi tiez na pouzitom monitore. Monitor urceny pre adapter EGA pracuje so siestimi zakladnymi farebnymi signalmi. Tri signaly zakladnych farieb (RGB) vyssej intenzity a tri signaly (RGB) nizsej intenzity (vid tabulka 3). Z tychto siestich zakladnych signalov je mozne vytvorit 64 kombinacii farieb, ktore sa odlisuju odtienom alebo intenzitou. Adapter VGA emuluje rezimy adapteru EGA vratane sposobu prace s registrami palety farieb.