diff --git a/emul/forth/z80c.bin b/emul/forth/z80c.bin index 43464a6..4a50d46 100644 Binary files a/emul/forth/z80c.bin and b/emul/forth/z80c.bin differ diff --git a/forth/core.fs b/forth/core.fs index 8128d5a..514fb63 100644 --- a/forth/core.fs +++ b/forth/core.fs @@ -1,5 +1,8 @@ : H@ HERE @ ; -: -^ SWAP - ; +: IMMEDIATE + CURRENT @ 1 - + DUP C@ 128 OR SWAP C! +; : [ INTERPRET 1 FLAGS ! ; IMMEDIATE : ] R> DROP ; : LIT 34 , ; @@ -29,6 +32,7 @@ (br)) and then call LITN on it. ) : +! SWAP OVER @ + SWAP ! ; +: -^ SWAP - ; : ALLOT HERE +! ; : IF ( -- a | a: br cell addr ) diff --git a/forth/icore.fs b/forth/icore.fs index 5719aa4..2443bf5 100644 --- a/forth/icore.fs +++ b/forth/icore.fs @@ -53,11 +53,7 @@ ' ( get word ) -^ ( apply offset ) , ( write! ) -; -( We can't use IMMEDIATE because the one we've just compiled - in z80c target's the *target*'s RAM addr, not the host's. - manually set namelen field. ) -0x82 CURRENT @ 1 - C! +; IMMEDIATE : RAM+ [ RAMSTART LITN ] _c + @@ -250,9 +246,7 @@ ( : and ; have to be defined last because it can't be executed now also, they can't have their real name - right away. We also can't use IMMEDIATE because the offset - used for CURRENT is the *target*'s RAM offset. we're still - on the host. + right away. ) : X @@ -269,17 +263,15 @@ ( maybe number ) ELSE _c (parse*) _c @ EXECUTE _c LITN THEN AGAIN -; +; IMMEDIATE : Y ['] EXIT _c , _c R> _c DROP ( exit : ) -; +; IMMEDIATE -( Give ":" and ";" their real name and make them IMMEDIATE ) -0x81 ' X 1 - _C! +( Give ":" and ";" their real name ) ':' ' X 4 - _C! -0x81 ' Y 1 - _C! ';' ' Y 4 - _C! ( Add dummy entry. we use CREATE because (entry) is, at this diff --git a/forth/z80c.fs b/forth/z80c.fs index d43b0f5..61a217e 100644 --- a/forth/z80c.fs +++ b/forth/z80c.fs @@ -311,13 +311,6 @@ CODE R> HL PUSHqq, ;CODE -CODE IMMEDIATE - ( CURRENT == RAM+2 ) - RAMSTART 0x02 + LDHL(nn), - HL DECss, - 7 (HL) SETbr, -;CODE - CODE IMMED? HL POPqq, chkPS,