diff --git a/blk/393 b/blk/393 index 0c04a4a..98d16d9 100644 --- a/blk/393 +++ b/blk/393 @@ -12,4 +12,4 @@ 0 0x08 RAM+ ! ( 08 == C<* override ) LIT< INTERPRET (find) DROP EXECUTE ; -1 20 LOADR+ +1 21 LOADR+ diff --git a/blk/412 b/blk/412 index 60f0030..107cf36 100644 --- a/blk/412 +++ b/blk/412 @@ -1,14 +1,8 @@ -( LITN has to be defined after the last immediate usage of - it to avoid bootstrapping issues ) -: LITN 32 , , ( 32 == NUMBER ) ; - -: IMMED? 1- C@ 0x80 AND ; - -( ';' can't have its name right away because, when created, it - is not an IMMEDIATE yet and will not be treated properly by - xcomp. ) -: _ - ['] EXIT , - R> DROP ( exit : ) -; IMMEDIATE - +: H@ HERE @ ; +: IMMEDIATE + CURRENT @ 1- + DUP C@ 128 OR SWAP C! +; +: +! SWAP OVER @ + SWAP ! ; +: -^ SWAP - ; +: ALLOT HERE +! ; diff --git a/blk/413 b/blk/413 index e109431..60f0030 100644 --- a/blk/413 +++ b/blk/413 @@ -1,16 +1,14 @@ -XCURRENT @ ( to PSP ) -: : - (entry) - ( We cannot use LITN as IMMEDIATE because of bootstrapping - issues. Same thing for ",". - 32 == NUMBER 14 == compiledWord ) - [ 32 H@ ! 2 ALLOT 14 H@ ! 2 ALLOT ] C, - BEGIN - WORD - (find) - ( is word ) - IF DUP IMMED? IF EXECUTE ELSE , THEN - ( maybe number ) - ELSE (parse) LITN THEN - AGAIN ; -( from PSP ) ';' SWAP 4 - C! +( LITN has to be defined after the last immediate usage of + it to avoid bootstrapping issues ) +: LITN 32 , , ( 32 == NUMBER ) ; + +: IMMED? 1- C@ 0x80 AND ; + +( ';' can't have its name right away because, when created, it + is not an IMMEDIATE yet and will not be treated properly by + xcomp. ) +: _ + ['] EXIT , + R> DROP ( exit : ) +; IMMEDIATE + diff --git a/blk/414 b/blk/414 new file mode 100644 index 0000000..e109431 --- /dev/null +++ b/blk/414 @@ -0,0 +1,16 @@ +XCURRENT @ ( to PSP ) +: : + (entry) + ( We cannot use LITN as IMMEDIATE because of bootstrapping + issues. Same thing for ",". + 32 == NUMBER 14 == compiledWord ) + [ 32 H@ ! 2 ALLOT 14 H@ ! 2 ALLOT ] C, + BEGIN + WORD + (find) + ( is word ) + IF DUP IMMED? IF EXECUTE ELSE , THEN + ( maybe number ) + ELSE (parse) LITN THEN + AGAIN ; +( from PSP ) ';' SWAP 4 - C! diff --git a/blk/422 b/blk/422 index 48d519b..e2ca7c8 100644 --- a/blk/422 +++ b/blk/422 @@ -1,8 +1,3 @@ -: H@ HERE @ ; -: IMMEDIATE - CURRENT @ 1- - DUP C@ 128 OR SWAP C! -; : [ INTERPRET ; IMMEDIATE : ] R> DROP ; : LITS 34 , SCPY ; diff --git a/blk/425 b/blk/425 index c081f6e..cea17a8 100644 --- a/blk/425 +++ b/blk/425 @@ -1,7 +1,3 @@ -: +! SWAP OVER @ + SWAP ! ; -: -^ SWAP - ; -: ALLOT HERE +! ; - : IF ( -- a | a: br cell addr ) COMPILE (?br) H@ ( push a ) diff --git a/emul/forth.bin b/emul/forth.bin index 15d9cb2..67d1066 100644 Binary files a/emul/forth.bin and b/emul/forth.bin differ