Hier hätten wir das 3. Datenelement des
523. Hauptelements von A$ ausgedruckt,
dies kann man in beliebig vielen Dimen-
sionen weiterführen, soweit diese sinn-
voll sind. Eines sollte ich jedoch noch
sagen: bei einer Dimensionierung von
Variablen reserviert der C64 für jede
einzelne Variable einen bestimmten Spei-
cherbereich. Bei FLOAT-Variablen ist
dies besonders Speicherintensiv. Pro
Variable gehen nämlich 5 Bytes flöten,
die nicht mehr für andere Variablen be-
nutzt werden können. Hierbei ist es
übrigens egal, ob diese Variable nun
einen Inhalt hat oder nicht. Man muß
sich also immer ausrechnen, wieviel
Speicherplatz so ein Feld einnimmt, um
nicht in Speichermangel zu kommen, denn
dann bricht der 64er unweigerlich mit
einem "?OUT OF MEMORY ERROR" ab. Woll-
ten Sie beispiel ein 6-dimensionales
Feld mit jeweils 4 Datenelementen dimen-
sionieren, so könnten Sie mit dem Spei-
cherplatz knapp werden:
DIM A(3,3,3,3,3,3)
Wenn Sie sich wundern, warum hier immer
3 anstatt 4 steht, wie ich ja eben sag-
te, so denken Sie bitte daran, daß das
0. Datenelement ebenfalls mitzählt, also
0,1,2,3 = vier Elemente. Oben bei A$
hätte ich auch schreiben sollen, daß wir
dort anstatt 1000 sogar 1001 Elemente,
mit 11 anstatt 10 Unterelementen dimen-
sioniert haben, doch habe ich dies zum
besseren Verständnis zu jenem Zeitpunkt
weggelassen.
Wir hätten hier also 4*4*4*4*4*4=4↑6
Variablen dimensioniert, für die alle 5
Bytes Speicherplatz reserviert werden,
also 4↑6*5 Bytes oder 4096*5 Bytes =
20480 Bytes, das entspricht etwa 2/3 des
gesamten Basicspeichers (38911 Bytes).
Es ist also keineswegs egal, wieviele
Elemente Sie dimensionieren. Suchen Sie
ein Optimum heraus. Bei String- und In-
tegervariablen ist der Speicherplatzver-
brauch etwas geringer.
Probieren Sie doch einfach einmal aus,
wie viel Platz Sie haben.
Kommen wir nun noch zu drei weiteren
kleinen Befehlen, die ich ihnen noch
erklären muß. Da wäre zunächst einmal
der DEF FN-Befehl. Dies ist eigentlich
nichts weiter als eine kleine Program-
mierhilfe, die man zwar nicht unbedingt
braucht, die jedoch ganz nützlich sein
kann, wenn man strukturiert programmie-
ren möchte. FN ist quasi ein Varia-
blenkürzel für eine vorher definierte
Funktion. Sie müssen an dieses Kürzel
nur noch einen FLOAT-Variablennamen
anhängen (also einen Variablennamen OHNE
"%" oder "$"). Auf diese Weise können
Sie häufig benutzte Funktionen, zum Bei-
spiel komplexere Rechenformeln vordefi-
nieren, die Sie dann durch einen simplen
und kurzen Aufruf komplett durchrechenen
können. Dies ist rechenzeit- und spei-
cherplatzsparend.
Doch hier die Praxis. Zunächst wollen
wir erst einmal eine Funktion vordefi-
nieren, hierzu benutzt man das DEF-
Statement:
DEF FNAX(X)=(10/X)*SIN(X)+201
Hier haben wir der FunktioN AX die For-
mel (10/X)*SIN(X)+201 zugeordnet. Das
"X" in Klammern der Definition muß immer
mit angehängt werden. Möchten Sie nun
einmal das Ergebnis der Formel ausge-
druckt haben, wenn Sie für X beispiels-
weise den Wert 7 einsetzen, so müssen
Sie dies folgendermaßen tun:
PRINT FNAX(7)
Schon erhalten Sie ein Ergebnis. Die
Möglichkeit eine Funktion zu definieren
eignet sich gut für Kurvendiskussions-
programme, da Sie bei einer Funktionsbe-
rechnung natürlich auch Variablen ver-
wenden können. So zum Beispiel die Lauf-
variable einer Schleife, die eine Werte-
tabelle ausdruckt.
Als Nächstes hätten wir da den WAIT Be-
fehl. Mit ihm können wir den 64er darauf
warten lassen, daß eine Speicherzelle
einen anderen Wert annimmt. Als Beispiel
nehme ich hierzu einmal die Speicherzel-
le 198, aus dem oben schon genannten
Speicherbereich für interne Aufgaben
unseres Computers. In dieser Spicherzel-
le wird nämlich vom Betriebssystem zwi-
schengespeichert, wieviele Tasten schon
vom Benutzer gedrückt wurden, ohne daß
das dazugehörige Zeichen ausgedruckt
wurde. Wenn Sie sich im Direktmodus be-
finden steht hier nie mehr als der Wert
1 drin, da der 64er die Tastendrücke
schneller druckt, als Sie sie tippen
können. Doch während eines laufenden
Programms kann diese Zahl auch schon
einmal bis zu 10 ansteigen. Deshalb wol-
len wir vor der Abfrage dieser Speicher-
zelle besser eine 0 hineinPOKEn.
Ich möchte Ihnen nämlich nun zeigen, wie
man ganz einfach ein Programm zum An-
halten bringt, so, daß es auf einen
Tastendruck wartet. Hier ein Beispiel:
10 POKE 198,0:WAIT 198,1:POKE 198,0
Hier löschen wir zuerst einmal jeglichen
Inhalt der eben genannten Speicherzelle,
um sicherzugehen, daß hier auch wirklich
nichts drinsteht. Mit dem folgenden
WAIT-Befehl warten wir auf das Ereignis,
daß eine Taste gedrückt wird, daß also
eine 1 vom Betriebssystem in die Spei-
cherzelle 198 geschrieben wird. Ist dies
der Fall, so fährt der 64er mit dem Pro-
gramm fort, wo wir dann gleich noch ein-
mal die Zelle 198 löschen, damit das
eben eingegebene Zeichen nicht doch noch
einmal irgendwann eingelesen werden kann
und irgendwelche, nicht gewollte, Funk-
tionen im Programm verursacht.
Als drittes noch kurz der SYS-Befehl.
Dieser Befehl ist für BASIC-Programmier
eigentlich wenig wichtig. Mit ihm kann
man den 64er dazu veranlassen die BASIC-
Ebene zu verlassen und ein Maschinenpro-
gramm an einer bestimmten Speicheradres-
se auszuführen. Der Befehl "SYS 49152"
zum Beispiel, startet ein Assemblerpro-
gramm, das in Speicherzelle 49152 be-
ginnt. Wenn Sie übrigens mehr über As-
sembler bzw. Maschinensprache wissen
möchten, so möchte ich an dieser Stelle
darauf hinweisen, daß wir, die Redaktion
der MAGIC DISK 64, planen, etwa Anfang
nächsten Jahres einen Assemblerkurs auf
einer eigenen Diskette quasi als Sonder-
ausgabe, herauszubringen. Wenn es so-
weit sein wird, werden wir Sie dann auch
auf jeden Fall noch rechtzeitig infor-
mieren. Der Kurs wird übrigens ebenfalls
von mir sein, falls Sie also meine Er-
klärungen für einsichtlich und einfach
halten, so wird diese Diskette ein Muß
für alle angehenden Assemblerprogrammie-
rer unter Ihnen sein.
Der letzte Teil des Basickurses sollte
dies sein. Aber das Basic V2.0 beinhal-
tet noch ein paar weitere Befehle. Diese
sind besonders bei der Programmierung
der Grafik wichtig, weswegen sie eigent-
lich im sich anschließenden Grafikkurs
abgehandelt werden sollten.
Da aber zu befürchten ist, daß die ei-
gentliche Beschreibung und Erklärung
dieser Befehle im Rahmen eines Grafik-
kurses zu kurz gerät, haben wir uns ent-
schlossen, diese letzten Befehle in
einem weiteren, nun aber endgültig letz-
ten Basickursteil abzuhandeln.
Diesen neunten Teil finden Sie in der
Oktoberausgabe der Magic Disk. Im
November werden wir dann aber voll in
die Grafikprogrammierung einsteigen.
Ihr Uli Basters