forth: add words "."" and "(print)"

This commit is contained in:
Virgil Dupras 2020-03-17 15:22:13 -04:00
parent a40926d710
commit 25b6e75cf7
2 changed files with 49 additions and 1 deletions

View File

@ -192,10 +192,55 @@ EMIT:
call stdioPutC call stdioPutC
jp next jp next
.db "(print)"
.dw EMIT
.db 0
PRINT:
.dw nativeWord
pop hl
call chkPS
call printstr
jp next
.db '.', '"'
.fill 5
.dw PRINT
.db 1 ; IMMEDIATE
PRINTI:
.dw nativeWord
ld hl, (HERE)
ld de, LIT
call DEinHL
ex de, hl ; (HERE) now in DE
ld hl, (INPUTPOS)
.loop:
ld a, (hl)
or a ; null? not cool
jp z, abort
cp '"'
jr z, .loopend
ld (de), a
inc hl
inc de
jr .loop
.loopend:
inc hl ; inputpos to char afterwards
ld (INPUTPOS), hl
; null-terminate LIT
inc de
xor a
ld (de), a
ex de, hl ; (HERE) in HL
ld de, PRINT
call DEinHL
ld (HERE), hl
jp next
; ( c port -- ) ; ( c port -- )
.db "PC!" .db "PC!"
.fill 4 .fill 4
.dw EMIT .dw PRINTI
.db 0 .db 0
PSTORE: PSTORE:
.dw nativeWord .dw nativeWord

View File

@ -146,8 +146,11 @@ wait until another line is entered.
KEY input, however, is direct. Regardless of the input buffer's state, KEY will KEY input, however, is direct. Regardless of the input buffer's state, KEY will
return the next typed key. return the next typed key.
(print) a -- Print string at addr a.
. n -- Print n in its decimal form . n -- Print n in its decimal form
.X n -- Print n in its hexadecimal form. In hex, numbers .X n -- Print n in its hexadecimal form. In hex, numbers
." xxx" -- *I* Compiles string literal xxx followed by a call
to (print)
are never considered negative. "-1 .X -> ffff" are never considered negative. "-1 .X -> ffff"
EMIT c -- Spit char c to output stream EMIT c -- Spit char c to output stream
IN> -- a Address of variable containing current pos in input IN> -- a Address of variable containing current pos in input