forth: Word-ify "[']" and "'"
This commit is contained in:
parent
d91af99fde
commit
b72901175e
@ -449,44 +449,57 @@ LITS:
|
|||||||
ld (HERE), de
|
ld (HERE), de
|
||||||
jp next
|
jp next
|
||||||
|
|
||||||
.db "'"
|
.db "(find)"
|
||||||
.fill 6
|
.fill 1
|
||||||
.dw LITS
|
.dw LITS
|
||||||
.db 0
|
.db 0
|
||||||
FIND:
|
FIND_:
|
||||||
.dw nativeWord
|
.dw nativeWord
|
||||||
call readword
|
call readword
|
||||||
call find
|
call find
|
||||||
jr z, .found
|
jr z, .found
|
||||||
; not found
|
; not found
|
||||||
|
push hl
|
||||||
ld de, 0
|
ld de, 0
|
||||||
.found:
|
|
||||||
push de
|
push de
|
||||||
jp next
|
jp next
|
||||||
|
.found:
|
||||||
|
push de
|
||||||
|
ld de, 1
|
||||||
|
push de
|
||||||
|
jp next
|
||||||
|
|
||||||
|
.db "'"
|
||||||
|
.fill 6
|
||||||
|
.dw FIND_
|
||||||
|
.db 0
|
||||||
|
FIND:
|
||||||
|
.dw compiledWord
|
||||||
|
.dw FIND_
|
||||||
|
.dw CSKIP
|
||||||
|
.dw FINDERR
|
||||||
|
.dw EXIT
|
||||||
|
|
||||||
.db "[']"
|
.db "[']"
|
||||||
.fill 4
|
.fill 4
|
||||||
.dw FIND
|
.dw FIND
|
||||||
.db 0b01 ; IMMEDIATE
|
.db 0b01 ; IMMEDIATE
|
||||||
FINDI:
|
FINDI:
|
||||||
.dw nativeWord
|
.dw compiledWord
|
||||||
call readword
|
.dw FIND_
|
||||||
call find
|
.dw CSKIP
|
||||||
jr nz, .notfound
|
.dw FINDERR
|
||||||
ld hl, (HERE)
|
.dw LITN
|
||||||
push de ; --> lvl 1
|
.dw EXIT
|
||||||
ld de, NUMBER
|
|
||||||
call DEinHL
|
.db 0b10 ; UNWORD
|
||||||
pop de ; <-- lvl 1
|
FINDERR:
|
||||||
call DEinHL
|
.dw compiledWord
|
||||||
ld (HERE), hl
|
.dw DROP ; Drop str addr, we don't use it
|
||||||
jp next
|
.dw LIT
|
||||||
.notfound:
|
|
||||||
ld hl, .msg
|
|
||||||
call printstr
|
|
||||||
jp abort
|
|
||||||
.msg:
|
|
||||||
.db "word not found", 0
|
.db "word not found", 0
|
||||||
|
.dw PRINT
|
||||||
|
.dw ABORT
|
||||||
|
|
||||||
; ( -- c )
|
; ( -- c )
|
||||||
.db "KEY"
|
.db "KEY"
|
||||||
|
@ -32,10 +32,12 @@ directly, but as part of another word.
|
|||||||
"*I*" in description indicates an IMMEDIATE word.
|
"*I*" in description indicates an IMMEDIATE word.
|
||||||
|
|
||||||
*** Defining words ***
|
*** Defining words ***
|
||||||
|
(find) x -- a f Read word x and find it in dict. If found, f=1 and
|
||||||
|
a = wordref. If not found, f=0 and a = string addr.
|
||||||
: x ... -- Define a new word
|
: x ... -- Define a new word
|
||||||
; R:I -- Exit a colon definition
|
; R:I -- Exit a colon definition
|
||||||
, n -- Write n in HERE and advance it.
|
, n -- Write n in HERE and advance it.
|
||||||
' x -- a Push addr of word x to a. If not found, push 0
|
' x -- a Push addr of word x to a. If not found, aborts
|
||||||
['] x -- *I* Like "'", but spits the addr as a number
|
['] x -- *I* Like "'", but spits the addr as a number
|
||||||
literal. If not found, aborts.
|
literal. If not found, aborts.
|
||||||
( -- *I* Comment. Ignore rest of line until ")" is read.
|
( -- *I* Comment. Ignore rest of line until ")" is read.
|
||||||
|
Loading…
Reference in New Issue
Block a user