diff --git a/emul/forth/emul.fs b/emul/forth/emul.fs index bf4a857..16ec637 100644 --- a/emul/forth/emul.fs +++ b/emul/forth/emul.fs @@ -8,3 +8,10 @@ CODE (emit) A L LDrr, 0 OUTnA, ;CODE + +CODE KEY + 0 INAn, + H 0 LDrn, + L A LDrr, + HL PUSHqq, +;CODE diff --git a/emul/forth/stagec.asm b/emul/forth/stagec.asm index 0488a8b..b146d21 100644 --- a/emul/forth/stagec.asm +++ b/emul/forth/stagec.asm @@ -9,11 +9,3 @@ init: ld sp, 0xffff call forthMain halt - -emulGetC: - ; Blocks until a char is returned - in a, (STDIO_PORT) - cp a ; ensure Z - ret - -.equ GETC emulGetC diff --git a/emul/forth/z80c.bin b/emul/forth/z80c.bin index 48ac1db..326ad7c 100644 Binary files a/emul/forth/z80c.bin and b/emul/forth/z80c.bin differ diff --git a/forth/forth.asm b/forth/forth.asm index 813e260..f38889d 100644 --- a/forth/forth.asm +++ b/forth/forth.asm @@ -141,7 +141,8 @@ forthMain: call find jr z, .skip ; no? then use KEY - ld de, KEY + ld hl, .keyName + call find .skip: ld (CINPTR), de ; Set up SYSVNXT @@ -157,6 +158,8 @@ forthMain: .db "(c<)", 0 .emitName: .db "(emit)", 0 +.keyName: + .db "KEY", 0 BEGIN: .dw compiledWord @@ -985,22 +988,10 @@ FIND_: push de jp next -; ( -- c ) - .db "KEY" - .dw $-FIND_ - .db 3 -KEY: - .dw nativeWord - call GETC - ld h, 0 - ld l, a - push hl - jp next - ; This is an indirect word that can be redirected through "CINPTR" ; code: it is replaced in readln.fs. .db "C<" - .dw $-KEY + .dw $-FIND_ .db 2 CIN: .dw compiledWord