diff --git a/emul/forth/z80c.bin b/emul/forth/z80c.bin index e260c9c..1e712c7 100644 Binary files a/emul/forth/z80c.bin and b/emul/forth/z80c.bin differ diff --git a/forth/boot.z80 b/forth/boot.z80 index 60df6c5..2126c87 100644 --- a/forth/boot.z80 +++ b/forth/boot.z80 @@ -424,17 +424,6 @@ CODE (roll) LDDR, ;CODE -( a b -- a b a b ) -CODE 2DUP - HL POPqq, ( B ) - DE POPqq, ( A ) - chkPS, - DE PUSHqq, ( A ) - HL PUSHqq, ( B ) - DE PUSHqq, ( A ) - HL PUSHqq, ( B ) -;CODE - ( a b -- ) CODE 2DROP HL POPqq, @@ -442,36 +431,6 @@ CODE 2DROP chkPS, ;CODE -( a b c d -- a b c d a b ) - -CODE 2OVER - HL POPqq, ( D ) - DE POPqq, ( C ) - BC POPqq, ( B ) - EXX, HL POPqq, EXX, ( A ) - chkPS, - EXX, HL PUSHqq, EXX, ( A ) - BC PUSHqq, ( B ) - DE PUSHqq, ( C ) - HL PUSHqq, ( D ) - EXX, HL PUSHqq, EXX, ( A ) - BC PUSHqq, ( B ) -;CODE - -( a b c d -- c d a b ) - -CODE 2SWAP - HL POPqq, ( D ) - DE POPqq, ( C ) - BC POPqq, ( B ) - EXX, HL POPqq, EXX, ( A ) - chkPS, - DE PUSHqq, ( C ) - HL PUSHqq, ( D ) - EXX, HL PUSHqq, EXX, ( A ) - BC PUSHqq, ( B ) -;CODE - CODE AND HL POPqq, DE POPqq, diff --git a/forth/core.fs b/forth/core.fs index 584ea2cd..0bfab65 100644 --- a/forth/core.fs +++ b/forth/core.fs @@ -55,13 +55,6 @@ H@ 2- ( push a. -2 for allot offset ) ; IMMEDIATE -: ROLL - DUP NOT IF EXIT THEN - 1+ DUP PICK ( n val ) - SWAP 2 * (roll) ( val ) - SWAP DROP -; - ( During a CASE, the stack grows by 1 at each ENDOF so that we can fill all those ENDOF branching addrs. So that we know when to stop, we put a 0 on PSP. That's our stopgap. ) @@ -143,6 +136,17 @@ : LEAVE R> R> DROP I 1- >R >R ; +: ROLL + DUP NOT IF EXIT THEN + 1+ DUP PICK ( n val ) + SWAP 2 * (roll) ( val ) + SWAP DROP +; + +: 2DUP OVER OVER ; +: 2OVER 3 PICK 3 PICK ; +: 2SWAP 3 ROLL 3 ROLL ; + ( a1 a2 u -- ) : MOVE ( u ) 0 DO