2.3.1.1. Pamäť kresby

 

Pamäť kresby obsahuje každý zobraziteľný bod obrazovky a určuje, či je bod "rozsvietený" (v pamäti kresby je na mieste pre tento bod uložená jednotka), alebo "zhasnutý" (v pamäti kresby je uložená nula).

Skúste zadať POKE 16384,255. V ľavom hornom rohu obrazovky sa rozsvieti vodorovná čiarka v rozsahu ôsmich bodov (bitov). Skúste zadať do počítača nasledujúci program a zadajte RUN:

 

      10 FOR I=0 TO 7

      20 POKE 16384,2^I

      30 PAUSE 25

      40 NEXT I

 

Tento program postupne ukladá na prvý byte pamäti kresby čísla 1, 2, 4, 8, 16, 32, 64, 128 a rozsvietený bod sa postupne presúva sprava doľava.

Pamäť pre kresbu má rozsah 6144 bytov. Toto číslo dostanete pomocou vzorca:

 

 

                   počet mikroriadkov * počet bodov na riadok

pamäť kresby = -----------------------------------------------

                                               8

 

 

pamäť kresby = (192 * 256)/8 = 6144 bytov

 

Pamäť pre kresbu má v dôsledku použitého technického spôsobu zobrazovania trochu zvláštnu štruktúru, odlišné od štruktúry pamäti programu a dát. Pokúsime sa ju vysvetliť najskôr na príkladoch. Napíšte do počítača tento program:

      10 FOR I=0 TO 31

      20 POKE (16384+I),255

      30 NEXT I

Odštartujte ho pomocou RUN. Na nultom riadku obrazovky sa postupne nakreslí čiara. Týmto programom ste uložili do pamäti kresby od adresy 16384 po adresu 16415 samé jednotky (celkom 32 bytov po ôsmich bitoch, teda 256 bitov). Týchto 256 bitov predstavuje nultý mikroriadok obrazovky. Dalo by sa očakávať, že ďalší mikroriadok obrazovky začína v pamäti kresby na adrese 16416, teda ihneď za prvým. To však nie je pravda. Prvý mikroriadok obrazovky začína v pamäti kresby až na adrese o 256 väčšej, než je adresa nultého mikroriadku, teda na adrese 16640. Druhý mikroriadok obrazovky začína v pamäti na adrese o 256 väčšej, než je adresa začiatku prvého mikroriadku, teda na adrese 16896 atď.

Napíšte tento program (poznámky REM sú len pre vašu orientáciu, nemusíte ich do programu písať):

 

      10 FOR I=0 TO 7: REM POCET MIKRORIADKOV=8

      20 FOR J=0 TO 31: REM POCET BYTOV V RIADKU=32

      30 POKE (16384+i*256+j),255:REM ZACIATOK MIKRORIADKU JE

      POSUNUTY O 256 BYTOV

      40 NEXT J

      50 NEXT I

 

Po vykonaní programu v prvých ôsmich mikroriadkoch obrazovky nakreslí čiara. Iste si teraz položíte otázku:"Pokiaľ je prvý mikroriadok obrazovky posunutý oproti nultému o 256 bytov, tak čo je uložené na adrese za koncom nultého mikroriadku, teda na adrese 16384+32=16416?". Napíšte nasledujúci program:

 

      10 FOR I=0 TO 31

      20 POKE (16384+I),255

      30 NEXT I: REM NA OBRAZOVKE SA VYKRESLILA V NULTOM

      MIKRORIADKU CIARA

      40 PAUSE 50

      50 FOR I=32 TO 63

      60 POKE (16384+I),255

      70 NEXT I: REM NA OBRAZOVKE SA VYKRESLI V OSMOM

      MIKRORIADKU CARA

 

Podobne platí, že na adrese 16384 + 32 + 32 = 16448 je uložených 0 + 8 + 8 = 16 mikroriadkov atď. Napíšte do počítača tento program:

 

      10 FOR I=0 TO 32*8*8-1:REM 32 BYTOV NA MIKRORIADOK 8 MIKRO

      RIADKOV=1 RIADOK OBRAZOVKY A ZAPLNIME 8 RIADKOV

      20 POKE (16384+I),255

      30 NEXT I

      40 PAUSE 50

Uvedený program zaplní jednu tretinu obrazovky čiarami, výsledok je "začiernená" jedna tretina obrazovky. Prečo len jedna tretina? Aby toho nebolo málo, obrazovka sa ešte delí na tretiny. Prvá tretina začína na adrese 16384, druhá na adrese 18432 a tretia na adrese 20489. Posledný byte pamäti kresby je na adrese 22527. Táto adresa je vypočítaná nasledovne:

 

 

Spôsob zápisu kresby sa môže zdať trocha zložitejší. Z dôvodu jednoduchej konštrukcie počítača bola obrazovka rozdelená na tretiny. Každá tretina má 8 riadkov, každý riadok má 8 liniek. Toto rozdelenie si všimnite pri nahrávaní úvodného obrázku k nejakej hre. Najprv sa nahrávajú jednotlivé linky prvej tretiny, potom druhej a tretej. Nakoniec sa nahrávajú atribúty, ktoré výslednú kresbu zafarbia. Na určenie adresy bodu na obrazovke platí nasledujúca schéma:

 

bit

15

14

13

12

12

10

9

8

7

6

5

4

3

2

1

0

0  1  0

A

B

C

D

 

 

010 000000000000  - binárne vyjadrenie adresy 16384d

                          010 pri adresovaní obrazovky sa prvé tri

                          byty nemenia.

A                       - určenie tretiny počítané zhora. Pre A=4

                          ide o atribúty.

B                       - určenie čísla linky v jednom riadku (0=7)

C                       - určenie čísla riadku vo vybranej tretine

                          (0-7).

D                       - určenie čísla stĺpca (0-31).

 

 

Pre všetky tretiny platia rovnaké pravidlá ukladania mikroriadkov obrazovky do pamäti pre kresbu. Môžete si to vyskúšať tak, že namiesto začiatku prvej tretiny (16384) dosadíte do predchádzajúcich programov začiatky druhej (18432) a tretej tretiny (20480). Napíšte do počítača posledný program tejto časti:

 

      10 FOR I=0 TO 3*8*32*8-1

      20 POKE (16384+I),255

      30 NEXT I

      40 PAUSE 100

 

Tento program postupne zaplní celú obrazovku (a teda i pamäť pre kresbu). Všimnite si, ako sa obrazovka zaplňuje. Najskôr sa zaplní prvá tretina, potom druhá a tretia.

Tým sme skončili popis pamäti pre kresbu a budeme sa venovať pamäti atribútov (pamäti pre farby).