Tiny-MP-BASIC

Tiny-MP-BASIC ist der Dialekt des BASIC-Interpreters, den der Einchipmikrorechner U883 in seinem ROM enthält. Dieser BASIC-Dialekt ist recht einfach und bietet eine 16-Bit-Ganzzahlarithmetik, d.h., die numerischen Werte können von -32767 bis 32767 reichen. Fließkommazahlen und Zeichenkettenverarbeitung werden nicht geboten.

1. Komprimiertes Speicherformat

Das BASIC-Programm muss im Arbeitsspeicher in einem speziell komprimierten Format vorliegen. Bei diesem Format bestehen die Anweisungen nur aus einem Zeichen, Leerzeichen sind nur in Zeichenketten und Kommentaren zugelassen und %0D steht für das Zeilenende.

Die Zeilennummern werden als 16-Bit-Zahlen gespeichert, wobei das höchstwertige Bit, dass normalerweise das Vorzeichen darstellt, immer gesetzt ist.

Es ist die Aufgabe eines Editors, ein BASIC-Programm in diese komprinierte Form zu überführen. Daher ist es möglich, dass sich die Namen der Anweisungen und in geringem Umfang auch die Syntax von Editor zu Editor unterscheiden.

Alle Betriebssystemversionen des JU+TE-Computers enthalten einen Editor zur Eingabe und zur Anzeige von BASIC-Programmen, jedoch gibt es beim 2K-Betriebssystem und beim EMR-ES 1988 Einschränkungen bzgl. der Zeilennummern. Mit dem im Emulator integrierten Texteditor kann man ebenfalls BASIC-Programme eingeben und sich anzeigen lassen.

2. Anweisungen

AnweisungKomprimierte Form
CALL <Ausdruck>C
ELSE ; <Anweisungen> [ ; ...] >
ENDE
GOSUB <Ausdruck>S
GOTO <Ausdruck>G
IF <Bedingung> THEN <Anweisung> [ ; ...] F <Bedingung> ;
INPUT [ <Zeichenkette> ] <Variable> I
LET <Variable> = <Ausdruck> [ , ...] L
PRINT [ <Zeichenkette> ] [ <Ausdruck> ] [ , ] [...] P
PTH [ <Zeichenkette> ] [ <Ausdruck> ] [ , ] [...] H
PROC [ <Variablenliste> ] = <Name> <Argumentliste> O
RETURNR
REM <Kommentar>M
STOPT
TOFF/
TRAP <Bedingung> TO <Ausdruck> ! <Bedingung> ,
WAIT <Ausdruck>W


2.1. Besonderheiten bei IF...THEN...ELSE

Die ELSE-Anweisung muss als erste Anweisung in der Zeile stehen, die der IF-Anweisung unmittelbar folgt. Hinter dem ELSE ist ein Semikolon erforderlich, dann folgen die Anweisungen des ELSE-Zweiges.

Beispiel:
100 IF A<10 THEN PRINT "A<10"
110 ELSE; PRINT "A>=10"


Ein ELSE in der gleichen Zeile mit der IF-Anweisung hat keine Wirkung.

Wenn mehrere IF-Anweisungen in einer Zeile stehen, benutzen diese alle den gleichen ELSE-Zweig, d.h., wenn eine IF-Anweisung nicht erfüllt ist, egal welche, werden immer die Anweisungen hinter dem ELSE in der nächsten Zeile ausgeführt. Weitere ELSE-Anweisungen haben keine Wirkung.

3. Prozeduren

Prozeduren können Werte zurückliefern. Diese werden in die Variablen geschrieben, die in der optionalen Variablenliste angegeben sind. Die Variablenliste ist eine in eckigen Klammern eingeschlossene und mit Kommas getrennte Aneinanderreihung von Variablen.

Die Paramter der Prozeduren werden ebenfalls in eckigen Klammern eingeschlossen. Folgende Prozeduren kennt das Tiny-MP-BASIC:
Name und SyntaxBedeutung
GETEB [ <Adresse> ] Liest ein Byte aus dem Arbeitsspeicher
GETEW [ <Adresse> ] Liest ein 16-Bit-Wort aus dem Arbeitsspeicher
GETR [ <Register> ] Liest ein Register
GETRR [ <Register> ] Liest ein Doppelregister
PTC [ <ASCII-Code> ] Gibt das Zeichen entsprechennd dem ASCII-Code aus
SETEB [ <Adresse> , <Wert> ] Schreibt ein Byte in den RAM
SETEW [ <Adresse> , <Wert> ] Schreibt ein 16-Bit-Wort in den RAM
SETR [ <Register> , <Wert> ] Schreibt einen Wert in ein Register
SETRR [ <Register> , <Wert> ] Schreibt einen Wert in ein Doppelregister


4. Zeichenketten

Bei den Anweisungen INPUT, PRINT und PTH sind Zeichenketten erlaubt. Eine Zeichenkette beginnt und endet mit Anführungszeichen. Alle Zeichen dazwischen werden auf dem Bildschirm ausgegeben.

5. Bedingungen

Hinter den Schlüsselwörtern IF und TRAP wird eine Bedingung erwartet. Die Syntax für eine Bedingung ist:

<Ausdruck> <Vergleichsoperator> <Ausdruck>

Tiny-MP-BASIC kennt folgende Vergleichsoperatoren:
VergleichsoperatorBedeutung
<Kleiner
<=Kleiner oder gleich
=Gleich
>=Größer oder gleich
>Größer
<>Ungleich


6. Ausdrücke

Ein Ausdruck besteht aus Dezimalzahlen, Hexadezimalzahlen, Variablen und/oder Funktionen, die mit Operatoren verknüpft und mit runden Klammern beliebig geschachtelt werden können. Folgende Operatoren sind möglich:
OperatorBedeutung
+Addition
-Subtraktion
*Multiplikation
/Ganzzahlige Division
$MModulo (Rest der ganzzahligen Division)
$ABitweises UND (AND)
$OBitweises ODER (OR)
$XBitweises ausschließendes ODER (XOR)


Es gibt keine Vorrangarithmetik, d.h., die Operatoren werden streng von links nach rechts abgearbeitet.

LET A=1+2*3

weist der Variablen A den Wert 9 zu, und nicht, wie es mathematisch richtig wäre, den Wert 7. Um eine andere Reihenfolge zu erreichen, müssen die Teilausdrücke in runde Klammern eingeschlossen werden, z.B.:

LET A=1+(2*3)

6.1. Dezimalzahlen

Dezimalzahlen bestehen aus den Ziffern 0 bis 9 und können, sofern sie am Anfang eines Ausdrucks oder geschachtelten Ausdrucks stehen, auch ein Minus als Vorzeichen enthalten.

6.2. Hexadezimalzahlen

Hexadezimalzahlen beginnen mit einem Prozentzeichen gefolgt von den groß geschriebenen Hexadezimalziffern. Der Wert einer Hexadezimalzahl darf %FFFF nicht überschreiten.

6.3. Variablen

Es gibt 26 numerische Variablen, deren Namen jeweils nur aus einem Buchstaben bestehen (A bis Z). Zeichenkettenvariablen gibt es nicht.

6.4. Funktionen

Folgende Funktionen kennt das Tiny-MP-BASIC:
Name und SyntaxBedeutung
ABS [ <Ausdruck> ] Absoluter Betrag
GETEB [ <Adresse> ] Liest ein Byte aus dem Arbeitsspeicher
GETEW [ <Adresse> ] Liest ein 16-Bit-Wort aus dem Arbeitsspeicher
GETR [ <Register> ] Liest ein Register
GETR [ <Register> ] Liest ein Doppelregister
GTC Wartet auf einen Tastendruck und liefert den ASCII-Code im unteren Byte zurück
INPUT Wartet auf die Eingabe einer Zahl und liefert deren Wert zurück
NOT [ <Ausdruck> ] Logisches Komplement
RL [ <Ausdruck> ] Rotiert den 16-Bit-Ausdruck um ein Bit nach links
RR [ <Ausdruck> ] Rotiert den 16-Bit-Ausdruck um ein Bit nach rechts


Die Argumente werden in eckigen Klammern eingeschlossen.

7. BASIC-Fehlermeldungen

ERROR 0 Syntaxfehler,
CONT ohne STOP oder
Programmende ohne END bzw. STOP
ERROR 1 Mehr als 15 GOSUB-Aufrufe verschachtelt
ERROR 2 RETURN ohne GOSUB
ERROR 4 Division durch Null
ERROR 8 Überschreitung des zulässigen Zahlenbereichs

Bei gleichzeitigem Auftreten mehrerer Fehler werden die einzelnen Fehlernummern addiert und als Summe ausgegeben.

8. Literatur

[1] Dr. Hoyer, Helmut: JU+TE Computer selbst gebaut, Zeitschrift Jugend+Technik, Heft 12/1987, Seiten 930-932, Verlag Junge Welt, Berlin 1987
[2] Dr. Hoyer, Helmut: JU+TE Computer selbst gebaut, Zeitschrift Jugend+Technik, Heft 1/1988, Seiten 70-74, Verlag Junge Welt, Berlin 1988