Tutorial Thread - Bitte hier keine Fragen posten!
Nutzt dazu diesen Thread hier: DurexFORTH - Diskussion zum Tutorial
__________________________________
DurexForth - Ein Selbstversuch, Teil 1
So, nach eingehender Prüfung habe ich mich entschlossen, meine ersten Gehversuche in Forth mit DurexForth zu unternehmen.
Sieht man einmal von dem zugegebenermaßen etwas pubertären Namen dieses Forth Compilers ab (namensgebend war hier die schwedische Retro-Hacker Gruppe "DUREX"), so kann sich das Forth System durchaus sehen lassen: DurexForth ist Open-Source (MIT License) und als Basis dient der Forth 2012 Standard. Den bei Forth Compilern üblichen Editor hat man hier in Form eines minimalen "vi" Editors (bekannt aus der UNIX und Linux Welt) umgesetzt. Mir persönlich kommt das sehr entgegen, da ich ohnehin beruflich wie privat Linux einsetze und den "vi" Editor daher täglich nutze.
Zudem werden Quelltexte bei DurexForth nicht, wie bei älteren Compilern üblich, in einem Block basierten Dateisystem abgelegt, sondern als einfache Textdateien auf der Diskette gespeichert. Das wiederum hat u.a. den Vorteil das man diese Dateien mit Hilfe des "c1541" Programs, welches mit dem Vice Emulator daher kommt, bequem auf den PC übertragen kann.
Last but not least sollte ich erwähnen, das DurexForth das Einbinden von zusätzlichen Sprachmodulen erlaubt. Diese Module erweitern den Compiler um Befehle zur Erzeugung von Tönen, der Darstellung von Sprites oder dem Zeichnen von Grafiken. Entsprechende Demos stehen als "Appetizer" auf dem .D64 Image bereit.
Eine kompakte aber vollständige (englischsprachige) Dokumentation im PDF Format rundet den guten Eindruck dieses Forth Systems ab. Ich benutze bewusst den Begriff "System", denn klassische Forth Compiler haben neben Compiler und Editor oftmals auch eine art minimalistisches Betriebssystem bereitgestellt. Diesen Ansatz verfolgt auch DurexForth.
Doch genug des Lobes, schauen wir uns das alles mal etwas genauer an. Unter (https://github.com/jkotlinski/durexforth/releases) kann die jeweils aktuelle Version der Dokumentation und des .D64 Images heruntergeladen werden. Im Verlaufe meines Selbstversuchs werde ich aus Gründen der Bequemlichkeit auf den VICE Emulator zurückgreifen, u.a. weil ich so ggf. Screenshots bereitstellen kann. Den Einsatz auf original Hardware kann das aber selbstverständlich nicht ersetzen. Wahre Coolness ist halt immer noch Keil- oder Brotkastenförmig.
Nachdem man nun die Diskette bzw. das Image eingelegt hat, lädt man das System mittels der bekannten Zauberformel LOAD"*",8,1 und startet es dann mit RUN.
Beim allerersten Start lädt DurexForth einige Module nach und compiliert die darin enthaltenen Worte (Befehle). Dies dauert einen kleinen Augenblick, anschließend wird das um die soeben geladenen Module erweiterte Forth System wieder auf der Diskette gespeichert. Damit sind wir startklar und DurexForth begrüsst uns mit dem für Forth typischen Prompt:
ok
Bevor wir nun aber beginnen, unsere ersten Versuche mit Forth zu starten, schauen wir uns erstmal unsere Entwicklungsumgebung an, denn diese ist Umfangreicher als es das simple "ok" Prompt erahnen lässt. Daher schauen wir uns erstmal an, was neben dem dem eigentlichen Forth System noch so auf der Diskette enthalten ist. Dazu bedienen wir uns in bester UNIX / Linux Manier dem Befehl "ls" und geben diesen am Prompt ein:
Nun sollten wir das Directory der Diskette aufgelistet bekommen. Um einen ersten Eindruck über die Möglichkeiten dieser Sprache zu erhalten, schauen wir uns eines der Demos an. Dazu geben wir zunächst am Prompt folgenden Befehl ein:
Mit dem Befehlswort "require" werden unter DurexForth zusätzliche Sprachmodule mit weiteren Befehlsworten nachgeladen. Diese bleiben bis zum reset der Maschine im Wörterbuch unserer Forth Umgebung gespeichert. Im obigen Fall haben wir die Spracherweiterung zur Darstellung von Sprites nachgeladen. Lassen wir es ein wenig bunt werden indem wir nun das beiliegende Sprite Demo laden. Dazu geben wir am Prompt folgendes ein:
Nachdem das Sprite Demo geladen wurde, sollten auf unserem Blidschirm ein paar bunte "DurexForth" Sprites herumtanzen. Zeit, sich kurz zurück zu lehnen und das Spektakel zu geniessen. Das Demo kann durch drücken des bekannten "Any Key" beendet werden, woraufhin sich wieder das Forth Prompt meldet:
ok
Um das Demo erneut ablaufen zu lassen, geben wir am Prompt einfach den folgenden Befehl ein:
In gleicher Weise kann durch laden des Grafikmoduls "gfx" und des entsprechenden Demoprogramms auch das Grafikdemo aufgerufen werden. Dazu geben wir am Prompt ein:
ok
Danach laden wir das Grafikdemo:
Diese beiden kleinen Demoprogramme zeigen sehr gut die umfangreichen Möglichkeiten und die beachtliche Performance von DurexForth auf.
Und damit wir zum Ende dieses ersten Teils auch noch etwas konstruktives leisten, wollen wir ein erstes "Hello World!" Programm schreiben. Dazu geben wir am Prompt folgendes ein (auf die Leerzeichen achten!):
Was haben wir nun genau gemacht? In Forth werden anstelle von Funktionen, wie man sie z.B. von Pascal oder C her kennt, sogenannte "Wörter" (words) definiert welche in einem sogenanntem Wörterbuch (dictionary) abgelegt werden. Man srpicht bei Forth daher auch von einem Vokabular (vocabulary). Die Definition eines solchen Wortes wird in Forth mit einem Doppelpunkt : eingeleitet. Danach folgt, durch ein Leerzeichen getrennt, das eigentliche, zu definierende Wort - in unserem Fall hello. Als nächstes folgen nun, ebenfalls durch Leerzeichen getrennt, weitere Befehle aus dem Forth Wörterbuch. In unserem Fall ist dies der Befehl ." Hello World!" .
Ihr ahnt es schon, ." ist das Forth Wort, um einen Text auszugeben. Beachtet bitte, das zwischen dem ersten Anführungszeichen und dem auszugebenden Text ein Leerzeichen zu setzen ist, da der Forth Compiler ansonsten das Wort ." nicht interpretieren kann. Also nicht: ."Hello World!" sondern: ." Hello World!" . Das Leerzeichen wird bei der Ausgabe des Textes nicht angezeigt, es dient lediglich zur Trennug von Befehlswort und auszugebenden Text. Am Ende des auszugebenden Textes folgt dann ein abschliessendes Anführunszeichen. Man kann also sagen das ." Hello World!" in Forth einem PRINT "Hello World!" in BASIC entspricht.
Zu guter letzt wird unsere Definition mit einem durch ein weiteres Leerzeichen separierten Semikolon ; abgeschlossen. Nach betätigen der Enter Taste wird nun die Definition unseres Wortes hello kompiliert und dem Wörterbuch von Forth hinzugefügt. Wenn wir nun am Prompt hello eingeben,
dann sehen wir folgendes:
Hello World!ok
... und damit sind wir am Ende von Teil 1 meiner kleinen Reise die Welt von Forth angelangt. Wie es weitergeht, seht Ihr in der nächsten Folge von "obsoltees Nerd-Wissen, das kaum einen interessiert" - stay tuned.