1.2.20. Práca so strojovým kódom

 

Ak sa zoznámite s počítačom dôkladnejšie, budete chcieť určite používať podprogramy v strojovom jazyku, vlastné tabuľky znakov, dokonca budete sami vytvárať programy a tabuliek v pamäti tak, aby ich operačný systém nezmazal, lebo on nevie, či danú časť pamäti využívate. Vy takisto musíte v takom prípade vedieť, ktoré časti pamäti využíva počítač pre svoju prácu. O tom sa dozviete podrobnejšie pri popise pamäti. Zatiaľ si povedzme, že pri programovaní v jazyku BASIC sa využíva časť pamäti od adresy 0 po adresu, ktorá sa nazýva RAMTOP. Po resetovaní počítača sa nastaví RAMTOP automaticky na hodnotu 65367, lebo nad touto adresou je uložená tabuľka znakov užívateľskej grafiky a táto je chránená. Dokonca príkaz NEW, ktorý maže pamäť RAM, pracuje len po RAMTOP, takže nemaže užívateľom definovanú grafiku. Aby ste si vytvorili priestor pre vlastné potreby, potrebujete nastaviť adresu RAMTOP. To umožňuje príkaz CLEAR v tvare

      CLEAR adresa

kde adresa určuje novú adresu RAMTOP. Ostatná činnosť príkazu CLEAR ostáva, ako už bolo uvedené. Zopakujme si to:

1.       vymaže všetky premenné

2.       zmaže obrazovku

3.       nastaví kurzor pre PLOT do ľavého spodného rohu

4.       vykoná sa RESTORE

5.       vymaže zásobník GOSUB

Ak použijete CLEAR týmto spôsobom, môžete buď posunúť RAMTOP, aby bolo viac miesta pre BASIC (prepísaním užívateľských grafických symbolov) alebo posunieme RAMTOP dole, aby nebola horná časť pamäti mazaná príkazom NEW a aby nebolo prepísaná pri práci v jazyku BASIC. Túto časť pamäti však môžeme meniť príkazom POKE a jej stav čítať funkciou PEEK.

Ak je zadaná adresa príliš malá (CLEAR 23000), ohlási sa chyba

      M RAMTOP no good

Takže vytvoriť miesto pre program v strojovom kóde si už vieme. Nasledujúca časť je napísaná pre tých, ktorí poznajú strojový kód Z 80, súbor inštrukcií, ktorému rozumie procesorový čip Z 80. Pokiaľ máte záujem o podrobnejšie informácie, zožeňte si špeciálnu literatúru. Programy v strojovom kóde sú písané v jazyku, ktorý sa volá assembler. Ak program nie je príliš dlhý, môžete preklad previesť sami (inštrukcie strojového kódu sú uvedené v prílohe). Skúste tento program:

      ld bc, 99

      ret

ktorý uloží do dvojice registrov bc hodnotu 99. Program preloží na 4 byty 1, 99, 0 (pre ld bc, 99) a 201 (pre ret).

Ak máte program napísaný v strojovom kóde, ďalšou úlohou je vložiť ho do počítača. Musíte sa rozhodnúť, kam ho v pamäti uložiť a za tým účelom si preň rezervovať v pamäti dostatok miesta.

Na vytvorenie miesta a uloženie programu v strojovom kóde môžete použiť nasledovný program:

       5 CLEAR 32499

      10 LET a=32500

      20 FOR i=0 TO 3

      30 READ n: POKE a+i,n

      40 NEXT i

      50 DATA 1,99,0,201

Na odštartovanie programu v strojovom kóde sa používa funkcia USR v tvare:

      USR adresa

kde adresa je štartovacia adresa začiatku programu v strojovom kóde. Hodnota funkcie je hodnota registrov b, c procesora Z 80 pri návrate z tohto programu, preto je v rozsahu od 0 do 65535.

Pretože USR je funkcia, musí sa použiť v spojitosti s nejakým príkazom alebo môže byť časťou výrazov. Najčastejšie sa používajú tieto možnosti:

      PRINT USR adresa

kedy sa vypíše hodnota tejto funkcie na obrazovku.

V našom prípade po zadaní

      PRINT USR 32500

sa vypíše na obrazovku číslo 99, čo je obsah registrov b,c.

Ďalšou možnosťou je použitie

      RANDOMIZE USR adresa

kedy sa hodnota funkcie uloží na adresu, na ktorú sa ukladá číslo z postupnosti náhodných čísiel.

Použiť môžete ešte

      RESTORE USR adresa

kedy sa výsledok nikde neukladá.

Návrat do jazyka BASIC je zabezpečený po regulárnom ukončení inštrukciou RET.

Funkcia USR sa používa tiež na získanie adresy, na ktorej je uložený znak užívateľsky definovanej grafiky (udg). Funkcia sa používa v tvare:

      USR "znak"

kde znak určuje znak užívateľskej grafiky. Napr. prvý znak udg je určený znakom "a", "A" alebo znakom zadaným stlačením klávesu A v grafickom móde klávesnice. Po resetovaní je hodnota

      USR "a" = USR "A" = 65368

Definovanie znaku udg si ukážeme na príklade. Definujeme si prvý znak udg ako pole šachovnice rozmeru 8x8 bodov. Šachovnica bude daná hodnotami BIN 10101010 a BIN 01010101. Program na definovanie znaku bude:

      1000 FOR n=0 TO 6 STEP 2

      1010 POKE USR "a"+n,BIN O1010101: POKE USR "a"+n+1,

            BIN 10101010

      1020 NEXT n

Ak tlačíte prvý znak udg (grafický mód a potom kláves A) červenou farbou na žltom podklade, je výsledná farba oranžová. Zmenou kombinácie farieb dostanete ďalšie "nové" farby pre farbenie väčších plôch obrazovky.