From 9c37471780593b996041481fc847a8cde5eb053e Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Sat, 9 Nov 2019 13:22:01 -0500 Subject: [PATCH] ti/kbd: improve debouncing Previously, on real hardware (emulator behaved fine), we would routinely get repeat keys unless pressing the button very fast. This commit solves that. --- kernel/ti/kbd.asm | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/kernel/ti/kbd.asm b/kernel/ti/kbd.asm index 14939c0..3d629c0 100644 --- a/kernel/ti/kbd.asm +++ b/kernel/ti/kbd.asm @@ -126,13 +126,20 @@ kbdGetC: ret .debounce: ; wait until all keys are de-pressed + ; To avoid repeat keys, we require 64 subsequent polls to indicate all + ; depressed keys push af ; --> lvl 1 + push bc ; --> lvl 2 +.pressed: + ld b, 64 .wait: xor a call .get inc a ; if a was 0xff, will become 0 (nz test) - jr nz, .wait ; non-zero? something is pressed + jr nz, .pressed ; non-zero? something is pressed + djnz .wait + pop bc ; <-- lvl 2 pop af ; <-- lvl 1 ret