+@ (c) 2020 Aaron Taylor <ataylor at subgeniuskitty dot com>
+@ See LICENSE.txt file for copyright and license details.
+
#ifndef VVS_STDLIB_STACK
#define VVS_STDLIB_STACK
@ stackrotate
@ Description:
@ Maximum rotation depth is 14. Stomps on heap[1]-heap[15].
+@ Assumes rotation depth is at least 2.
@ Call Stack:
@ stack word n
@ ...
@ For the convenience of other functions, modulo the
@ rotation depth by the available registers.
-SSSTTTSN | PUSH 14
+SSSTTTTN | PUSH 15
TSTT | MODULO
@ Use heap[15] for generating register addresses.
+@ TODO: Switch to using heap[1] so number of registers is limited only by user.
SSSTTTTN | PUSH 15 (ptr)
SSSSN | PUSH 0
TTS | STORE
@ stackrotatereverse
@ Description:
@ Maximum rotation depth is 14. Stomps on heap[1]-heap[15].
+@ Assumes rotation depth is at least 2.
@ Call Stack:
@ stack word n
@ ...
@ For the convenience of other functions, modulo the
@ rotation depth by the available registers.
-SSSTTTSN | PUSH 14
+SSSTTTTN | PUSH 15
TSTT | MODULO
@ Use heap[15] for generating register addresses.
+@ TODO: Switch to using heap[1] so number of registers is limited only by user.
SSSTTTTN | PUSH 15 (ptr)
SSSSN | PUSH 0
TTS | STORE
@ deepdup
@ Description:
@ Duplicates an item deep on the stack, placing the duplicate on TOS.
-@ By default, maximum depth is 11.
-@ True maximum depth is (max depth of stackrotate & stackrotatereverse)-3.
+@ By default, maximum depth is 13.
+@ True maximum depth is (max depth of stackrotate & stackrotatereverse)-1.
@ Call Stack:
@ stack word n
@ ...
@ stack word 1
-@ dupdepth <-- TOS
-@ Return Stack:
+@ dupdepth <-- TOS
+@ Return Stack: (dupdepth=3)
@ stack word n
@ ...
@ stack word 1