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