Nascom Journal |
September 1981 · Ausgabe 9 |
vorher enthält T die 16-Bit-Zahl, nachher den Zeiger auf den Dezimal-String im N-Buffer. | |
PROMPT | :gibt Newline und Promptzeichen aus |
MATCH | :Stringvergleich; vorher T = Zeiger auf ersten, T-1 auf zweiten String; nachher T = −1 falls gleich, sonst 0, T−1 und T-2 Zeiger auf 1. bzw. 2. String. |
COUT | :T enthält Zeichen, das ausgegeben wird |
CIN | :liest Zeichen ein, T enthält nachher das Zeichen |
LOOKUP | :Sucht im Dictionary nach einem Wort; vorher: T Zeiger auf Dictionary, T−1 Zeiger auf String; nachher: T = −1, falls gefunden, sonst = 0, T-1 enthält Codeadresse, falls gefunden, sonst Zeiger auf String. |
Interpreter, Compiler und Verschiedenes | |
---|---|
: | :ruft den Compiler auf |
ENTER | :trägt einen neuen Namen ins Dictionary ein, T = Zeiger auf Namen |
CMPLW | :Compiliert ein Threaded-Code-Wort, T = Code, der eingetragen wird. |
MOVEBYTES | :Verschiebt T Bytes nach (T-1) von (T-2) |
INTERACT | :Liest eine Zeile in UPN von der Tastatur ein und ruft sie auf: Benutzer-Interpreter. |
EXECUTE | :ruft die Routine auf, deren Adresse auf dem Stack liegt. |
CONS | :gibt die Adresse der CONS-Funktion |
VARBL | :gibt die Adresse der VARIAB-Funktion (siehe Beispiele unten!) |
Constanten und Variablen | |
I,J,K | :geben den Wert der Schleifenvariablen auf den Stack |
NAMES | :Startadresse des Interpreter-Dict. |
EXEC | :Die Routine TOP führt in einer endlosen Schleife das Programm aus, dessen Adresse von der Variablenfunktion EXEC auf den Stack gegeben wird. Bei Initialisierung des Systems: Interact |
MEMORY | :Obergrenze RAM |
ONE, ZERO, NEGONE | :Constanten 1,0,-1 |
Compiler-Dictionary | |
; | :beendet die Compilierung |
IF ELSE THEN | :IF testet den Stack; falls T = 0 wird bei ELSE (falls vorhanden) das Programm fortgeführt bzw. bei THEN; Falls T ungleich 0, werden die folgenden Programmschritte ausgeführt bis ELSE |
(dort springt das Programm nach THEN) oder, falls kein ELSE vorhanden, bis THEN. Im Standard-FORTH ist THEN durch ENDIF ersetzt, das klingt wenigstens ein bischen logischer! UPN! | |
REPEAT UNTIL LOOP | :Das ist nicht ganz so schlimm: der Programmteil zwischen REPEAT und LOOP wird so lange wiederholt, bis das dazwischen liegende UNTIL einen Wert ungleich 0 auf dem Stack vorfindet. Dann wird das Programm mit der nächsten Routine hinter LOOP fortgesetzt. |
FOR LOOP | :Die Schleifenvariable (I,J oder K- von innen nach außen) erhält den Anfangswert T und wird bei jeder Schleifenwiederholung incrementiert, bis sie den Wert T-1 erreicht hat. Außer durch die umgekehrte Eingabe unterscheidet sich das nicht von der For-Next-Schleife in BASIC. |
Eins möchte ich zur Beruhigung und Ermutigung hinzufügen: das liest sich alles viel komplizierter als es in der Praxis ist: Ausprobieren!
E 1000 – : CR 13 COUT ; 1905 – : GRKL 3111 PEEKB EQZ IF 1 ELSE 0 THEN 3111 POKEB ; 1905 – : TEXT RKL REPEAT CIN DUP 27 EQ UNTIL COUT LOOP POP CR GRKL ; 1905 -TEXT
Mit E 1000 wurde der Interpreter aufgerufen. Es wurden zunächst 2 Hilfsfunktionen compiliert:
CR = Newline ausgeben
GRKL = Umschaltung der Tastaturoption von Großauf Kleinschreibung und
umgekehrt.
Dann wurde die Funktion TEXT compiliert. Sie erlaubt mir, eben diesen Text, den Sie jetzt lesen, auf den Bildschirm zu schreiben und mit der eingeschalteten Druckeroption (U-Befehl) auf der Schreibmaschine auszugeben. Das Programm kann mit ESCAPE (Hex 7F) verlassen werden. Auf dem Nascom-1 ist das allerdings etwas mühselig: da muß man nämlich gleich 3 Tasten betätigen (Control, Shift und /) und genau das werde ich jetzt tun!
1905 – : X GETWORD DUP DUP PEEKB INC + 0 SWAP POKEB INC 3086 POKEW 100 NAS-SYS 3105 PEEKW ; 1905 -TEXT
Seite 12 von 28 |
---|