From 418af5f62622dae4f0433fe21468bca76dec4a12 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Sat, 9 Nov 2019 13:12:36 -0500 Subject: [PATCH] ti/kbd: make Alpha and 2nd toggle Previously, when being in A-Lock mode, activating Alpha wouldn't make us go temporarily in digit mode, as is expected. --- kernel/ti/kbd.asm | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/kernel/ti/kbd.asm b/kernel/ti/kbd.asm index 8bbdc4d..14939c0 100644 --- a/kernel/ti/kbd.asm +++ b/kernel/ti/kbd.asm @@ -31,7 +31,7 @@ kbdInit: ; waitForKey only go through after two actual key presses (otherwise, the user ; doesn't have enough time to de-press the button before the next waitForKey ; routine registers the same key press as a second one). -; +; ; Sending 0xff to the port resets the keyboard, and then we have to send groups ; we want to "listen" to, with a 0 in the group bit. Thus, to know if *any* key ; is pressed, we send 0xff to reset the keypad, then 0x00 to select all groups, @@ -90,7 +90,10 @@ kbdGetC: jr z, .handle2nd jp .loop .handleAlpha: - set 0, c + ; Toggle Alpha bit in C. Also, if 2ND bit is set, toggle A-Lock mod. + ld a, 1 ; mask for Alpha + xor c + ld c, a bit 1, c ; 2nd set? jp z, .loop ; unset? loop ; we've just hit Alpha with 2nd set. Toggle A-Lock and set Alpha to @@ -101,9 +104,12 @@ kbdGetC: ld c, a jp .loop .handle2nd: - set 1, c + ; toggle 2ND bit in C + ld a, 2 ; mask for 2ND + xor c + ld c, a jp .loop - + .end: pop hl pop bc