01-13-2021, 05:19 PM

I have some stack save/restore routines on my 42S that might offer some inspiration on how to design this.

There's just one save routine:

SS - Save stack (saves the entire stack, including L)

Then there are a few different restore routines that restore the stack in various ways, called just before the program returns. The names start with R, followed by a list of what to restore to each stack register - X, Y, Z, T, L, in that order. An underscore signifies "leave it alone", i.e. that register contains an output of the program that's calling the save/restore routines.

R_YZTX - Leave X alone, restore Y, Z, T to their original positions, restore previous X into L. Similar to one-input, one-output functions like LN, or some two-input, one-output functions like %.

R_ZTTX - Leave X alone, restore Z to Y, T to Z and T, and X to L. Similar to two-input, one-output functions like +.

R_TTTX - Leave X alone, restore T into Y, Z, and T, and restore X to L. Three-input, one-output function, or a four-input, one-output function. (Are there any examples of these?)

A few other examples that I could potentially implement if I needed them:

RYZTTX - A one-input, no-output function that drops the stack, and saves the previous X in L.

R_XYZL - A no-input, one-output function, like RCL, DATE, etc.

R__ZTL - A no-input, two-output function that overwrites X and Y, such as MEAN.

There's just one save routine:

SS - Save stack (saves the entire stack, including L)

Then there are a few different restore routines that restore the stack in various ways, called just before the program returns. The names start with R, followed by a list of what to restore to each stack register - X, Y, Z, T, L, in that order. An underscore signifies "leave it alone", i.e. that register contains an output of the program that's calling the save/restore routines.

R_YZTX - Leave X alone, restore Y, Z, T to their original positions, restore previous X into L. Similar to one-input, one-output functions like LN, or some two-input, one-output functions like %.

R_ZTTX - Leave X alone, restore Z to Y, T to Z and T, and X to L. Similar to two-input, one-output functions like +.

R_TTTX - Leave X alone, restore T into Y, Z, and T, and restore X to L. Three-input, one-output function, or a four-input, one-output function. (Are there any examples of these?)

A few other examples that I could potentially implement if I needed them:

RYZTTX - A one-input, no-output function that drops the stack, and saves the previous X in L.

R_XYZL - A no-input, one-output function, like RCL, DATE, etc.

R__ZTL - A no-input, two-output function that overwrites X and Y, such as MEAN.