From cb936d97b8d253de69f74d411e5fcf654262229f Mon Sep 17 00:00:00 2001 From: maddiebaka Date: Sun, 23 Aug 2026 20:36:30 -0400 Subject: [PATCH] Fix serial and keyboard input to be non-blocking --- bme280_util.z80 | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/bme280_util.z80 b/bme280_util.z80 index 2c4a0b6..0ff0cd3 100644 --- a/bme280_util.z80 +++ b/bme280_util.z80 @@ -45,8 +45,12 @@ start: call print_str_to_lcd main: - call read_char_b + call read_char_b ; never blocks now + jr nc,check_quit ; wire is idle, go look at the keyboard call parse_char + jr main ; drain the sio while it still has data + +check_quit: ld c,dconio ; direct console i/o, no echo ld e,0ffh ; ff polls, returning zero if no key call bdos @@ -124,13 +128,15 @@ found_point: ld (hl),00h ; null terminate, discarding the rest ret -read_char_b: -wait: +read_char_b: ; carry set with the char in a, carry clear if nothing waiting in a,(siob_ctrl) bit 0,a - jr z,wait - + jr z,no_char in a,(siob_data) + scf ; flag a as a real character + ret +no_char: + or a ; clears carry, a holds status not data ret parse_char: ; char should be in register a