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