BASIC wurde interpretiert und war dadurch verhältnismässig langsam. Da es auch keinen richtigen Standard gab, veränderte jeder Computerhersteller BASIC nach den Bedürfnissen seines Gerätes. Ergebnis waren viele, viele Varianten dieser Sprache. Da die strukturierte Programmierung inzwischen als wichtig angesehen wurde, erhielt BASIC später viele Features aus dem PASCAL-Bereich wie Parameter an Funktionen, Records und lokale Variablen.
Hier soll das ursprüngliche BASIC beschrieben werden, wie man es auf den alten Geräten noch fand und wie es auf beinahe jeder Plattform noch läuft.
Will man das komplette Programm und alle Variablen aus dem Speicher entfernen,
verwendet man den Befehl NEW.
Ursprünglich stand das Schlüsselwort LET vor einer Zuweisung. Dieses lassen
auch fast alle Dialekte zu. Wenige fordern das LET noch.
Dialekte, die auch ein ELSE haben, kennen meist auch einen Abschlussbefehl
für das IF. Dieses lautet FI, IFEND oder END.
Die Variable (hier I) wird auf ihren Startwert gesetzt.
Die Schleife wird durchlaufen, bis der Endwert überschritten wird.
Ist ein STEP enthalten wird die Variable bei jedem Durchlauf um den
entsprechenden Wert erhöht. Fehlt STEP, ist dieser Wert 1.
Das Ende der Schleife befindet sich bei Auftreten von NEXT.
Der Aufruf von Maschinensprachroutinen oder ROM-Routinen war nicht einheitlich. Es
wurden die Befehle CALL oder SYS verwendet. Mit USR(X) konnte man auf einigen Systemen
einen Wert an ein CPU-Register übergeben.
BASIC-Programm
RUN, Ctrl-C und CONT
Mit RUN wird ein BASIC-Programm gestartet. Dabei werden auch alle Variablen auf
den Nullzustand gesetzt. Interpretierte BASIC-Programme können mit
der Tastenkombination CTRL-C gestoppt werden. Alle Variablen
können betrachtet werden und mit dem Befehl CONT kann das Programm
an der Stelle fortgesetzt werden, wo es unterbrochen wurde.
Wurde im Programm dagegen der Befehl END gegeben, ist eine Fortsetzung nicht
möglich. Das Programm endet definitiv an dieser Stelle.
LIST
LIST zeigt das Listing des Programmes an.
Variablen
Es gibt im BASIC nur globale Variablen. Sie werden nicht deklariert, sondern
sind direkt bei Benutzung verfügbar. Das macht es etwas anfällig gegen
Tippfehler. Die Variablen bleiben nach Ende oder Unterbrechung des Programmes
verfügbar. Das macht es einfach, ein Programm zu debuggen. Im Allgemeinen
werden aber alle Variablen zurückgesetzt, wenn eine neue Programmzeile
eingefügt wird.
Mit dem Befehl CLEAR kann man ebenfalls alle Variablen löschen.
Variablentypen
BASIC kennt in der Grundform zwei Variablentypen. Eine normale Variable ist numerisch,
in den meisten Fällen eine Fliesskommazahl. Der andere Typ ist eine Textvariable.
Sie wird durch ein angehängtes $-Zeichen kenntlich gemacht.
Felder
Es können Felder (Arrays) von Variablen gebildet werden. Beispielsweise
DIM A(12)
legt 12 Variablen unter dem Namen A an. Sie können dann mit beispielsweise
A(3) zugegriffen werden. Insbesondere mit der FOR-Anweisung
können so gleichartige Variablen effizient behandelt werden.
Zeilenaufbau
Eine BASIC-Zeile beginnt mit der Zeilennummer. In der Reihenfolge der Zeilen
werden die Programme abgearbeitet.
Sollen mehrere Befehle in einer Zeile stehen, werden sie mit Doppelpunkt voneinander
getrennt.
Eine Zeilennummer ist immer auch ein Sprungziel,
das mit GOTO oder
GOSUB angesprungen werden kann.
Zuweisung
Eine Zuweisung schiebt einen Wert in eine Variable. Dabei steht die Variable links,
es folgt ein Gleichheitszeichen und rechts davon steht ein Ausdruck. Ein Ausdruck kann
eine Konstante, eine andere Variable oder eine Berechnung sein.
Ein- und Ausgabe
PRINT
Die Universalausgabe, die auf dem Bildschirm landet ist PRINT. In vielen
Dialekten kann auch ein Fragezeichen als Kürzel verwendet werden.
Mehrere Werte können mit einem PRINT-Statement ausgegeben werden.
Diese werden durch Semikolen getrennt, wenn sie direkt aufeinander folgen
sollen. Wird stattdessen ein Komma verwendet, wird eine Art Tabulator
verwendet, der sich aber je nach Implementation unterscheidet.
Jedes PRINT-Statement endet die Ausgabe mit einem Zeilenvorschub, wenn
nicht ein Semikolon an letzter Stelle erscheint.
INPUT
INPUT dient der Eingabe einer Zeile. Dem Befehl kann eine String-Konstante
folgen, der durch ein Semikolon abgetrennt dann die Variable folgt, deren
Inhalt eingegeben wird.
Flusskontrolle
GOTO
Hinter dem GOTO steht eine Zeilennummer, an der der Code weiter ausgeführt werden soll.
GUSUB ... RETURN
Mit GOSUB wird eine Zeilennumer angesprungen und der Code an dieser Stelle
fortgesetzt. Sobald die Anweisung RETURN erscheint, wird die Bearbeitung
hinter dem aufrufenden GOSUB fortgesetzt.
Eine Verschachtelung von GOSUBs ist möglich, oft aber zahlenmässig stark
begrenzt.
IF .. THEN ..
Das IF THEN ist in jedem BASIC vorhanden. Ein ELSE ist schon deutlich seltener.
In der einfachsten Form wird der Rest der Zeile, der hinter dem THEN folgt,
ausgeführt, wenn die Bedingung hinter dem IF erfüllt ist.
Die Schleife FOR ... NEXT
FOR ist eine Zählschleife. Es ist die ursprünglich einzige Schleife
in BASIC.
200 FOR I=11 TO 28 STEP 2
250 NEXT I
Mathematische Funktionen
Zeichenketten Funktionen
Sonstiges
Freier Speicher FRE
Mit FRE(x) kann man den freien Speicher bestimmen und löst meist
auch die "Garbage Collection" aus. Das bedeutet, dass das BASIC den Speicher aufräumt
und zusammenschiebt.
Kommentar: REM
Alles was hinter einem REM erscheint, ist Kommentar. Da BASIC interpretiert
wurde und bei den alten Maschinen Geschwindigkeit und Speicher knapp waren,
wurde gern auf Kommentare verzichtet.
Hinterlegte Daten (DATA)
Das Programm kann konstante Daten enthalten. Diese werden hinter
dem Schlüsselwort DATA abgelegt.
Die Daten nacheinander mit dem Befehl READ in eine Variable geholt.
BASIC hält einen Zeiger auf den zuletzt gelesenen Wert.
Diesen Zeiger kann man mit RESTORE wieder auf den ersten DATA-Wert
des Programmes setzen.
900 READ A
10000 DATA 4,3,0,1,5
PEEK und POKE
Mit POKE X,Y konnte ein beliebiger Wert Y an eine beliebige Stelle X im Hauptspeicher
gesetzt werden. Mit PEEK(X) kann der Wert der Speicherstelle X gelesen werden.
Die Befehle dienten einerseits zur direkten Ansteuern von Controllern, andererseits
wurden sie häufig benutzt, um Maschinensprachroutinen in den Speicher zu
schreiben, die im Allgemeinen in grossen DATA-Kolonnen am Ende des
Programms befanden.
Befehlsübersicht
ABS AND ASC ATN CHR$ CLEAR CONT COS DATA DIM END FOR ... TO ... STEP |
FRE GOSUB GOTO IF INPUT LEFT$ LEN LET LIST LOG MID$ NEW |
NEXT NOT ON OR PEEK POKE POS READ REM RESTORE RETURN |
RIGHT$ RND RUN SIN SPC SQR STEP STR$ TAB TAN THEN VAL |
Computer-Oldies Homepage |