BETA.1 ZX ZX SPECTRUM TASWORD TWO
Beta basic 1.0
**************** Betasoft 1983 92 Oxford Road,Masley
BirminghamMa 26 novych prikazov a 10 novych funkcii.
NAHRAVANIE LOAD "bb48" (kopirovat ide len
COPYPROLOGOM!)
Nahraju sa 2 Basic riadky 0 a 1.
Riadok 0 - definicie funkcii. Riadok 1 rezervuje miesto pre
strojovu cast a nahra ju. Potom sa riadok 1 sam zotrie a riadok
a riadok 0 zostane - nie je ho vidno, ked su uz zadane ine
riadky. Vsimnite si klikotanie pri stlaceni tlacitok - da sa
vypnut pomocou POKE 23609,0 .
Aby ste nestratili riadok nula, pouzite na stare programy MERGE
nie LOAD. Dlhe programy s mnozstvom skokov idu rychlejsie.Prikaz NEW nezmaze vsetko, ale len program a data. (Riadok 0 je
ponechany.)
Programy zostavene s pomocou BB nahrat na pasku povelom SAVE.
Pri nahravani z pasky musi byt vzdy pritomny Beta Basic,inak su
nove prikazy zobrazene ako graficke znaky a dostaneme "Nonsens
in BASIC"
Ak ste BB zabudli,staci dat: MERGE "bb48": GOTO 1
lebo pri MERGE nefunguje autostart. Stratime riadok 1 ,nic viac.
Okrem prikazu EDIT su vsetky prikazy zadavane klavesami pomocou
"SHIFT+GRAPHIC" .
Syntax prikazov : to,co je v zatvorke < > nie je povinne.
ALTER <popis atributu> TO popis atributu (G,potom A)
----------------------------------------------------------------
Zmeni nam atributy bez zmazania obrazovky.
100 PRINT AT 10,10 ;"TEST": PAUSA 50 : ALTER TO PAPER 4
Su mozne i kombinacie.
ALTER TO PAPER 2 , INK 7 , FLASH 1
Ked nechceme zmenit vsetko, ale len urcite pozicie pouzijeme
ALTER INK 7 TO INK 0
To co bolo pisane bielym, bude pisane ciernym. Skuste aj :
ALTER INK 3 , BRIGHT 1 , PAPER 7 TO INK 5 , FLASH 1
Toto zmeni len pozicie s INK 3 , BRIGHT 1 a PAPER 7.Nasledujuci program ukaze na obrazovke sachovnicovity raster.
Trochu sa pohrame s povelom ALTER.
100 LET A = 2 : LET B = 4
110 FOR L = 1 TO 5
120 FOR N = 1 TO 16 : PRINT INK A; PAPER B;"XXXX"; PAPER A;
INK B;"OOOO"; : NEXT N
130 LET temp = A : LET A = D : LET B = temp : NEXT L
140 LET T = 30
150 ALTER INK A TO INK B : PAUSE T
160 ALTER PAPER A TO INK A : PAUSE T
170 ALTER INK A TO PAPER B : PAUSE T
180 ALTER INK B TO PAPER A : PAUSE T
190 LET T = T-T/10+1 : GOTO 150AUTO <cislo riadku> <,krok> (G,potom 6)
----------------------------------------------------------------
Zapne sa automaticke zadavanie cisiel riadku pri zadavani
programu - pocitac vam ponuka cisla. Pri nezadani hodnot sa
predpoklada 10,10. V nasledovnom kroku ponuka riadok 20,Potom
30 atd. Ak urcitu oblast chcete preskocit - vyDELETujte cis-
lo a zadajte nove - bude ponukat odtial.
AUTO zacneme od riadku 10 s krokom 10
AUTO 100 zacneme od riadku 100
AUTO 100,5 zacneme od riadku 100, krok 5
Ked chcete opustit AUTO, vymazte ponuknute cislo a dajte iny
prikaz (LIST alebo cosi podobne).
POZOR: Startovacia hodnota nesmie byt pre cislo riadku mensia
ako 10 a krok vacsi ako tato prva hodnota cisla riadku.BREAK (SHIFT + SPACE) (nie v grafickom mode)
----------------------------------------------------------------
Nie je to prikaz! Pre BASIC vacsinou stary BREAK staci.
Z nekonecnej loopy v strojaku nas zachrani novy BB BREAK.
Na to musi byt zapnuty CLOCK - Mod (pozri dalej).
Ked stlacite BREAK viac ako sekundu,tak sa prerusi program
ktory sa v SINCLAIR BASIC-u prerusit nedal.
Poznamky: 1.Ked program pride na copyright Sinclair symbol
tak nam uz nepomoze nic.
2. (Pre programatorov v assembleri). Nesmiete
znemoznit prerusenie, ked to chcete pouzit.CLOCK cislo alebo string (G,potom C)
----------------------------------------------------------------
Mate pristup ku 24 hodinovym realnym hodinam (realizovane su
pomocou preruseni) v pravom hornom rohu. Ukazuju sa hodiny,
minuty,sekundy. Mozete sa nechat zobudit v danom case a pod.
(pozri aj FN T$()). Hodiny bezia nezavisle od programu,
jedine pri BEEP a praci s magnetofonom sa cas zastavi. Co sa
ma dat zadavate cislom od 0 do 7 pri prikaze CLOCK
Moznosti:
Mod Alarm GO-SUB Alarm BEEP Display
0 - - -
1 - - ano
2 - ano -
3 - ano ano
4 ano - -
5 ano - ano
6 ano ano -
7 ano ano ano
Hodiny bezia odvtady, ked ich zapneme prikazom CLOCK +
cislo 0-7. Idu od 00.00.00 - nastavime prikazom CLOCK.
Priklad: CLOCK "09:29:55"
Dvojbodky medzi ciframi mozeme vynechat, lebo CLOCK berie
do uvahy iba prvych sest zadanych cislic a vsetko ostatne
(s vynimkou a, alebo A) ignoruje. Tak napr. zadanie
CLOCK "xyz10" bude interpretovane ako
CLOCK "10:00:00"
Ked dame a, alebo A bude to alarm-cas. CLOCK "A 06:20" -
budik je nastaveny na 6 hodin a 20 min. Ked pride cas ku
tejto hodnote,tak bude pri modoch 2, 3, 6, 7 zvonit. Inak
skoci pri 4-7 na podprogram s cislom riadku medzi 8 a
9999. Zvolime cislo riadku pomocou
CLOCK cislo riadku
CLOCK 9000 - alarm rutina je na riadku 9000.
Tato rutina podprogramu moze mat ine premenne ako hlavny
program. Ked vsak v hlavnom progame pracujete s povelmi
CLEAR alebo RUN, musite si premenne v pamati rezervovat
pomocou POKE. Nasledujuci priklad ukaze ako rutina podpro-
gramu vyuziva cas. Kazdu minutu bude nacitavat data. 0999 STOP
9000 PRINT "Bezi alarm-rutina"
9010 LET cislo= PEEK 27000 : POKE cislo + 27000, IN 127
9020 LET cislo = cislo + 1 : IF cislo > 100 THEN LET
cislo = 0
9030 POKE 27000, cislo : LET Z$ = FN T$()
9040 LET hod = VAL Z$(1 to 2) : LET min = VAL Z$(4 TO 5)
9050 LET min = min + 1 : IF min = 60 THEN LET hod = hod
+ 1 : LET min = 0
9060 CLOCK "a"+ STR$ hod + STR$ min : RETURN Teraz zadajte priamy povel :
CLEAR 26999: POKE 27000,0 : CLOCK 9000 : CLOCK 5
Tymto sa vytvorilo miesto pre ciselne pole o dlzke 100 ci-
sel a prva hodnota bola dana 0. Riadok 9000 je ako GOSUB
rutina zvoleneho modu alarmu. Ked teraz nastavite cas na
nejaku hodnotu, pomocou CLOCK "A####" nastavite cas, od
ktoreho zacne prebiehat nacitavanie. Toto bude uz dalej
bezat automaticky kazdu minutu. Podprogram bude kazdu mi-
nutu nacitavat datove slovo z portu 127 a zapisovat ho do
pamati od adresy 27001 pre dalsie pouzitie alebo spraco-
vanie. V tomto podprograme je miesto len pre 100 datovych
slov, ale tymto sme chceli ukazat princip pouzitia.
Pokial nemate k pocitacu pripojeny vstupny port mozete
program vyuzit inym sposobom - na pravidelne vykonavanie
nejakej cinnosti. Poz:Mnohe dodatocne zariadenia tak zatazia datove linky
Spectra, ze kazdy program vypadne pri zapnutom CLOCK-u
alebo inej interupt rutine. Vtedy treba pridavne
zriadenia vytiahnut alebo CLOCK nepouzivat.DEF PROC meno procedury (G,potom 1)
----------------------------------------------------------------
Pozri aj: PROC , END PROC
Zacina definiciu procedury - pozri PROC.
DEF PROC musi byt prvym prikazom riadku (dovolene su praz-
dne znaky a farebne atributy). Pred tymto riadkom musi byt
prikaz (napr. REM), lebo pri predchadzajucom prazdnom
riadku by nemusela byt procedura najdena.
Ako meno procedury su dovolene vsetky mena ako pre
premenne. Teda zacinat musi pismenom a potom tam mozu byt
pismena, cislice, alebo $. Prazdne znaky nemaju vyznam a
nerozlisuju sa male a velke pismena. Meno procedury sa
moze zhodovat s menom premennej a nebudu zamenene.DELETE <cislo riadku> TO <cislo riadku> (G + 7)
----------------------------------------------------------------
Odstrani vsetky riadky v naznacenom bloku v programe.
Ak sa neuda prve cislo, predpoklada sa 0, ak druhe, tak sa
vezme posledny riadok programu.
DELETE TO 100 - vymaze riadky 0 az 100 vcitane
DELETE 100 TO - vymaze vsetky od 100 vyzsie
DELETE 0 TO 0 - vymaze riadok 0
DELETE TO - cely program okrem riadku 0
Posledny riadok sa od NEW lisi v tom, ze zachova vsetky
premenne. Udane riadky musia existovat,inak je hlasena
chyba "No such line" (Taky riadok nejestvuje).
DELETE sa da pouzit i v programe, ale vacsinou uz potom
nesedia riadky. Ked sa ma vymazat blok - tak musi byt pos-
lednym prikazom v tomto bloku.
Rozumne je pomocou DELETE vymazat DATA prikazy v programe,
ked su uz data precitane - ziska sa tak v pamati miesto.DO
DO WHILE podmienka (G+D, WHILE je J)
DO UNTIL podmienka (G+D, UNTIL je K)
----------------------------------------------------------------
Pozri tiez: LOOP , EXIT IF
DO a LOOP, spolu s podmienkami WHILE a UNTIL nam davaju
pokrokove kontrolne struktury do ruk. DO a LOOP robia za-
tvorky pre nekonecnu loopu: 10 DO
20 PRINT "Hallo": PAUSE 50
30 LOOP
Tento program bezi,az dovtedy, kym ho neprerusime.
Zaujmavejsie su cykly s podmienkami:
DO WHILE (podmienka) Vykonava cyklus, kym je podmienka
pravdiva a kym pravdivou zostava. Ak je
podmienka nesplnena, pokracuje sa prvym riadkom
za LOOP.
DO UNTIL podmienka vykonava cyklus do nasledovneho LOOP
len vtedy, kym je podmienka nepravdiva - az do-
vtedy kym sa nestane pravdivou.
Takze tieto dve podmienky su opacne.
10 LET sucet = 0
20 DO UNTIL sucet > 100
30 INPUT " Zadaj cislo " ; x
40 LET sucet = sucet + x : PRINT sucet
50 LOOP
60 PRINT "Teraz je viac ako 100"
Riadok 20 sa da nahradit nasledovne:
20 DO WHILE sucet<=100
DO - LOOP pary sa daju vnutorne vnorovat,podobne ako FOR -
NEXT.
V nasledujucich prikladoch su pary oznacene,ale v programe
tak nie je !
DO a : DO b : ... : LOOP a : LOOP b alebo
DO a : DO b : LOOP b : DO c : LOOP c : LOOP a
Pozor:Adresa kazdeho DO sa uklada na stack - preto z
loopy nevyskakujte inak ako pomocou EXIT IF alebo POP,inak
je hlasena chyba "Missing LOOP".
Pozn.:V inych programovacich jazykoch su podobne DO-LOOP
struktury pod inymi menami:
REPEAT (prikazy) UNTIL (podmienka)
v Pascale je rovnake s
DO (prikazy) LOOP UNTIL (podmienka)
v Beta Basicu a
(Pascal) WHILE (podmienka) (prikazy) END WHILE
je rovnocenne s
DO WHILLE (podmienka) (prikazy) LOOPDPOKE Adresa , cislo (G + p)
----------------------------------------------------------------
Pozri tiez: FN P (adresa)
DPOKE znamena Dvojity POKE. Zodpoveda tomu v BASIC-u
POKE adresa,cislo - INT (cislo/256)*256
POKE adresa + 1, INT (cislo/256)
Inak povedane nizsi byte cisla sa POKE-uje do adresy,vyzsi
byte do dalsej (vyzsej) adresy. Dobre sa s tym menia sys-
temove premenne, opacna funkcia je FN P (adresa)EDIT < cislo riadku > (tlacitko 0,nie v G-mode!)
(alebo 5 v G-mode)
----------------------------------------------------------------
Ked po ENTER stlacime tlacitko 0,objavi sa EDIT - stlacime
ENTER na editovanie riadku s programovym kurzorom alebo
dame cislo riadku a editujame riadok. Mozeme pouzivat vse-
tky kurzorove sipky - kurzor skace medzi riadkami.ELSE < prikazy > (G + E)
----------------------------------------------------------------
ElSE je cast IF-THEN struktury. Zvycajne program skoci na
dalsi riadok, ked podmienka ni je splnena. Ak za IF-THEN
v riadku nasleduje ELSE, tak sa prikazy za ELSE vykonaju,
ked nie je podmienka splnena. Ak je splnena,vykona sa vse-
tko po ELSE a potom na novom riadku.
10 INPUT " Zadaj cislo " ; x
20 PRINT " Pozriem,ci je to 1 "
30 PAUSE 30
40 IF x=1 THEN PRINT "Ano" : ELSE PRINT "Nie"
50 GOTO 10
(Dajte pozor, aby pred ELSE bola vzdy dvojbodka.)
Opat sa IF-THEN-ELSE daju do seba vnorovat.
IF-THEN A : IF-THEN B : ELSE B
IF-THEN A : IF-THEN B : ELSE B : ELSE A
IF-THEN A : ELSE A : IF-THEN B : ELSE BEND PROC (G + 3)
----------------------------------------------------------------
Pozri tiez: DEF PROC , PROC
Oznacuje koniec procedury,ktorej definicia sa zacala s
DEF PROC. Nie je to vykonny prikaz,iba oznacenie. Ked sa v
procedure narazi na END PROC, tak sa procedura skonci a
vratime sa za volanie procedury. Ak sa END PROC pouzije
bez DEF PROC, dostaneme chybu " Missing DEF PROC "
(chyba DEF PROC).EXIT IF <podmienka> (G + I)
----------------------------------------------------------------
Pozri tiez: DO , LOOP
Je to cast DO-LOOP struktury - zoznamte sa najprv s nou.
Pouziva sa na opustenie tohoto cyklu na inom mieste ako za
LOOP prikazom. Ak je podmienka splnena,skoci sa za odpove-
dajuci koniec struktury (prikaz LOOP),inak sa nestane nic.
100 DO : PRINT " Riadok 100 " : PAUSE 20
110 EXIT IF INKEY$ = "s"
120 PRINT " RIADOK 120 ": PAUSE 20 : LOOP
130 PRINT " Mimo LOOP-y "
Ked v tomto programe stlacime "s", tak vyskocime s cyklu.
Ak sa EXIT IF pouzije mimo cyklu, tak dostaneme chybu s
" Missing LOOP " (chyba LOOP)GET cislo alebo stringova premenna (G + G)
----------------------------------------------------------------
GET cita znak z klavesnice, bez toho aby cakal na ENTER,
podobne ako INKEY$. Ale GET caka, kym sa stlaci tlacitko a
len potom sa pokracuje dalej. Pri stringovej premennej
caka na jeden znak, pri ciselnej 1-9 normalne, tlacitko A
sposobi priradenie premennej hodnoty 10, B=11 atd. Je to
vyhodne pri programoch s "menu" riadenim (pozri tiez ON).