2.3.2.10.
Zásobník
Pre prácu celého systému je veľmi dôležitá tá časť pamäti, kde
sú uložené tzv. návratové adresy volania podprogramov. Nazývame
ju zásobník. Návratové adresy sa vytvárajú automaticky ako pri volaní podprogramov
v strojovom kóde procesora Z-80, tak pri volaní podprogramov pomocou GOSUB v
BASICu. Štruktúra zásobníka po resete počítača je nasledujúca:
<- RAMTOP <- SP <- ERR_SP
3eh |
00h |
13h |
03h |
Systémová premenná ERR_SP ukazuje na položku zásobníka, na
ktorej je uložená adresa obsluhy ľubovoľnej chyby, SP je ukazovateľ vrchu
zásobníka a RAMTOP ukazovateľ konca pamäti pre BASIC. Koniec zásobníka (jeho
dno) je označený bytom obsahujúcim hodnotu 3Eh. Tento byte je tiež posledným
bytom využiteľnej pamäti pre BASIC. Pri vkladaní hodnôt do zásobníka sa hodnota
SP zmenšuje (zásobník sa zväčšuje smerom k začiatku pamäti RAM), pri vyberaní
hodnôt zo zásobníku sa hodnota SP zväčšuje (zásobník sa zmenšuje smerom ku
koncu pamäti RAM).
Pri výskyte nejakej chyby, ktorá vyvolá výpis chybového hlásenie, vyzdvihne systém obsah dvoch bytov adresovaných premennou ERR_SP a na túto adresu predá riadenie. Zmenou obsahu tejto položky zásobníka je možné dosiahnuť napr. reset počítača po stlačení BREAK pri nahrávaní programu, tak ako to poznáme u niektorých hier. Stačí len na tieto dva byty uložiť nuly. Pri vykonávaní riadku v editačnej oblasti zásobník vyzerá nasledovne:
Adresa obsluhy chyby je nastavená na hodnotu 1303h. Na tejto
adrese je podprogram obsluhujúci všetky možné chyby a vypisujúci v spodnej
časti obrazovky chybové hlásenie.
Ďalej sa v zásobníku objavila položka zásobník GOSUB. Tá
slúži na určenie miesta návratu v programe pri použití príkazu GOSUB, teda pri
volaní podprogramu v BASICu. Na zásobník sa uloží číslo aktuálneho riadku (dva
byty) a číslo príkazu (jeden byte) nasledujúceho za príkazom GOSUB, teda miesto
v programe, kde sa dá po vykonaní podprogramu (po príkaze RETURN) pokračovať.
Zásobník GOSUB môže obsahovať viacej ukazovateľov návratových miest v programe,
pričom táto štruktúra zodpovedá vnorenému volanie podprogram GOSUB. V prípade,
že nebol volaný žiadny podprogram GOSUB, zásobník GOSUB je prázdny.
Ukazovateľ vrchu zásobníka môže pri vykonávaní programu meniť
svoju hodnotu podľa toho, aké podprogramy v strojovom kóde systém práve využíva
a tiež v prípade použitia užívateľských podprogramov v strojovom kóde
(podprogramy v strojovom kóde budeme v ďalšom texte nazývať rutiny). Po
skončení týchto rutín však musí byť ukazovateľ nastavený na to isté miesto, aké
mal pred ich vyvolaním.
Systémová premenná RAMTOP označuje koniec pamäti pre BASIC. Jej
hodnota sa dá meniť príkazom:
CLEAR číslo
kde
číslo je nová hodnota RAMTOP (konca pamäti). Zmenou RAMTOPu môžete pamäť pre
BASIC zmenšovať alebo zväčšovať, v závislosti na dĺžke vášho programu. Po
resete počítača je RAMTOP nastavený na hodnotu 65367d.
Zmena RAMTOPu môže niekedy priniesť problémy. skúste zadať
počítaču CLEAR 23850. Teraz skúste do editačného riadku niečo napísať.
Odpoveďou vám bude len zatrúbenie editora, ktorý vám takto signalizuje, že
niečo nie je v poriadku. Zadaním hodnoty 23850 ste totiž vymedzili oblasť pre
BASIC na púhych 95 bytov (za predpokladu, že program v BASICu začína na adrese
23755). Do tejto oblasti musí počítač umiestniť všetky vyššie spomenuté
pracovné oblasti a neostáva mu miesto na editačnú oblasť, teda do nej nemôže
umiestniť vami zadávaný kláves. Nestáva nič iné než počítač zresetovať.
Pokiaľ sa vám stane táto vec pod odoslaní nejakého riadku
programu, musíte ho z programu vypustiť, zmeniť RAMTOP, popr. skrátiť program a
riadok do neho znovu zadať.
Príkaz
CLEAR vykonáva tieto činnosti:
-
vymaže všetky premenné z oblasti premenných
-
vymaže obrazovku
- v
systémových premenných nastaví súradnica posledného
kresleného bodu na hodnoty 0,0
-
vykoná RESTORE
-
vymaže zásobník GOSUB.
- v
prípade použitia tvaru CLEAR číslo nastaví RAMTOP (pokiaľ
je to možné) na hodnotu číslo. Nová hodnota
RAMTOPu musí
ležať medzi STKEND a P_RAMT.