Advertisement
Jan-Langevad

LIFOstack.TXT

Jun 14th, 2025 (edited)
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.99 KB | Software | 0 0
  1. ( LIFOstack.TXT )
  2. \ "a simple third circular stack" idea by Chris Curl changed in "style" and into ESP32FORTH by Jan Langevad June 2025 )
  3.  
  4. : ALL ; \ Easy to forget all :-)
  5.  
  6. variable LIFO \ initialize Last-In-First-Out stack base w. this address
  7.  
  8. 4 value LIFO-Cells \ OBS: *** Use sizes 2 4 8 16 32 64 128 etc.... ***
  9.  
  10. LIFO-Cells cells allot \ allocate cells to this extra stack
  11. 0 value LIFO-OFFSET \ offset in #stack entries
  12.  
  13. LIFO-Cells 1-
  14. value LIFO-AndMask \ generate correct bit mask, e.g.: $0F for $10 (16 decimal entries)
  15.  
  16. : EntryADDR ( --- ADR )
  17. LIFO ( --- startaddr )
  18. LIFO-OFFSET ( --- startaddr entry-number )
  19. CELLS ( --- startaddr byteoffset-in-RAM )
  20. + ( --- EntryADDR )
  21. ;
  22.  
  23. : ADJUST-LIFO-OFFSET ( 1/-1 --- )
  24. LIFO-OFFSET + ( 1/-1 --- new-offset )
  25. LIFO-AndMask and ( --- safe-offset ) \ keep offset within limits of stack length
  26. is LIFO-OFFSET ( --- )
  27. ;
  28.  
  29. : LIFO-DROP ( --- ) -1 ADJUST-LIFO-OFFSET ( n -1 --- n ) ;
  30.  
  31. : >LIFO ( n --- ) EntryADDR ( --- n ADR )
  32. ! ( --- )
  33. 1 ADJUST-LIFO-OFFSET ( --- )
  34. ;
  35.  
  36. : LIFO> ( --- n ) LIFO-DROP ( --- )
  37. EntryADDR ( --- ADR )
  38. @ ( ADR --- n )
  39. ;
  40.  
  41. : LIFO. ( print out the extra LIFO stack )
  42. cr
  43. LIFO-OFFSET ( --- n )
  44. if ." LIFO stack: "
  45. LIFO-OFFSET 0
  46. do LIFO I cells + @ . loop
  47. else ." LIFO stack empty"
  48. then
  49. cr
  50. ;
  51.  
  52. : LIFO-CLEAR ( --- ) 0 is LIFO-OFFSET ;
  53.  
  54. \ EOF -------------------------------------------
  55.  
  56. \ Forget ALL
  57.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement