diff --git a/blk/086 b/blk/086 index 2e0502e..a5b9cc5 100644 --- a/blk/086 +++ b/blk/086 @@ -1,4 +1,3 @@ -(cont.) 0x2b: doesWord. This word is created by "DOES>" and is followed by a 2-byte value as well as the address where "DOES>" was compiled. At that address is an atom list exactly like in a @@ -6,11 +5,7 @@ compiled word. Upon execution, after having pushed its cell addr to PSP, it execute its reference exactly like a compiledWord. -0x20: numberWord. No word is actually compiled with this -routine, but atoms are. Atoms with a reference to the number -words routine are followed, *in the atom list*, of a 2-byte -number. Upon execution, that number is fetched and IP is -avdanced by an extra 2 bytes. - -0x24: addrWord. Exactly like a numberWord, except that it is -treated differently by meta-tools. (cont.) +Also note that word routines references in wordrefs are 1b. +This means that all word routine reference must live below +0x100 in boot binary. This is why numberWord and addrWord are +squeezed where they are. diff --git a/blk/087 b/blk/087 deleted file mode 100644 index c550602..0000000 --- a/blk/087 +++ /dev/null @@ -1,16 +0,0 @@ -(cont.) -0x22: litWord. Similar to a number word, except that instead of -being followed by a 2 byte number, it is followed by a -null-terminated string. Upon execution, the address of that -null-terminated string is pushed on the PSP and IP is advanced -to the address following the null. - -Also note that word routines references in wordrefs are 1b. -This means that all word routine reference must live below -0x100 in boot binary. This is why numberWord and addrWord are -squeezed where they are. - - - - - diff --git a/blk/283 b/blk/283 index bb097d9..3b12696 100644 --- a/blk/283 +++ b/blk/283 @@ -7,7 +7,7 @@ NOP, ( 0a, unused ) 0 JPnn, ( 14, popRS ) EXDEHL, JP(HL), NOP, ( 17, nativeWord ) 0 JPnn, ( 1a, next ) 0 JPnn, ( unused ) -NOP, NOP, ( 20, numberWord ) NOP, NOP, ( 22, litWord ) +NOP, NOP, NOP, NOP, ( 20, unused ) NOP, NOP, NOP, NOP, ( 24, unused ) 0 JPnn, ( RST 28 ) 0 JPnn, ( 2b, doesWord ) NOP, NOP, ( 2e, unused ) diff --git a/blk/286 b/blk/286 index a30d5cd..230fbf9 100644 --- a/blk/286 +++ b/blk/286 @@ -1,16 +1,14 @@ CODE 2>R ( 0xa9 ) DE POPqq, HL POPqq, 17 BCALL, ( 17 == pushRS ) EXDEHL, 17 BCALL, -;CODE ( END OF STABLE ABI ) -CODE >R - HL POPqq, - 17 BCALL, ( 17 == pushRS ) -;CODE -CODE R> - 20 BCALL, ( 20 == popRS ) - HL PUSHqq, -;CODE -CODE 2R> - 20 BCALL, ( 20 == popRS ) EXDEHL, 20 BCALL, - HL PUSHqq, DE PUSHqq, +;CODE NOP, NOP, NOP, +CODE (n) ( 0xbf, number literal ) + ( PF means nothing and the actual number is placed next to + the (n) reference in the compiled word list. What we need + to do to fetch that number is to play with the IP. ) + E 0 IY+ LDrIXY, + D 1 IY+ LDrIXY, + IY INCss, + IY INCss, + DE PUSHqq, ;CODE diff --git a/blk/287 b/blk/287 index b619729..b6c0078 100644 --- a/blk/287 +++ b/blk/287 @@ -1,15 +1,11 @@ -( See B85 for word routine impl notes ) -PC ORG @ 0x20 + ! ( numberWord ) -( This is not a word, but a number literal. This works a bit - differently than others: PF means nothing and the actual - number is placed next to the numberWord reference in the - compiled word list. What we need to do to fetch that number - is to play with the IP. ) - E 0 IY+ LDrIXY, - D 1 IY+ LDrIXY, - IY INCss, - IY INCss, - DE PUSHqq, - JPNEXT, - - +CODE (s) ( 0xd4, string literal ) +( Like (n) but instead of being followed by a 2 bytes + number, it's followed by a null-terminated string. When + called, puts the string's address on PS ) + IY PUSHqq, HL POPqq, ( <-- IP ) + E (HL) LDrr, D 0 LDrn, + DE INCss, + DE ADDIYss, + HL PUSHqq, +;CODE +( END OF STABLE ABI ) diff --git a/blk/288 b/blk/288 index 6fd4086..8c68e67 100644 --- a/blk/288 +++ b/blk/288 @@ -1,15 +1,15 @@ -PC ORG @ 0x22 + ! ( litWord, 0xf7, tight on the 0x100 limit ) -( Like numberWord, but instead of being followed by a 2 bytes - number, it's followed by a null-terminated string. When - called, puts the string's address on PS ) - IY PUSHqq, HL POPqq, ( <-- IP ) - E (HL) LDrr, D 0 LDrn, - DE INCss, - DE ADDIYss, +CODE >R + HL POPqq, + 17 BCALL, ( 17 == pushRS ) +;CODE +CODE R> + 20 BCALL, ( 20 == popRS ) HL PUSHqq, - JPNEXT, - - +;CODE +CODE 2R> + 20 BCALL, ( 20 == popRS ) EXDEHL, 20 BCALL, + HL PUSHqq, DE PUSHqq, +;CODE diff --git a/blk/382 b/blk/382 index 4ba2f1c..8ad29bf 100644 --- a/blk/382 +++ b/blk/382 @@ -3,7 +3,7 @@ C< DUP 34 ( ASCII " ) = IF DROP EXIT THEN C, AGAIN ; : LIT" - 34 , ( litWord ) H@ 0 C, ," + COMPILE (s) H@ 0 C, ," DUP H@ -^ 1- ( a len ) SWAP C! ; IMMEDIATE : ." [COMPILE] LIT" COMPILE (print) ; IMMEDIATE diff --git a/blk/397 b/blk/397 index 14955f4..7bbb860 100644 --- a/blk/397 +++ b/blk/397 @@ -3,7 +3,7 @@ : DO COMPILE 2>R H@ ; IMMEDIATE : LOOP COMPILE (loop) H@ - _bchk , ; IMMEDIATE ( LEAVE is implemented in low xcomp ) -: LITN 32 , , ( 32 == NUMBER ) ; +: LITN COMPILE (n) , ; ( gets its name at the very end. can't comment afterwards ) : _ BEGIN LIT< ) WORD S= UNTIL ; IMMEDIATE : _ ( : will get its name almost at the very end ) diff --git a/blk/399 b/blk/399 index b97dc27..f5bd6cc 100644 --- a/blk/399 +++ b/blk/399 @@ -1,4 +1,4 @@ -: LIT< WORD 34 , DUP C@ 1+ MOVE, ; IMMEDIATE +: LIT< COMPILE (s) WORD DUP C@ 1+ MOVE, ; IMMEDIATE : BEGIN H@ ; IMMEDIATE : AGAIN COMPILE (br) H@ - _bchk , ; IMMEDIATE : UNTIL COMPILE (?br) H@ - _bchk , ; IMMEDIATE diff --git a/emul/forth.bin b/emul/forth.bin index 0589c00..84b00f8 100644 Binary files a/emul/forth.bin and b/emul/forth.bin differ