postpone r> postpone drop
postpone r> postpone drop ; immediate
+\ save and empty (need HP) single wordlist only no string header reclaim
+\ not really valid in seedForth as the tokenizer would not know how to reset
+\ token indices. Make SAVE and EMPTY special in the tokenizer?
+\ HEAD the start of seedForth header table is not required.
+\ DP is not required as it can be read via HERE and set via ALLOT (see DP!)
+
+: !+ ( x addr -- addr' ) swap over ! cell+ ;
+: @+ ( addr -- x addr' ) dup @ swap cell+ ;
+
+| Create savearea 0 , 0 , 0 ,
+
+: save ( -- ) here hp @ forth-wordlist @ savearea !+ !+ ! ;
+: empty ( -- ) savearea @+ @+ @ dp! hp ! forth-wordlist ! ;
+
+save
+
+: remove-with-empty ; \ remove with empty
echo on cr cr .( Welcome! ) input-echo on
_dp: DD _start ; dictionary pointer: points to next free location in memory
; free memory starts at _start
-_hp: DD 0 ; head pointer: index of first unused head
+__hp: DD 0 ; head pointer: index of first unused head
_head: DD 10000 dup (0)
section '.text' executable writable align 4096
: +! ( x addr -- )
swap >r dup @ r> + swap ! ;
+: hp ( -- addr )
+ lit _hp ;
+
: h@ ( i -- addr )
cells lit head + @ ;
cells lit head + ! ;
: h, ( x -- )
- lit hp @ h! 1 lit hp +! ;
+ hp @ h! 1 hp +! ;
: here ( -- addr )
lit dp @ ;
compile, tail compiler ;
: new ( -- xt )
- lit hp @ here h, lit enter , ;
+ hp @ here h, lit enter , ;
: fun ( -- )
new drop compiler ;
: create ( -- xt )
0 , \ dummy does> field
- lit hp @ here h, lit dovar , ;
+ hp @ here h, lit dovar , ;
: does> ( xt -- ) \ set code field of last defined word
r> swap h@ dup >r 1 cells - ! lit dodoes r> !
lit key? h, \ 55 37
lit token h, \ 56 38
lit usleep h, \ 57 39 code
+ lit hp h, \ 58 40
interpreter bye ;
pre
( 44 $2C ) Token and Token or Token sp@ Token sp!
( 48 $30 ) Token rp@ Token rp! Token $lit Token num
( 52 $34 ) Token um* Token um/mod Token unused Token key?
-( 56 $38 ) Token token Token usleep
+( 56 $38 ) Token token Token usleep Token hp
\ generate token sequences for numbers
' rp! has-header rp! \ 49 31
' $lit has-header $lit \ 50 32
' num has-header num \ 51 33
+' um* has-header um*
+' um/mod has-header um/mod
+' unused has-header unused
+' key? has-header key?
+\ ' token has-header token
+' usleep has-header usleep
+' hp has-header hp
' over has-header over
' rot has-header rot
' dispose has-header dispose
' alloc has-header alloc
-' unused has-header unused
' cr has-header cr
' .s has-header .s
' = has-header =
' count has-header count
' 2* has-header 2*
-' um* has-header um*
-' um/mod has-header um/mod
' abs has-header abs
' r@ has-header r@
' only has-header only
\ ' OnlyForth has-header OnlyForth
' .wordlist has-header .wordlist
-' key? has-header key?
' getkey has-header getkey
' frame has-header frame
-' usleep has-header usleep
Macro :noname
colored-header count "header dup link-header
\ --------
-\ ' token has-header token
cr
t{ -> }t