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 überCATALOG > 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.