2.4.
Znakový generátor
Pri výpise znaku musí byť do pamäti kresby umiestnená na miesto,
kde má byť znak vypísaný, matica znaku obsahujúca rozkreslenie znaku na
jednotlivé body. Matica znaku má rozmery 8x8 bitov a v každom bite je umiestnená
informácia, či daný bod (priradený bitu) má byť rozsvietený (bit obsahuje
hodnotu 1) alebo (bit obsahuje hodnotu 0).
Matice znakov musia byť vytvorené pre všetky zobraziteľné znaky,
teda od znaku medzery (kód 32) až po znak copyright (kód 127) a uložené v
pamäti, odkiaľ sa pri výpise znaku kopírujú do pamäti kresby. Celková dĺžka
pamäti, nutná pre matice všetkých znakov, je 96 * 8 = 768 bytov a oblasť
vyhradená pre matice znakov sa nazýva znakový generátor (pomocou neho sú
generované znaky na obrazovke).
Po
resete počítača je znakový generátor umiestnený v pamäti ROM od adresy 3D00h =
15616 a táto adresa, zmenšená o 256, je umiestnená v
systémovej premennej CHARS. Z toho tiež vyplýva, že znakový generátor môže byť
umiestnený i v pamäti RAM, ale do systémovej premennej CHARS musí byť vložená
adresa začiatku generátora znakov, zmenšená o 256.
Skúste teraz zadať POKE 23606,255: POKE 23607,0. Po odoslaní
riadku sa nevypíše žiadne hlásenie, len v editačnej oblasti sa objaví riadok
zložený z akýchsi hieroglyfov. Vložením týchto dvoch čísiel do premennej CHARS
ste totiž zmenili začiatok generátora znakov na adresu nula. A na tejto adrese
je uložená rutina v strojovom kóde, žiaden generátor znakov. Zresetujte
počítač.
Ostáva len povedať, ako taký vlastný generátor znakov vytvoríte.
Základom je vytvoriť matice všetkých znakov. Tie potom za sebou uložíte po
jednotlivých bytoch do pamäti.
Maticu znaku si môžete predstaviť ako šachovnicu s veľkosťou
8x8. Do nej musíte zakresliť znak. Predpokladajme, že chcete vytvoriť maticu
znaku s kódom 33, čo je výkričník. Nakreslite si šachovnicu:
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
bit |
|
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
|
BIN 00011000=24 |
|
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
|
BIN 00011000=24 |
|
2 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
|
BIN 00011000=24 |
|
3 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
|
BIN 00011000=24 |
|
4 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
|
BIN 00011000=24 |
|
5 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
BIN 00000000=0 |
|
6 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
|
BIN 00011000=24 |
|
7 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
BIN 00000000=0 |
byte
Týmto sme vytvorili maticu znaku "!". Predpokladajme,
že generátor znakov má byť uložený od adresy 60000. Od adresy 60000 po adresu
60007 je uložená matica znaku medzery (8 bytov), od adresy 60008 po adresu
60015 je uložená matica znaku výkričník, od adresy 60016 po adresu 60023 matica
znaku úvodzovky hore atď.
Časť
pamäti vyzerá nasledovne:
Podobným spôsobom môžete vytvoriť matice všetkých znakov od
medzery až po copyright a uložiť ich na príslušné adresy v generátore znakov.
Adresu začiatku osmice bytov vyjadrujúcich maticu znaku
dostanete týmto výpočtom:
AdresaOsmiceBytuZnaku=AdresaGeneratoraZnaku
+ 8*(CODE"znak"-32)
V
našom prípade: Adresa = 60000 +
8*(CODE"!"-32) =
60000 + 8*(33-32) =
60000 + 8 = 60008