Jedem Besitzer eines ST-Rechners, der in BASIC programmiert, sind die vielen Mankos, die die mitgelieferte ST BASIC-Version von Digital Research hat, bekannt. Nicht nur, daß diese Version arithmetisch ungenau ist oder daß die gesamte Grafik extrem langsam abläuft, der Interpreter selbst ist auch noch ungewöhnlich groß. Auch ATARI hat inzwischen eingesehen, daß dieses BASIC für einen solchen Rechner nicht gerade das Geeignetste ist. Konsequenterweise beauftragten sie die Firma Metacomco mit der Herstellung eines besseren und leistungsfähigeren BASIC-Interpreters. Das Produkt von Metacomco hat zur Zeit noch keine Serienreife erlangt, und es ist aus diesem Grund noch kein genauer Liefertermin nennbar. Aber ein anderer BASIC-Interpreter für die ATARI ST Serie ist schon fertig und dann ab Juni im Handel erhältlich. Dieses GfA-BASIC - so lauter der Name des neuen Interpreters - ist ein ausgereiftes Produkt, das die Merkmale eines Rechnertyps wie des ST voll ausnutzt. Wir hatten die Gelegenheit, es zu testen und wurden angenehm überrascht, was man alles in nur 35 KByte packen kann. Unsere Erfahrungen und Eindrücke mit dem GfA-BASIC möchten wir jetzt schildern.
Befehlsliste des GfA BASIC
ABS FRE POKE
ACOS FULLW POLYFILL
ADD GOSUB POLYLINE
ALERT GOTO POLYMARK
AND GRAPHMODE PRBOX
ARRPTR HARDCOPY PRINT oder ?
AS HEXS PROCEDURE
ASC IF QUIT
AS IN IMP RANDOM
AT INC RBOX
ATN INFOW READ
BOX INKEYS RELSEEK
BI N$ INP REM oder '
CHAIN INPUT REPEAT
CHDIR INPUTS RESTORE
CHDRIVE INSTR RETURN
CHRS INT RIGHTS
CIRCLE KILL RMDIR
CLEAR LEFTS RND
CLEARW LEN RSET
CLOSE LET SAVE
CLOSEW LINE SEEK
CLS LIST SETCOLOR
COLOR LLIST SGN
COPY LOAD SIN
COS LOC SPACES
CVD LOCAL SQR
CVF LOF STEP
CVI LOG STRS
CVL LOG 10 STRINGS
CVS LOOP SUB
DATA LPEEK SUM
DATES LPOKE SWAP
DEC LPRINT SYSTEM
DEFFILL LSET TAN
DEFLINE MAX TEXT
DEFMARK MID$ THEN
DEFTEXT MIN TIME
DFREE MKDIR TIMES
DIR MKD$ TITLEW
DIRS MKFS TO
DIM MKI$ TRUNC
DIV MKLS UNTIL
DO MKSS UPPERS
DOWNTO MOUSE VARTPTR
DPEEK MOUSEX WEND
DPOKE MOUSEY WHILE
DRAW MOUSEK XOR
ENDIF MOD
ELLIPSE MUL
ELSE NAME
EOF NEW
EQV NEXT
ERASE NOT
EXIST OCTS
EXIT OFFSET
EXP OR
FIELD OUT
FILES PBOX
FILESELECT PCIRCLE
FILL PEEK
FOR PELLIPSE
FRAC PI PLOT POINT
Ob BASIC ein brauchbares Werkzeug zum Programmieren oder ein Abfallprodukt im Dschungel der Programmiersprachen ist, ist ein Disput, der wahrscheinlich kein Ende nehmen wird. Eines ist aber in jedem Falle sicher: die Anzahl von BASIC-Programmierern im Home- und Personalcomputerbereich wächst von Tag zu Tag. Kaum ein Hersteller von Personalcomputern kann es sich heutzutage leisten, diese Sprache beim Lieferumfang seines Rechners auszuschließen. Auch für den immer größer werdenden Kreis von ST Besitzern ist BASIC eine der beliebtesten und verbreitetsten Sprachen. Drei Interpreter - und in der näheren Zukunft mit dem Metacomco BASIC und dem Omikron BASIC fünf - und ein Compiler sind ein Beweis dafür.
Der GfA BASIC-Interpreter hat allerdings wegen seinen Leistungsmerkmalen eine Sonderstellung. Eine genaue Gegenüberstellung mit dem BASIC von Digital Research ist deswegen nur bedingt möglich.
Der Editor des GfA-BASIC ist anders aufgebaut als bei dem ST BASIC. Obwohl auch hier die Maus benutzt wird, fehlen die Pulldown-Menüs und die beim ST BASIC verwendete Fenstertechnik vollständig. Stattdessen werden am oberen Bildschirmrand in zwei Reihen die Befehle des Editors angezeigt. Diese sind auch durch Anklicken mit der Maus aufrufbar. LOAD, SAVE, MERGE, usw. lassen sich problemlos damit aufrufen. Ebenfalls mit der Maus kann die aktuelle Cursorposition bestimmt werden. Bei Benutzung eines monochromen Monitors ist es möglich, auf einen anderen Schriftmodus (Textmatrix 8 ★ 8) umzuschalten, womit dann 48 Zeilen darstellbar sind. Somit lassen sich Programme übersichtlich auflsiten und editieren.
GfA-BASIC arbeitet mit einem zweiten Bildschirm für die Ausgabe eines Programms. Dieser läßt sich im Editor durch Anklicken der Funktion FLIP erreichen. Nicht nur die Maus hilft bei der Editierung eines Programms, auch die Funktionstasten sind mit wichtigen Eigenschaften belegt. Programmstrukturen, wie zum Beispiel Schleifen, werden durch automatisches Einrücken kenntlich gemacht und beim Auflisten als solche dargestellt. Während des Editierens werden die Syntaxfehler erkannt und es wird darauf aufmerksam gemacht.
Der Editor des GfA BASIC benutzt keine Zeilennummern, so daß bei Sprüngen auf Labels verwiesen werden muß. Es wird nur ein Befehl pro Zeile akzeptiert. Dies bietet zur Strukturierung große Vorteile. Was leider fehlt, ist die Möglichkeit, im Direktmodus zu arbeiten. Dies stört am meisten, wenn man beim Testen eines Programmes bestimmte Variablenwerte abfragen will.
Eines der größten Mankos des Digital BASICs sind die Ungenauigkeiten bei arithmetischen Operationen und die beschränkte Anzahl von verschiedenen Datentypen. Das GfA BASIC füllt auch in diesem Zusammenhang eine Lücke. Alle Integerzahlen sind 32 Bit lang und für Fließkommazahlen werden volle 48 Bit verwendet. Die Genauigkeit beträgt 11 Stellen. Stringvariablen können bis zu 32767 Zeichen enthalten. Eine Besonderheit sind die Variablen des Typs BOOLE-AN, die Werte von 0 oder -1 annehmen dürfen. Die Felddimensionierung ist im Falle der eindimensionalen Felder nur durch den Speicherplatz beschränkt; im Falle der mehrdimensionalen Felder allerdings auf 65 536 Elemente.
Genauso ist die Manipulation von Datentypen durch die Implementierung von zahlreichen Befehlen kinderleicht geworden. Umtausch der Werte zweier Variablen, Löschung von Variablenwerten, Füllung von bestimmten Feldern mit einer Konstante, etc. sind alle durch einzelne Befehle ausführbar.
Außer den normalen Grundrechenarten verfügt das GfA BASIC über eine große Anzahl von Funktionen, die diese Sprache enorm bereichern. Umwandlung in mehrere Zahlensysteme, 32 Bit Peek durch den LPEEK-Befehl, Ermittlung der Zeit der internen Uhr durch TIME sind nur ein paar Stellvertreter dieser Funktionen.
Daß man in BASIC nicht strukturiert programmieren kann, stimmt nur bedingt. Besitzt man einen BASIC-Interpreter wie das GfA BASIC, ist die strukturierte Programmierung ein Genuß. Es sind verschiedene Struktur-Befehle vorhanden, die diesem Zweck dienen. Neben der bekannten FOR... NEXT-Schleife existieren beim GfA BASIC auch noch andere Schleifenstrukturen, die vor kurzem nur von PASCAL her bekannt waren. Dazu gehören z. B. DO...LOOP, REPEAT...-UNTIL, WHILE...WEND, etc.
Außer den bekannten Unterroutinenstrukturen gibt es beim GfA BSAIC auch echte Prozeduren, die mit Labelnamen versehen werden können. Natürlich kann man diesen Prozeduren Parameter übergeben. Die Marken oder Labeldefinitionen dürfen auch mit einer Ziffer beginnen.
Zeit in Sek. | ||
---|---|---|
Benchmark 1 | 0,12 | FOR...NEXT Schleife (1000 mal) |
Benchmark 2 | 0,37 | Inkrementierung von K=0 bis K=1000 |
Benchmark 3 | 1,02 | Alle Grundrechenarten (0 bis 1000) |
Benchmark 4 | 1,01 | Alle Grundrechenarten (A = K/2A3 + 4-5) |
Benchmark 5 | 1,08 | Wie Benchmark 4 mit GOSUB...RETURN |
Benchmark 6 | 1,83 | B 5 mit geschachtelter Schleife |
Benchmark 7 | 2,89 | B 6 mit Zuweisung eines Feldes (DIM) |
Benchmark 8 | 2,99 | Addition, Potenzierung, Logarithmus, Sinus von K |
Auch beim Datenaustausch zeigt das GfA BASIC seine Stärken. Nicht nur die Diskettenstationen oder der Drucker werden angesteuert. Ein Bestandteil der Ein-/Ausgabe-Schnittstelle des ATARI ST ist die MIDI-Schnitt-stelle. Diese wird auch mit einer normalen Peripherieeinheit über BASIC ansprechbar. Die Handhabung von relativen Dateien ist bei dieser BASIC-Version unwahrscheinlich trickreich. Der Filepointer wird über verschiedene Befehle, wahlweise in negativem oder positivem Sinn (zum Fileende), soundsoviele Bytes bewegt. Auch die Handhabung von Unterverzeichnissen der Directory (Ordner) ist über Befehle leicht zu bewältigen. Ein Ordner wird zum Beispiel mittels des CFLDIR zum aktuellen Inhaltsverzeichnis gemacht. Die Beschreibung aller Diskettenbefehle oder zur Benutzung von peripheren Geräten sprengen allerdings den Rahmen dieses Berichtes, so daß wir darauf nicht weiter eingehen wollen.
Daß die ST Rechner ein Grafikwunder sind und sich nicht hinter anderen Computern verstecken müssen, ist schon lange bewiesen. Zahlreiche Mal- und Zeichenprogramme sowie CAD-Applikationen sorgen für den guten Ruf, den der ST besitzt. Doch beim ST BASIC von Digital Research ist davon nicht viel zu merken. Nicht nur, daß die Flandhabung von Grafiken umständlich ist, sie ist auch unheimlich langsam. Das GfA BASIC dagegen triumphiert in diesem Bereich. Die Befehle sind nicht nur leicht zu gebrauchen, sondern die Erstellung einer Grafik wird auch prompt ausgeführt. Die Befehle reichen vom Setzen einzelner Punkte bis zu komplexen mehrseitigen Polygonen. Texte werden auch im Grafikmodus erzeugt, wobei Aussehen und Größe variabel sind. Fenster und Boxen, Elemente der schon bekannten GEM-Umgebung sind auch über BASIC-Befehle zu realisieren.
Zuletzt wurden die unvermeidlichen Benchmark-Tests durchgeführt. Die Werte wurden mittels der internen Uhr ermittelt, wie man leicht an dem Listing der Benchmarks sehen kann.
Mitgeliefert wird neben dem eigentlichen Programm noch ein deutschsprachiges Handbuch, in dem jeder Befehl detailliert erklärt wird. Dieses Handbuch lag uns zur Zeit des Tests allerdings noch nicht vollständig vor, machte aber einen guten Eindruck.
Der BASIC-Interpreter von GfA benötigt eine Umstellung, da es sich von anderen BASIC Dialekten stark unterscheidet. Die Syntax ist aber leicht zu erlernen und bietet mit ihrer Befehlsvielfalt und ihrer Schnelligkeit eine gute Alternative zu anderen Programmiersprachen, die es bis jetzt für den ST gibt.
Alert 1,"Ki1obaud Benchmarks",1,"Return",A
Dim M (5)
Print "Benchmark 1 : “
T=Timer
For I=1 To 1000
Next I
Print (Timer—T)/200
Print "Benchmark 2 :"
T=Timer
K=0
Repeat
K=K+1
Until K>999
Print (Timer—T)/200
Print "Benchmark 3 :"
T=Timer
K=0
Repeat
K=K+1
A=K/K*K+K-K
Until K>=1000
Print (Timer—T)/200
Print "Benchmark 4 :"
T=Timer
K=0
Repeat
K=K+1
A=K/2*3+4-5
Until K>=1000
Print (Timer—T)/200
Print "Benchmark 5 :"
T=Timer
K=0
Repeat
K=K+1
A=K/2*3+4-5
Gosub Dummy
Until K>=1OOO
Print (Timer—T)/200
Print "Benchmark 6 :"
T=Timer
K=0
Repeat
K=K+1
A=K/2*3+4—5
Gosub Dummy
For L=1 To 5
Next L
Until K>=1000
Print (Timer—T)/200
Print "Benchmark 7 : "
T=Timer
K=0
Repeat
K=K+1
A=K/2*3+4-5
Gosub Dummy
For L=1 To 5
M(L)=A
Next L
Until K>=1000
Print (Timer—T)/200
Print "Benchmark 8 : "
T=Timer
K=0
Repeat