Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ( LIFOstack.TXT )
- \ "a simple third circular stack" idea by Chris Curl changed in "style" and into ESP32FORTH by Jan Langevad June 2025 )
- : ALL ; \ Easy to forget all :-)
- variable LIFO \ initialize Last-In-First-Out stack base w. this address
- 4 value LIFO-Cells \ OBS: *** Use sizes 2 4 8 16 32 64 128 etc.... ***
- LIFO-Cells cells allot \ allocate cells to this extra stack
- 0 value LIFO-OFFSET \ offset in #stack entries
- LIFO-Cells 1-
- value LIFO-AndMask \ generate correct bit mask, e.g.: $0F for $10 (16 decimal entries)
- : EntryADDR ( --- ADR )
- LIFO ( --- startaddr )
- LIFO-OFFSET ( --- startaddr entry-number )
- CELLS ( --- startaddr byteoffset-in-RAM )
- + ( --- EntryADDR )
- ;
- : ADJUST-LIFO-OFFSET ( 1/-1 --- )
- LIFO-OFFSET + ( 1/-1 --- new-offset )
- LIFO-AndMask and ( --- safe-offset ) \ keep offset within limits of stack length
- is LIFO-OFFSET ( --- )
- ;
- : LIFO-DROP ( --- ) -1 ADJUST-LIFO-OFFSET ( n -1 --- n ) ;
- : >LIFO ( n --- ) EntryADDR ( --- n ADR )
- ! ( --- )
- 1 ADJUST-LIFO-OFFSET ( --- )
- ;
- : LIFO> ( --- n ) LIFO-DROP ( --- )
- EntryADDR ( --- ADR )
- @ ( ADR --- n )
- ;
- : LIFO. ( print out the extra LIFO stack )
- cr
- LIFO-OFFSET ( --- n )
- if ." LIFO stack: "
- LIFO-OFFSET 0
- do LIFO I cells + @ . loop
- else ." LIFO stack empty"
- then
- cr
- ;
- : LIFO-CLEAR ( --- ) 0 is LIFO-OFFSET ;
- \ EOF -------------------------------------------
- \ Forget ALL
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement