BASIC

BASIC war auf den ersten 8-Bit Computern die am weitesten verbreitete Programmiersprache. Da die Computer dieser Zeit fast nur von Programmierern gekauft wurden, gehörte die Sprache zum Lieferumfang des Computers und befand sich bereits im ROM.

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.

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.

Will man das komplette Programm und alle Variablen aus dem Speicher entfernen, verwendet man den Befehl NEW.

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.

Ursprünglich stand das Schlüsselwort LET vor einer Zuweisung. Dieses lassen auch fast alle Dialekte zu. Wenige fordern das LET noch.

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.

Dialekte, die auch ein ELSE haben, kennen meist auch einen Abschlussbefehl für das IF. Dieses lautet FI, IFEND oder END.

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

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.

Mathematische Funktionen

ABS(x)
liefert den Wert von X ohne Vorzeichen.
ATN(x)
liefert den arcus tangents von X.
COS(x)
bildet den Cosinus von X.
LOG(x)
bildet den natürlichen Logarithmus von X.
SIN(x)
bildet den Sinus von X.
SQR(x)
liefert die Wurzel von x, auf einigen Systemen aber das Quadrat(!) von X, dann ist die Wurzel SQRT!
SQRT(x)
liefert die Wurzel von x.
TAN(x)
liefert den tangents von X.

Zeichenketten Funktionen

ASC(X$)
liefert den ASCII-Wert des Zeichens in X$.
CHR$(X)
liefert das Zeichen, dessen ASCII-Wert in X steht.
MID$(X$, A, L)
liefert den Teilstring von X$, der an der Position A beginnt und L Zeichen lang ist.

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.

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.

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
PRINT
READ
REM
RESTORE
RETURN
RIGHT$
RND
RUN
SIN
SPC
SQR
STEP
STR$
TAB
TAN
THEN
VAL

Computer-Oldies Homepage E-Mail