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