
Originally Posted by
sayzer
Ok, here is a simple example good enough to explain the issue.
...........
If you're careful, and I mean very, very careful, you could turn off the Stack Overflow/Underflow reset bits in the CONFIG and just not worry about the RETURN addresses...let them overflow as they will.
But again, you'd have to be very careful, especially if you nest any GOSUB's at all...so that might not work out at all.
Maybe take DT's Software Gosub example shown earlier and add your own subroutine to POP the last GOSUB address off the Software Stack.
Actually, I just looked at the code for the first time...
In the swStack.inc file, you could use this section:
Code:
'------------Pop Address from the Stack---------------------------------------
Pop:
if StackPTR = 0 then StackEmpty = 1 ; Update Empty status
if StackEmpty = 0 then ; If Stack isn't Empty
Address = Stack[StackPTR-1] ; Get last Address from the Stack
StackPTR = StackPTR - 1 ; Point to Prior Stack level
StackFull = 0 ; 0 - Since we just removed 1
else
STunderflow = 1 ; Stack was Empty on swReturn
endif
if StackPTR = 0 then StackEmpty = 1 ; Update Empty status
return
You have access to the Pop subroutine.
But I'm guessing here...since I haven't used to swGosub/swReturn routines at all.........
You 'include' DT's software stack routines, your code above becomes:
Code:
Begin:
OK = 0
MainMenu:
'...stuff is going on here...
IF OK = 1 THEN
@ swGOSUB PrintMemory
ENDIF
GOTO MainMenu
PrintMemory:
IF Memory = 0 THEN
Gosub Pop 'regular Gosub here, generic, can be used system wide
Goto BEGIN 'no more return address from the Gosub above
ENDIF
swRETURN
Again, I'm guessing...
Bookmarks