Browse Source

forth: Forth-ify "LITN"

pull/95/head
Virgil Dupras 4 years ago
parent
commit
758ec025dc
3 changed files with 12 additions and 20 deletions
  1. BIN
      emul/forth/z80c.bin
  2. +2
    -17
      forth/forth.asm
  3. +10
    -3
      forth/icore.fs

BIN
emul/forth/z80c.bin View File


+ 2
- 17
forth/forth.asm View File

@@ -714,25 +714,10 @@ DOES:
jp EXIT+2 jp EXIT+2




.fill 51

; ( n -- )
.db "LITN"
.dw $-DOES
.db 4
LITN:
.dw nativeWord
ld hl, (HERE)
ld de, NUMBER
call DEinHL
pop de ; number from stack
call chkPS
call DEinHL
ld (HERE), hl
jp next
.fill 82


.db "SCPY" .db "SCPY"
.dw $-LITN
.dw $-DOES
.db 4 .db 4
SCPY: SCPY:
.dw nativeWord .dw nativeWord


+ 10
- 3
forth/icore.fs View File

@@ -97,6 +97,12 @@
HERE @ 1 + HERE ! HERE @ 1 + HERE !
; ;


: LITN
( JTBL+24 == NUMBER )
JTBL 24 + ,
,
;

: (entry) : (entry)
HERE @ ( h ) HERE @ ( h )
WORD ( h s ) WORD ( h s )
@@ -118,15 +124,16 @@


: X : X
_c (entry) _c (entry)
( JTBL+6 == compiledWord )
[ JTBL 6 + LITN ] ,
( We cannot use LITN as IMMEDIATE because of bootstrapping
issues. JTBL+24 == NUMBER JTBL+6 == compiledWord )
[ JTBL 24 + , JTBL 6 + , ] ,
BEGIN BEGIN
WORD WORD
(find) (find)
( is word ) ( is word )
IF DUP _c IMMED? IF EXECUTE ELSE , THEN IF DUP _c IMMED? IF EXECUTE ELSE , THEN
( maybe number ) ( maybe number )
ELSE (parse*) @ EXECUTE LITN THEN
ELSE (parse*) @ EXECUTE _c LITN THEN
AGAIN AGAIN
; IMMEDIATE ; IMMEDIATE




Loading…
Cancel
Save