Nascom Journal

  

September 1981 · Ausgabe 9

FORTH für den Nascom

Teil 2 – von Günter Kreidl

Im letzten Heft wurde der prinzipielle Aufbau einer Threaded-Code-Sprache beschrieben. In diesem Heft folgt nun das Assembler-Listing einer 1. Version, die nach der Anleitung von Richard Fritzson („Write Your Own FORTH Interpreter“, Microcomputing, Februar 81; „Write Your Own Pseudo-FORTH Compiler“, ebenda, März 81) geschrieben wurde. Wie der Titel des zweiten Aufsatzes schon sagt, hat sich „der Sohn vom Fritz“ nicht streng an die Terminologie des Standard-FORTH gehalten, falls es so etwas im strengen Sinne überhaupt gibt. Erst nach der Fertigstellung dieser Version kam mir ein Verzeichnis des Standard-FORTH der FORTH Interest Group in die Hände – zu spät, um noch Anpassungen vorzunehmen. Programmaufbau, Threaded-Code-Routinen und Konstruktion des „Dictionary“ habe ich von Fritzson übernommen. Die Maschinencode-Routinen wurden vom 8080-Assembler-Code in Z-80-Code umgeschrieben und teilweise mit den effektiveren Z-80-Befehlen verbessert. Die Hauptschwächen der Vorlage (nur positive Zahlen, keine Überlaufkontrolle bei den mathematischen Funktionen, keine Syntax-Kontrolle) wurden noch nicht verbessert. Ich habe jedoch eine Reihe von logischmathematischen Operationen hinzugefügt und eine Software-Schnittstelle zum Betriebs-System, die den Einbau fast aller Unterprogramme des Monitors in FORTH-Programme ermöglicht. Diese Routine ist allerdings spezifisch auf NAS-SYS zugeschnitten und muß von T2/​T4-Benutzern neu geschrieben werden. Ansonsten ist das Programm auch mit T2/​T4 lauffähig, wenn man den Aufruf der Ein- und Ausgaberoutinen ändert (es wurde Platz für CALL-Befehle gelassen) und die Steuerzeichen für den Bildschirm austauscht. Geändert habe ich auch die Speicheraufteilung. Stacks und Puffer wurden aus dem Programmbereich entfernt. Sie belegen den Bereich von E00 bis 1000 Hex. Das Programm belegt beim erstmaligen Start den Speicher von 1000 bis 1871 Hex. Beim Aufruf des Interpreters wird dann das „Dictionary“ an die Obergrenze des Speichers (im Listing 2000 Hex) verschoben. Das ursprüngliche „Dictionary“ und die Verschiebungsroutine werden dann von dem neu compilierten Code überschrieben, so daß also der Code von unten nach oben und das „Dictionary“ von oben nach unten aufeinander zuwachsen. Ein gegenseitiges Überschreiben wird dabei verhindert (Dictionary Full). Die Initialisierungsroutine wurde ganz neu geschrieben, da die alte keinen Warmstart ermöglichte. Beim ersten Start wird die Verschiebungsroutine aufgerufen, bei jedem neuen Start (ebenfalls mit E 1000) findet man das System in dem Zustand vor, in dem man es verlassen hat. Will man ein durch neu compilierte Befehle erweitertes System auf Cassette speichern, muß man den Bereich von 1000 bis 2000 abspeichern. Man kann aber auch eine Funktion definieren, die den Programmtext auf Cassette speichert. (Mehr darüber im nächsten Heft) Überhaupt lassen sich die meisten der gegenüber dem Standard-FORTH fehlenden Operationen mit dem System selbst relativ leicht compilieren. Die oben beschriebenen Schwächen hingegen lassen sich nur durch bessere Maschinenprogramme beheben. Ich hoffe hierbei auf die rege Mitarbeit der Leser des Journals.

Zum Assemblerlisting

Da ich bei meinem Nascom nur 5 KB Speicher für den Quelltext zur Verfügung habe, mußte ich das Programm in Blöcken assemblieren. Deshalb wurden alle nicht lokalen Marken durch EQU-Definitionen im Block 0 ersetzt. Damit das Programm trotzdem leicht zu ändern ist, sind die Adressen nicht absolut sondern relativ definiert, jeweils durch die Länge der vorangehenden Routine. Aus dem gleichen Grund habe ich auf alle Kommentare verzichtet, nur der Name der Routine wird jeweils als Kommentar angehängt. Es folgt darum unten eine Kurzbeschreibung aller Routinen, die von FORTH aus aufgerufen werden können. Die nicht im „Dictionary“ enthaltenen Unterprogramme werden im nächsten Heft erläutert. In der Beschreibung bedeutet „T“ den obersten Wert auf dem Stack, „T−1“ den zweitobersten etc. „X“ steht für das brit. Pfundzeichen, § für das Dollarzeichen.

An das Assemblerlisting schließt sich noch eine Demonstration des Programms an. Mit der U-Option lief die Schreibmaschine mit, als das Programm aufgerufen wurde. Alle Eingaben und alle Antworten des Interpreters bis zum Rücksprung ins Betriebssystem wurden so dokumentiert. Ich hoffe, daß dies eine Hilfe bei der Inbetriebnahme des Programms darstellt.

Seite 10 von 28