C 64
Software-Test

Eintausend und ein Befehl: Super-Forth-64

»Schon wieder ein Forth-Test«, werden jetzt sicher manche Leser sagen. Doch mit Super-Forth-64 testeten wir die wohl beste Forth-Version und gleichzeitig eine der leistungsfähigsten Programmiersprachen für den C 64 überhaupt.

Wir haben schon einige Forth-Implementationen für den C 64 vorgestellt. Aber um es gleich vorweg zu nehmen: Sie werden allesamt von Super-Forth-64 in den tiefsten Schatten gestellt.

Super-Forth kann in der Grundversion mit einem Befehlssatz von weit über 700 Worten aufwarten; üblich sind 200 bis 300. Noch dazu erhält man den Source-Code für ein weiteres Hundert Worte.

Große Kompatibilität

Super-Forth-64 entspricht den drei wichtigsten Forth-Standards: FIG-Forth, Forth-79 und der Forth-Version, die Leo Brodie im Forth-Kultbuch »Starting Forth« verwendet hat. Somit kann man fast absolut sichergehen, daß nicht-computerspezifische Forth-Programme nach dem Abtippen problemlos laufen.

Noch dazu verfügt Super-Forth-64 über eine riesige Menge an systemspezifischen Befehlen, die sämtliche Anwendungsbereiche des C 64 wie Grafik oder Sound abdecken.

Natürlich benötigt diese Befehlsvielfalt auch einiges an Speicherplatz: Gut 22 KByte belegt die gelieferte Version. Diese kann man aber sofort einer Abmagerungskur unterziehen und alle systemspezifischen Worte herausschmeißen. Damit wird der Speicherbedarf auf etwa 11 KByte begrenzt. Für alle systemspezifischen Worte, die »High-Level«-Definitionen haben, die also selber in Forth programmiert wurden, wird der Source-Code auf der Diskette mitgeliefert. Somit kann man sich jederzeit nur die Worte in das System einbinden, die man wirklich braucht. Für einige wenige Worte, die »Low-Level«-Definitionen haben, also in Maschinensprache geschrieben wurden, kann kein Source-Code geliefert werden, da sie nicht im Speicher verschiebbar sind. Diese 46 Worte belegen allerdings nur 1,7 KByte und bieten enorme Möglichkeiten, so daß man wohl nicht auf sie verzichten möchte.

Editor und Assembler

Mit Super-Forth-64 werden der Standard-Forth-6502-Assembler und der Forth-Zeileneditor mitgeliefert. Beide Programme haben sich in den letzten Jahren bewährt und sind praktisch bei jeder Forth-Version vorhanden. Also ist auch hier Kompatibilität geboten. Zusätzlich müssen Umsteiger von kleineren Forth-Systemen sich nicht mit neuen, komplizierten Editoren und Assemblern herumschlagen.

Wie sich während der gesamten Testzeit zeigte, ist Super-Forth-64 hervorragend zur Programmentwicklung geeignet. Will man beispielsweise ein Spielprogramm in Forth schreiben, wird man einige Routinen immer in Assembler programmieren. Nun müßte man während der Entwicklung immer die zwei KByte des Forth-Asemblers im Forth-Kern mit sich herumschleppen. Das fertige Spiel würde aber den Assembler nie mehr benötigen. Um diese zwei KByte nun auch noch zu nutzen, kann der Assembler während der Entwicklungsphase in einen anderen Speicherbereich ausgelagert werden und ist im Endprodukt nicht mehr vorhanden.

Peripherie-Bedienung

Ungeschlagen ist Super-Forth-64 auf dem Gebiet der Peripherie.

Super-Forth-64 arbeitet wahlweise mit Kassette oder Diskette als Massenspeicher. Empfehlenswert ist aber auf jeden Fall ein Diskettenlaufwerk. Bei Super-Forth-64 wurde das Konzept des »virtuellen Speichers« konsequent verwirklicht.

So arbeitet der virtuelle Speicher: Zum Schreiben des Source-Codes stehen Ihnen 170 Screens zur Verfügung. Jeder Screen umfaßt 16 Zeilen zu je 64 Zeichen, also genau 1024 Zeichen. Der Speicher zum Editieren beträgt also 170 KByte. Nun passen die aber nicht in die 64 KByte RAM des C 64. Deswegen sind alle Screens auf die Diskette ausgelagert worden. Beim Editieren eines Programms wird nun immer der aktuelle Screen gelesen oder geschrieben. Der Programmierer bemerkt das alles aber gar nicht, denn das Forth-System verhält sich nach außen hin so, als ob alle Screens im RAM vorhanden wären. Man braucht sich beispielsweise nie Sorgen um das Abspeichern von editierten Screens zu machen, weil Forth das automatisch durchführt. Alles in allem ist die Diskette unter Forth nichts weiter als ein virtuelles (scheinbares) RAM.

Der virtuelle Speicher benötigt 680 Blöcke, also eine komplette Diskettenseite. Disketten, die als virtueller Speicher dienen, können niemals zur Speicherung von normalen Files verwendet werden und umgekehrt. Geradezu fantastisch ist noch die Möglichkeit, mehrere Diskettenlaufwerke (bis zu vier) als einen einzigen virtuellen Speicher zu verwenden. Verständlicherweise funktioniert der virtuelle Speicher nicht mit Kassette. Dort werden Screens als normale Files gespeichert, was weitaus unkomfortabler ist, hat man doch auch nur die Screens zur Verfügung, die im tatsächlichen RAM stehen.

Auch die Druckerbedienung ist problemlos. Die entsprechenden Befehle sind stark an die Basic-Kommandos angelehnt, so daß hier kaum Umgewöhnung notwendig ist. Als Source-Code werden sogar Befehlsworte für die RS232-Schnittstelle und den Commodore-Plotter 1520 mitgeliefert. Zum Thema Peripherie gehören eigentlich auch Bildschirm und Tastatur. Auch hier ist volle Unterstützung des Programmierers durch eine Vielzahl von Befehlen gewährleistet. Die Schwächen so manches Basic-Befehls sind dabei noch ausgebügelt worden. Beim C 64 sind schließlich auch noch Joystick, Paddle und Lightpen Peripheriegeräte, die ebenfalls mit Forth-Befehlsworten bedacht wurden.

Grafik und Musik

Man muß es fast schon als selbstverständlich ansehen, daß bei einem solch enormen Sprachumfang die beiden großen Pluspunkte des C 64 beachtet werden: Die Grafik-und Sound-Möglichkeiten.

Super-Forth-64 bietet sowohl in der Grafik- wie in der Sound-Programmierung einen ausgereifteren Befehlssatz als manche erhältliche Basic-Erweiterung.

Fangen wir mit der Grafik an. Zuerst einmal gibt es recht primitive Worte, die die Speicher-Adressen des VIC manipulieren. Mit diesen Worten kann man komfortabel die Sachen erledigen, die im normalen Basic immer einen POKE brauchen: Grafik einschalten, Speicheradressen festlegen, Farben einstellen und so weiter. Des weiteren gibt es dann Worte, mit denen Linien, Kreise, Ellipsen und Ellipsenausschnitte gezeichnet werden können. Als Krönung des ganzen sind dann noch die Befehlsworte der aus Logo bekannten Turtle-Grafik definiert.

Nicht unterschlagen werden soll hier, daß es natürlich auch diverse Befehle zur Sprite-Modulation bis hin zum einfachen Sprite-Editor gibt. Sehr interessant ist dabei die für eine Programmiersprache ungewöhnliche Möglichkeit, das Aussehen eines Sprites als Befehlswort zu definieren, was die weitere Programmierung sehr erleichtert.

Die Worte für die Sound-Programmierung stehen denen der Grafik in nichts nach. Unter Super-Forth-64 hat man wirklich über den kompletten SID-Chip Kontrolle. Besonders interessant ist der eingebaute Music-Editor, mit dem Musikstücke besser und einfacher programmiert werden können als mit jeder anderen Programmiersprache.

Interrupts

So manches Programmierproblem kann auf dem C 64 recht einfach gelöst werden, bedient man sich der zahlreichen Interrupt-Techniken. Der kleine Nachteil dabei war immer, daß man Interrupts in Assembler programmieren mußte. Super-Forth-64 bietet nun Worte an, mit denen Interrupt-Programmierung in Forth zum Kinderspiel wird, sei es nun ein Rasterinterrupt, um Text und Grafik gleichzeitig darzustellen, die interruptgesteuerte Meßwert-Erfassung oder das Spielen von Musik im Hintergrund.

Interessant sind auch die zwei mitgelieferten Software-Module, die jeweils eine Diskettenseite Source-Screens beinhalten.

Bei dem einen handelt es sich um ein komplettes Fließkommapaket. Normalerweise wird in Forth nur mit Integer-Zahlen gerechnet. Super-Forth-64 enthält im Sprachkern eine ansatzweise Fließkomma-Arithmetik, die die vier Grundrechnungsarten beherrscht. Diese wird durch das Fließkommapaket ergänzt. Es stehen dann mehr mathematische Funktionen zur Verfügung als es das Commodore-Basic erlaubt, ganz abgesehen davon, daß die Forth-Routinen genauer sind. Zusätzlich können Formeln in algebraischer Schreibweise eingegeben werden. Üblich in Forth ist ja sonst nur die umgekehrte polnische Notation.

Das Fließkommepaket enthält außerdem noch Routinen zur schnellen Matrizenrechnung.

Das zweite Zusatzmodul wird als »Artifical Intelligence Modul« bezeichnet. Mit ihm lassen sich prinzipiell sogenannte Expertensysteme erstellen. Die Möglichkeiten sind hier allerdings recht beschränkt, so gibt es keine Optionen für selbstlernende Systeme. Alles, was diese Systeme können sollen, muß vorher programmiert werden. Insgesamt ist also der Begriff »Künstliche Intelligenz« für dieses Paket etwas hochgegriffen. Trotzdem wird man es im einen oder anderen Anwendungsfall gerne verwenden.

Programmierhilfen

Daß Super-Forth-64 ideal zur Programmentwicklung ist, ist hier schon mehrmals gesagt worden. Dies stellen auch die eingebauten Programmierhilfen unter Beweis. Da wäre zuerst einmal ein rekursiv arbeitender Decompiler. Mit ihm können schon definierte Forth-Worte analysiert werden. Rekursiv ist der Decompiler aus folgendem Grund: Nehmen wir an, Sie untersuchen das Wort A. Nun taucht in dessen Definition irgendwann mal das Wort B auf, das sie ebenfalls nicht kennen. Ein Tastendruck, dann wird B decompiliert, und am Ende der B-Definition wird wieder bei A hinter dem Auftauchen von B weiter decompiliert. Diese Verschachtelung können Sie ruhig noch weiter treiben: Bis zur zwanzigsten Ebene herunter zu gelangen ist gar kein Problem, allerdings befinden Sie sich dann meistens schon auf der Primitiv-Ebene, in der Worte in Assembler definiert wurden.

Da wir gerade bei der Rekursion sind: Auch diese wird von Super-Forth-64 voll unterstützt. Forth-Worte können also ohne weiteres sich selbst aufrufen, solange der Prozessorstack nicht überläuft.

Die zweite wichtige Programmierhilfe in Super-Forth-64 ist der Trace-Modus. Vermuten Sie in einem Wort einen Fehler, compilieren Sie es als Trace-Definition. Dann gibt es bei jeder Ausführung auf dem Bildschirm aus, was es gerade macht.

Es sind noch andere Programmierhilfen verfügbar, so zum Beispiel Stack-Kontrollen.

Besonders wichtig in diesem Zusammenhang ist das Wort APPLICATIONS. Hiermit lassen sich »Load-And-Run«-Versionen von Forth-Programmen erstellen. Laden Sie von Basic aus ein mit APPLICATIONS erstelltes Programm und starten es mit RUN, so wird das zuletzt definierte Wort direkt ausgeführt. Das kann zum Beispiel ein in Forth geschriebenes Spiel sein. Die Forth-Herkunft läßt sich diesem Programm nicht ansehen. Da sich aus ihm heraus Super-Forth-64 nicht rekonstruieren läßt, dürfen diese Programme beliebig weitergegeben werden. Dies gilt natürlich nicht für Super-Forth-64 und die mitgelieferten Source-Screens.

Super-Forth-64 bietet noch einiges mehr, so zum Beispiel Zugriff auf das RAM unter dem ROM, Stringverarbeitung oder Diskettenbefehle, doch uns fehlt leider der Platz, die vielen Vorzüge im einzelnen zu besprechen.

Dokumentation

Über die mitgelieferte Dokumentation braucht man nicht viele Worte zu verlieren: Sie ist sehr umfangreich, genau und, wie leider üblich, in Englisch. Wer aber diese Sprache beherrscht, der wird mit einem wirklich vorzüglichen Handbuch belohnt, das nicht nur die Bedienung, sondern auch das Programm selbst genauestens beschreibt.

Fazit

Eines kann man zum Schluß dieses Testberichts ganz klar sagen: So ein Forth gab es für den C 64 noch nie. Gerade diejenigen, die professionelle Programme in Forth schreiben wollen, werden mit Super-Forth-64 bestens bedient. Die dürften sich auch nicht über den Preis von 380 Mark ärgern. Denn hier bekommt man für sein Geld wirklich einiges an Qualität und Quantität geboten.

(Boris Schneider/ev)

Super-Forth-64, 378 Mark, Parsec Research, Drawer 1766-P, Fremont, CA 94538.
Vertrieb in Deutschland: Forth-Systeme Angelika Flesch, Schützenstr. 3, 7820 Titisee-Neustadt

PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →