From eaeb138a0caa9e5e163e180cac2373b80b9451b7 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Wed, 6 May 2020 20:37:08 -0400 Subject: [PATCH] Add words C@- C!- and MOVE- --- blk/050 | 5 ++--- blk/051 | 5 +++++ blk/394 | 14 ++++++-------- blk/434 | 18 +++++++++++------- emul/forth.bin | Bin 5768 -> 5847 bytes 5 files changed, 24 insertions(+), 18 deletions(-) diff --git a/blk/050 b/blk/050 index 1c3616a..e0be481 100644 --- a/blk/050 +++ b/blk/050 @@ -6,12 +6,11 @@ Memory +! n a -- Increase value of addr a by n C@ a -- c Set c to byte at address a C@+ a -- a+1 c Fetch c from a and inc a. +C@- a -- a-1 c Fetch c from a and dec a. C! c a -- Store byte c in address a C!+ c a -- a+1 Store byte c in a and inc a. +C!- c a -- a-1 Store byte c in a and dec a. CURRENT -- a Set a to wordref of last added entry. CURRENT* -- a A pointer to active CURRENT*. Useful when we have multiple active dicts. -FILL a n b -- Fill n bytes at addr a with val b. -HERE -- a Push HERE's address -H@ -- a HERE @ (cont.) diff --git a/blk/051 b/blk/051 index 8c93cad..54e8d4d 100644 --- a/blk/051 +++ b/blk/051 @@ -1,2 +1,7 @@ +FILL a n b -- Fill n bytes at addr a with val b. +HERE -- a Push HERE's address +H@ -- a HERE @ MOVE a1 a2 u -- Copy u bytes from a1 to a2, starting with a1, going up. +MOVE- a1 a2 u -- Copy u bytes from a1 to a2, starting + with a1+u, going down. diff --git a/blk/394 b/blk/394 index 27f9726..6fb571f 100644 --- a/blk/394 +++ b/blk/394 @@ -1,12 +1,6 @@ : ABORT (resSP) QUIT ; - -: = CMP NOT ; -: < CMP -1 = ; -: > CMP 1 = ; -: 0< 32767 > ; -: >= < NOT ; -: <= > NOT ; -: 0>= 0< NOT ; +: = CMP NOT ; : < CMP -1 = ; : > CMP 1 = ; +: 0< 32767 > ; : >= < NOT ; : <= > NOT ; : 0>= 0< NOT ; ( n l h -- f ) : >< 2 PICK > ( n l f ) ROT ROT > AND ; : =><= 2 PICK >= ( n l f ) ROT ROT >= AND ; @@ -14,3 +8,7 @@ : C@+ DUP C@ SWAP 1+ SWAP ; ( c a -- a+1 ) : C!+ SWAP OVER C! 1+ ; +( a -- a-1 c ) +: C@- DUP C@ SWAP 1- SWAP ; +( c a -- a-1 ) +: C!- SWAP OVER C! 1- ; diff --git a/blk/434 b/blk/434 index 83393ec..0523223 100644 --- a/blk/434 +++ b/blk/434 @@ -1,9 +1,13 @@ : MOVE ( a1 a2 u -- ) - ( u ) 0 DO - SWAP DUP I + C@ ( a2 a1 x ) - ROT SWAP OVER I + ( a1 a2 x a2 ) - C! ( a1 a2 ) - LOOP - 2DROP -; + ( u ) 0 DO ( a1 a2 ) + SWAP C@+ ( a2 a1+1 x ) + ROT C!+ ( a1+1 a2+1 ) + LOOP 2DROP ; +: MOVE- ( a1 a2 u -- ) + SWAP OVER + 1- ( a1 u a2+u-1 ) + ROT 2 PICK + 1- ( u a2+u-1 a1+u-1 ) + ROT ( u ) 0 DO ( a2 a1 ) + C@- ( a2 a1-1 x ) + ROT C!- ( a1-1 a2-1 ) SWAP ( a2 a1 ) + LOOP 2DROP ; : PREV 3 - DUP @ - ; diff --git a/emul/forth.bin b/emul/forth.bin index 61a7629c69ead3b5ed3dd252a0b52bbe69000160..781c5a6b594dd3f738ebe869e5767f022395537c 100644 GIT binary patch delta 2252 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 xS6yDX@7{uC_JX~<8=ucgJ