diff --git a/emul/forth/z80c.bin b/emul/forth/z80c.bin index d1c5da6..9b00ce4 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 c9e50dd..877367d 100644 --- a/forth/forth.asm +++ b/forth/forth.asm @@ -126,24 +126,11 @@ CBR: ld (IP), hl jp next - .db "," - .dw $-CBR - .db 1 -WR: - .dw nativeWord - pop de - call chkPS - ld hl, (HERE) - ld (hl), e - inc hl - ld (hl), d - inc hl - ld (HERE), hl - jp next +.fill 23 ; ( addr -- ) .db "EXECUTE" - .dw $-WR + .dw $-CBR .db 7 EXECUTE: .dw nativeWord diff --git a/forth/icore.fs b/forth/icore.fs index 6044d14..0ad9d1c 100644 --- a/forth/icore.fs +++ b/forth/icore.fs @@ -146,6 +146,11 @@ [ 48 @ LITN ] _c @ EXECUTE ; +: , + _c HERE _c @ _c ! + _c HERE _c @ 2 _c + _c HERE _c ! +; + : C, _c HERE _c @ _c C! _c HERE _c @ 1 _c + _c HERE _c ! @@ -191,7 +196,7 @@ _c DUP _c HERE _c ! ( h h' ) _c SWAP _c - ( sz ) ( write prev value ) - _c HERE _c @ _c CURRENT _c @ _c - , + _c HERE _c @ _c CURRENT _c @ _c - _c , ( write size ) _c C, _c HERE _c @ _c CURRENT _c ! @@ -225,7 +230,7 @@ it to avoid bootstrapping issues ) : LITN ( 32 == NUMBER ) - 32 , , + 32 _c , _c , ; ( : and ; have to be defined last because it can't be @@ -236,19 +241,19 @@ _c (entry) ( We cannot use LITN as IMMEDIATE because of bootstrapping issues. 32 == NUMBER 14 == compiledWord ) - [ 32 , 14 , ] , + [ 32 , 14 , ] _c , BEGIN _c WORD _c (find) ( is word ) - IF _c DUP _c IMMED? IF EXECUTE ELSE , THEN + IF _c DUP _c IMMED? IF EXECUTE ELSE _c , THEN ( maybe number ) ELSE _c (parse*) _c @ EXECUTE _c LITN THEN AGAIN ; IMMEDIATE : Y - ['] EXIT , + ['] EXIT _c , _c R> _c DROP ( exit : ) ; IMMEDIATE