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).