2.3.1.2. Pamäť atribútov
Pamäť atribútov je druhá časť pamäti video RAM. V nej sú obsiahnuté všetky informácie o farbách na obrazovke, o blikaní a zvýšenom jase.
Pamäť atribútov začína na adrese 22528 a je dlhá 768 bytov, teda prvý voľný byte za touto oblasťou je na adrese 23296. Dĺžka vyplýva z toho, že pre celú obrazovku, ktorá má 24 riadkov a 32 stĺpcov, potrebujeme 24 * 32 = 768 bytov na atribúty a každý byte prináleží práve jednému štvorčeku obrazovky s rozmermi 8 x 8 bodov.
Skúste zadať POKE 22528,0. Štvorček v ľavom hornom rohu sa zafarbí na čierno.
Zadajte:
FOR I=0 TO 31: POKE (22528+I),0:NEXT I
a odošlite riadok. Nultý riadok obrazovky sa zafarbí na čierno. Atribúty pre jeden riadok sú teda v pamäti uložené za sebou.
Ale čo ďalší riadok? Sú atribúty druhého riadku uložené bezprostredne za atribútami nultého riadku? Napíšte program:
10 FOR I=0 TO 31
20 POKE (22528+I),0
30 NEXT I: REM NULTY RIADOK SA ZAFARBI NA CIERNO
40 PAUSE 50
50 FOR I=32 TO 63
60 POKE (22528+I),0
70 NEXT I:REM PRVY RIADOK SA ZAFARBI NA CIERNO
Z uvedeného príkladu vyplýva, že atribúty pre jednotlivé riadky sú v pamäti uložené za sebou v tom istom poradí, ako riadky na obrazovke. Napíšte ešte tento program:
10 FOR I=0 TO 767
20 POKE (22528+I),0
30 NEXT I
Po spustení sa postupne zafarbí celá obrazovka na čierno. Zresetujte počítač.
Vieme teda, ako sú atribúty pre riadky v pamäti uložené. Zatiaľ sme na ich miesto v pamäti ukladali len hodnotu nula príslušný štvorček obrazovky sa zafarbil na čierno. Ako ale dosiahnuť iné farby, popr. blikanie a zvýšený jas? Do atribútových bytov je treba túto informáciu podľa určitých pravidiel uložiť. Pravidlá vyplývajú zo štruktúry atribútového bytu (ATB):
FLASH |
BRIGHT |
PAPER |
PAPER |
PAPER |
INK |
INK |
INK |
7. bit |
6. bit |
5. bit |
4. bit |
3. bit |
2. bit |
1. bit |
0. bit |
V počítači je každá farba vyjadrená určitým číslom podľa nasledujúcej tabuľky:
farba |
kód dekadicky |
kód binárne |
čierna |
0 |
000 |
modrá |
1 |
001 |
červená |
2 |
010 |
fialová |
3 |
011 |
zelená |
4 |
100 |
bledomodrá |
5 |
101 |
žltá |
6 |
110 |
biela |
7 |
111 |
Z uvedenej tabuľky vyplýva, že ľubovoľná farba sa dá získať skladaním troch základných farieb, a to modrej, červenej a zelenej. Tak napr. žltá farba (kód 6) vznikne zložením červenej (kód 2) a zelenej (kód 4) farby.
Predpokladajme, že chceme mať na obrazovke modrý papier (modrá farba má hodnotu 1) so žltým atramentom (žltá farba má hodnotu 6), neblikajúci, bez zvýšeného jasu. Do pamäti atribútov musíme uložiť hodnotu: 00001110b = 14.
Na zelený papier, čierny atrament a zvýšený jas uložíme do pamäti atribútov hodnotu: 01010000b = 96.
Obecne môžeme atribútový byte definovať nasledovne:
ATB = FLASH*128 + BRIGHT*64 + PAPER*8 + INK.
V našich dvoch predchádzajúcich príkladoch majú atribútové byty túto hodnotu:
- ATB = 0*128 + 0*64 + 1*8 + 6 = 14
- ATB = 0*128 + 1*64 + 4*8 + 0 = 96
Takto si môžete vypočítať a dosadiť do pamäti pre atribúty ľubovoľnú hodnotu a meniť tak zafarbenie obrazovky. Tento spôsob priameho dosadenia atribútov do pamäti sa používa predovšetkým v programoch v strojovom kóde, pretože je to najrýchlejšia cesta, ako zmeniť zafarbenie celej, popr. časti obrazovky. Polohu atribútu na obrazovke možno vypočítať podľa vzťahu:
ATB = 22528 + 32 * R + S
ATB - vypočítaná adresa atribútu
22528 - adresa prvého atribútu na obrazovke
R - poradové číslo riadku (0 - 23)
S - poradové číslo stĺpca (0 - 31)
Po prepísaní adresy do binárneho tvaru je všetko zrejmé:
bit |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
hodnota |
0 |
1 |
0 |
1 |
1 |
0 |
R |
R |
R |
R |
R |
S |
S |
S |
S |
S |
adresa |
22528 |
riadok |
stĺpec |