Hier hätten wir das 3 . Datenelement des
523 . Hauptelements von A$ ausgedruckt, dies kann man in beliebig vielen Dimensionen weiterführen, soweit diese sinnvoll sind. Eines sollte ich jedoch noch
sagen: bei einer Dimensionierung von
Variablen reserviert der C64 für jede
einzelne Variable einen bestimmten Speicherbereich. Bei FLOAT-Variablen ist
dies besonders Speicherintensiv. Pro
Variable gehen nämlich 5 Bytes flöten, die nicht mehr für andere Variablen benutzt 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 64 er unweigerlich mit
einem " ? OUT OF MEMORY ERROR" ab. Wollten Sie beispiel ein 6- dimensionales
Feld mit jeweils 4 Datenelementen dimensionieren, so könnten Sie mit dem Speicherplatz 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 sagte, 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 dimensioniert 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 Stringund Integervariablen ist der Speicherplatzverbrauch 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 Programmierhilfe, die man zwar nicht unbedingt
braucht, die jedoch ganz nützlich sein
kann, wenn man strukturiert programmieren möchte. FN ist quasi ein Variablenkü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 Beispiel komplexere Rechenformeln vordefinieren, die Sie dann durch einen simplen
und kurzen Aufruf komplett durchrechenen
können. Dies ist rechenzeitund speicherplatzsparend.
Doch hier die Praxis. Zunächst wollen
wir erst einmal eine Funktion vordefinieren, hierzu benutzt man das DEF-Statement:
DEF FNAX(X)=(10/X)*SIN(X)+201
Hier haben wir der FunktioN AX die Formel (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 ausgedruckt haben, wenn Sie für X beispielsweise 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 Kurvendiskussionsprogramme, da Sie bei einer Funktionsberechnung natürlich auch Variablen verwenden können. So zum Beispiel die Lauf- variable einer Schleife, die eine Wertetabelle ausdruckt.
Als Nächstes hätten wir da den WAIT Befehl. Mit ihm können wir den 64 er darauf
warten lassen, daß eine Speicherzelle
einen anderen Wert annimmt. Als Beispiel
nehme ich hierzu einmal die Speicherzelle 198, aus dem oben schon genannten
Speicherbereich für interne Aufgaben
unseres Computers. In dieser Spicherzelle wird nämlich vom Betriebssystem zwischengespeichert, wieviele Tasten schon
vom Benutzer gedrückt wurden, ohne daß
das dazugehörige Zeichen ausgedruckt
wurde. Wenn Sie sich im Direktmodus befinden steht hier nie mehr als der Wert
1 drin, da der 64 er 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 wollen wir vor der Abfrage dieser Speicherzelle besser eine 0 hineinPOKEn.
Ich möchte Ihnen nämlich nun zeigen, wie
man ganz einfach ein Programm zum Anhalten 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 Speicherzelle 198 geschrieben wird. Ist dies
der Fall, so fährt der 64 er mit dem Programm fort, wo wir dann gleich noch einmal die Zelle 198 löschen, damit das
eben eingegebene Zeichen nicht doch noch
einmal irgendwann eingelesen werden kann
und irgendwelche, nicht gewollte, Funktionen 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 64 er dazu veranlassen die BASIC-Ebene zu verlassen und ein Maschinenprogramm an einer bestimmten Speicheradresse auszuführen. Der Befehl " SYS 49152" zum Beispiel, startet ein Assemblerprogramm, das in Speicherzelle 49152 beginnt. Wenn Sie übrigens mehr über Assembler 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 Sonderausgabe, herauszubringen. Wenn es soweit sein wird, werden wir Sie dann auch
auf jeden Fall noch rechtzeitig informieren. Der Kurs wird übrigens ebenfalls
von mir sein, falls Sie also meine Erklä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 beinhaltet noch ein paar weitere Befehle. Diese
sind besonders bei der Programmierung
der Grafik wichtig, weswegen sie eigentlich im sich anschließenden Grafikkurs
abgehandelt werden sollten.
Da aber zu befürchten ist, daß die eigentliche Beschreibung und Erklärung
dieser Befehle im Rahmen eines Grafikkurses zu kurz gerät, haben wir uns entschlossen, diese letzten Befehle in
einem weiteren, nun aber endgültig letzten 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