[30] 21.11.2021 17:17
Free42 im "Big Stack"-Modus

Ein paar Notizen zur Verwendung von Free42 im Modus NSTK.

Big Stack auf Free42

Free42 bietet seit Version 3.0 zusätzlich zum klassischen Modus mit den vier Registern X, Y, Z und T (4STK) einen Big Stack-Modus (NSTK) an, der (wie bei HPs RPL-Rechnern) die Anzahl der Speicherplätze im Stack nur durch den vorhandenen Speicher begrenzt. Das gilt auch für die Implementierung am DM42.

NSTK aktivieren

Bevor man den NSTACK-Modus aktivieren kann, muss man ihn in den Einstellungen freischalten. Bei Free42 macht man das über File > Preferences... > Allow Big Stack (NSTK) mode. Am DM42 hakt man SETUP > Settings > Dynamic Stack Extension an. Danach kann man den Big Stack-Modus über CATALOG > STK > NSTK einschalten.

4STK-Programme in NSTK-Umgebung ausführen

Ob NSTK eine Verbesserung oder Verwässerung des klassischen RPN ist, möchte ich hier nicht diskutieren. Wenn man sich aber entschließt NSTK beim interaktiven Rechnen zu verwenden, stößt man schnell auf das Problem, dass viele klassische DM42-Programme nur im Modus mit dem klassischen vierstufigen Stack (4STK) richtig funktionieren, weil sie sich z.B. auf das spezielle Verhalten des T-Registers verlassen.

Um das zu umgehen, kann in Programmen die Anweisung geben den 4STK-Modus aktiveren, beim Beenden automatisch auf NSTK zurückzuschalten und die Inhalte des Stacks zu rekonstruieren. Ein (dummes) Beispielprogramm, das in den 4STK-Modus umschaltet und die Inhalte der ersten vier Register addiert:

01 LBL "STEST"
02 FUNC 41
03 L4STK
04 +
05 +
06 +
07 END
FUNC 41
FUNC XY bereitet die Inhalte des Stacks für die Ausführung einer Funktion vor. Als Argumente (XY) werden zwei Zahlen zwischen 0 und 4 angegeben. X enthält die Anzahl der Argumente, die die Funktion vom Stack konsumiert. Y beschreibt die Anzahl der Ergebniswerte. Eingegeben werden kann die Funktion über CATALOG > PRGM > FUNC. Details zu FUNC findet man hier.
L4STK
Schaltet bis zum Ende der Funktion in den 4STK-Modus um und speichert die Inhalte der Stack-Register 5 und höher. Beim Beenden der Funktion wird der NSTK-Modus wieder aktiviert und der Stack wiederhergestellt. Eingegeben werden kann die Funktion über CATALOG > STK > L4STK. Details zu L4STK findet man hier.

Es geht übrigens auch umgekehrt mit der Funktion LNSTK.

RPN? RPL? Entry RPN?

tl;dr: (Klassisches) RPN verwendet einen Stack mit vier Registern (X, Y, Z und T). Der Wert des obersten Registers (T) wird in das nächste (Z) kopiert, wenn der Stack "fällt" (= durch Verarbeitung der unteren Einträge kleiner wird). Außerdem darf bei RPN nach der Eingabe des letzten Werts nicht ENTER gedrückt, sondern es muss sofort ein Operator gewählt werden. Im Gegensatz dazu hat RPL / Entry RPN "unendlich viele" Registerplätze und man darf auch nach der Eingabe des letzten Werts ENTER drücken. Es gibt noch viele andere Unterschiede, die vor allem die Programmierumgebung betreffen.

Auf MoHPC kann man die Details der Unterschiede zwischen klassischem RPN und Entry RPN / RPL nachlesen. Dieses RPN-Tutorium beschreibt in seinen Beispielen beide RPN-Arten mit sehr schönen Stack-Tabellen.


[->/]