aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/programs.asm6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/programs.asm b/src/programs.asm
index df2b98d..d4ae89f 100644
--- a/src/programs.asm
+++ b/src/programs.asm
@@ -59,8 +59,10 @@ ProgSh:
; read a line into SH_LINEBUF, echoing as we go
ld hl, SH_LINEBUF
.rd
+ push hl ; syscalls clobber HL (trap uses it to dispatch)
ld c, SYS_READ
rst $30 ; A = input byte
+ pop hl
cp $0D
jr z, .eol
cp $0A
@@ -70,7 +72,9 @@ ProgSh:
ld [$FF01], a ; echo the char straight to serial
ld a, $81
ld [$FF02], a
- jr .rd
+ ld a, l
+ cp LOW(SH_LINEBUF) + SH_MAXLINE - 1
+ jr c, .rd ; keep reading unless the buffer is full
.eol
ld [hl], 0 ; NUL-terminate