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