From 2be2f74a4322de67f1a9829cf9df7d5d04b977da Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Wed, 17 Jun 2020 14:25:32 -0400 Subject: [PATCH] Make literal word routines into regular native words --- blk/086 | 13 ++++--------- blk/087 | 16 ---------------- blk/283 | 2 +- blk/286 | 22 ++++++++++------------ blk/287 | 26 +++++++++++--------------- blk/288 | 22 +++++++++++----------- blk/382 | 2 +- blk/397 | 2 +- blk/399 | 2 +- emul/forth.bin | Bin 6163 -> 6180 bytes 10 files changed, 40 insertions(+), 67 deletions(-) delete mode 100644 blk/087 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 0589c005e07982e80a17e822d81abb2ed69654ca..84b00f8c610125affc1e6cc00da4ab2ffc570d19 100644 GIT binary patch literal 6180 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