Make literal word routines into regular native words

This commit is contained in:
Virgil Dupras 2020-06-17 14:25:32 -04:00
parent ea9833d4ff
commit 2be2f74a43
10 changed files with 40 additions and 67 deletions

13
blk/086
View File

@ -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.

16
blk/087
View File

@ -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.

View File

@ -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 )

22
blk/286
View File

@ -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

26
blk/287
View File

@ -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 )

22
blk/288
View File

@ -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

View File

@ -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

View File

@ -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 )

View File

@ -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

Binary file not shown.