diff --git a/emul/forth/z80c.bin b/emul/forth/z80c.bin index 22f9c50..17e8358 100644 Binary files a/emul/forth/z80c.bin and b/emul/forth/z80c.bin differ diff --git a/forth/forth.asm b/forth/forth.asm index 455d6a3..3a7ae57 100644 --- a/forth/forth.asm +++ b/forth/forth.asm @@ -940,22 +940,10 @@ SWAP: push hl jp next -; ( a -- a a ) - .db "DUP" - .dw $-SWAP - .db 3 -DUP: - .dw nativeWord - pop hl - call chkPS - push hl - push hl - jp next - -.fill 132 +.fill 149 .db "_bend" - .dw $-DUP + .dw $-SWAP .db 5 ; Offset: 06ee .out $ diff --git a/forth/icore.fs b/forth/icore.fs index cbc22c2..fa3220b 100644 --- a/forth/icore.fs +++ b/forth/icore.fs @@ -60,10 +60,10 @@ ( a -- ) : (print) BEGIN - DUP ( a a ) + _c DUP ( a a ) _c C@ ( a c ) ( exit if null ) - DUP NOT IF DROP DROP EXIT THEN + _c DUP NOT IF DROP DROP EXIT THEN _c EMIT ( a ) 1 _c + ( a+1 ) AGAIN @@ -85,7 +85,7 @@ : TOWORD BEGIN - C< DUP _c WS? NOT IF EXIT THEN DROP + C< _c DUP _c WS? NOT IF EXIT THEN DROP AGAIN ; @@ -101,7 +101,7 @@ _c OVER ! ( a ) 1 _c + ( a+1 ) C< ( a c ) - DUP _c WS? + _c DUP _c WS? UNTIL ( a this point, PS is: a WS ) ( null-termination is already written ) @@ -121,7 +121,7 @@ SCPY ( h ) ( Adjust HERE -1 because SCPY copies the null ) HERE @ 1 _c - ( h h' ) - DUP HERE ! ( h h' ) + _c DUP HERE ! ( h h' ) SWAP _c - ( sz ) ( write prev value ) HERE @ CURRENT @ _c - , @@ -162,7 +162,7 @@ _c WORD (find) ( is word ) - IF DUP _c IMMED? IF EXECUTE ELSE , THEN + IF _c DUP _c IMMED? IF EXECUTE ELSE , THEN ( maybe number ) ELSE (parse*) @ EXECUTE _c LITN THEN AGAIN diff --git a/forth/z80c.fs b/forth/z80c.fs index bfca503..f04556d 100644 --- a/forth/z80c.fs +++ b/forth/z80c.fs @@ -31,6 +31,14 @@ CODE ROT BC PUSHqq, ( A ) ;CODE +( a -- a a ) +CODE DUP + HL POPqq, ( A ) + chkPS, + HL PUSHqq, ( A ) + HL PUSHqq, ( A ) +;CODE + ( a b -- a b a ) CODE OVER HL POPqq, ( B )