From 3f6fc215e9b641802605f73d0f63cdb15ffbad66 Mon Sep 17 00:00:00 2001 From: Dean Netherton Date: Sat, 12 Apr 2025 20:42:29 +1000 Subject: [PATCH] ch376-native: UKY_READ fixed issue with incorrect H value when no characters in buffer --- .../HBIOS/ch376-native/keyboard/kyb-init.c.s | 54 +++++++------------ .../source-doc/keyboard/kyb-init.c | 15 ++++-- Source/HBIOS/ch376kyb.asm | 3 +- 3 files changed, 31 insertions(+), 41 deletions(-) diff --git a/Source/HBIOS/ch376-native/keyboard/kyb-init.c.s b/Source/HBIOS/ch376-native/keyboard/kyb-init.c.s index 8bcaa66e..0c1f1012 100644 --- a/Source/HBIOS/ch376-native/keyboard/kyb-init.c.s +++ b/Source/HBIOS/ch376-native/keyboard/kyb-init.c.s @@ -258,9 +258,9 @@ _keyboard_buf_get_next: jr NZ,l_keyboard_buf_get_next_00102 ;source-doc/keyboard/kyb-init.c:77: if (write_index == read_index) // Check if buffer is empty ld hl,0xff00 - ld e, h - ld d, h - jr l_keyboard_buf_get_next_00105 + ld e, l + ld d, l + jr l_keyboard_buf_get_next_00103 l_keyboard_buf_get_next_00102: ;source-doc/keyboard/kyb-init.c:79: ld bc,_buffer+0 @@ -277,27 +277,14 @@ l_keyboard_buf_get_next_00102: inc a and 0x07 ld (_read_index),a -;source-doc/keyboard/kyb-init.c:83: - ld a, c - sub 0x39 - jr NZ,l_keyboard_buf_get_next_00104 -;source-doc/keyboard/kyb-init.c:84: if (key_code == KEY_CODE_CAPS_LOCK) { - ld hl,_caps_lock_engaged - ld a, (hl) - xor 0x01 - ld (hl), a -;source-doc/keyboard/kyb-init.c:85: caps_lock_engaged = !caps_lock_engaged; - call _keyboard_buf_get_next - jr l_keyboard_buf_get_next_00105 -l_keyboard_buf_get_next_00104: -;source-doc/keyboard/kyb-init.c:88: +;source-doc/keyboard/kyb-init.c:93: push bc ld l, c ld a, b call _scancode_to_char ld e, a pop bc -;source-doc/keyboard/kyb-init.c:90: /* D = modifier, e-> char, H = 0, L=>code */ +;source-doc/keyboard/kyb-init.c:95: /* D = modifier, e-> char, H = 0, L=>code */ xor a ld (ix-1),b xor a @@ -313,33 +300,33 @@ l_keyboard_buf_get_next_00104: ld (ix-1),a pop hl push hl -l_keyboard_buf_get_next_00105: -;source-doc/keyboard/kyb-init.c:91: return (uint32_t)modifier_key << 24 | (uint32_t)c << 16 | key_code; +l_keyboard_buf_get_next_00103: +;source-doc/keyboard/kyb-init.c:96: return (uint32_t)modifier_key << 24 | (uint32_t)c << 16 | key_code; ld sp, ix pop ix ret -;source-doc/keyboard/kyb-init.c:93: +;source-doc/keyboard/kyb-init.c:98: ; --------------------------------- ; Function keyboard_buf_flush ; --------------------------------- _keyboard_buf_flush: -;source-doc/keyboard/kyb-init.c:94: void keyboard_buf_flush() { -;source-doc/keyboard/kyb-init.c:95: write_index = 0; +;source-doc/keyboard/kyb-init.c:99: void keyboard_buf_flush() { +;source-doc/keyboard/kyb-init.c:100: write_index = 0; xor a ld (_write_index),a ld (_read_index),a -;source-doc/keyboard/kyb-init.c:96: read_index = 0; +;source-doc/keyboard/kyb-init.c:101: read_index = 0; ret -;source-doc/keyboard/kyb-init.c:102: +;source-doc/keyboard/kyb-init.c:107: ; --------------------------------- ; Function keyboard_tick ; --------------------------------- _keyboard_tick: -;source-doc/keyboard/kyb-init.c:103: void keyboard_tick(void) { +;source-doc/keyboard/kyb-init.c:108: void keyboard_tick(void) { ld hl,_in_critical_usb_section ld a, (hl) or a -;source-doc/keyboard/kyb-init.c:104: if (is_in_critical_section()) +;source-doc/keyboard/kyb-init.c:109: if (is_in_critical_section()) jr NZ,l_keyboard_tick_00111 ;././source-doc/base-drv//ch376.h:110: #endif ld l,0x0b @@ -352,7 +339,6 @@ _keyboard_tick: ld a,0x1f ld bc,_CH376_DATA_PORT out (c), a -;source-doc/keyboard/kyb-init.c:107: ch_configure_nak_retry_disable(); ld bc,_report ld hl, (_keyboard_config) ld a,0x08 @@ -377,10 +363,10 @@ _keyboard_tick: ld a,0xdf ld bc,_CH376_DATA_PORT out (c), a -;source-doc/keyboard/kyb-init.c:109: ch_configure_nak_retry_3s(); +;source-doc/keyboard/kyb-init.c:114: ch_configure_nak_retry_3s(); ld hl,_result ld a, (hl) -;source-doc/keyboard/kyb-init.c:110: if (result == 0) +;source-doc/keyboard/kyb-init.c:115: if (result == 0) or a jr NZ,l_keyboard_tick_00111 ld c,a @@ -388,7 +374,7 @@ l_keyboard_tick_00109: ld a, c sub 0x06 ret NC -;source-doc/keyboard/kyb-init.c:111: for (uint8_t i = 0; i < 6; i++) { +;source-doc/keyboard/kyb-init.c:116: for (uint8_t i = 0; i < 6; i++) { ld a,+((_report+2) & 0xFF) add a, c ld e, a @@ -407,17 +393,17 @@ l_keyboard_tick_00109: pop af pop de pop bc -;source-doc/keyboard/kyb-init.c:112: keyboard_buf_put(report.bModifierKeys, report.keyCode[i]); +;source-doc/keyboard/kyb-init.c:117: keyboard_buf_put(report.bModifierKeys, report.keyCode[i]); ld b,0x00 ld hl,_previous_keyCodes add hl, bc ld a, (de) ld (hl), a -;source-doc/keyboard/kyb-init.c:110: if (result == 0) +;source-doc/keyboard/kyb-init.c:115: if (result == 0) inc c jr l_keyboard_tick_00109 l_keyboard_tick_00111: -;source-doc/keyboard/kyb-init.c:114: } +;source-doc/keyboard/kyb-init.c:119: } ret _keyboard_config: DEFW +0x0000 diff --git a/Source/HBIOS/ch376-native/source-doc/keyboard/kyb-init.c b/Source/HBIOS/ch376-native/source-doc/keyboard/kyb-init.c index aba62ac5..9b566097 100644 --- a/Source/HBIOS/ch376-native/source-doc/keyboard/kyb-init.c +++ b/Source/HBIOS/ch376-native/source-doc/keyboard/kyb-init.c @@ -75,16 +75,21 @@ uint8_t keyboard_buf_size() __sdcccall(1) { uint32_t keyboard_buf_get_next() { if (write_index == read_index) // Check if buffer is empty - return 255 << 8; + return 0x0000FF00; // H = -1, D, E, L = 0 const uint8_t modifier_key = buffer[read_index].modifier_keys; const uint8_t key_code = buffer[read_index].key_code; read_index = (read_index + 1) & KEYBOARD_BUFFER_SIZE_MASK; - if (key_code == KEY_CODE_CAPS_LOCK) { - caps_lock_engaged = !caps_lock_engaged; - return keyboard_buf_get_next(); - } + //D: Modifier keys - aka Keystate + //E: ASCII Code + //H: 0 + //L: KeyCode aka scan code + + // if (key_code == KEY_CODE_CAPS_LOCK) { + // caps_lock_engaged = !caps_lock_engaged; + // return keyboard_buf_get_next(); + // } const unsigned char c = scancode_to_char(modifier_key, key_code); /* D = modifier, e-> char, H = 0, L=>code */ diff --git a/Source/HBIOS/ch376kyb.asm b/Source/HBIOS/ch376kyb.asm index ac971673..f65397ea 100644 --- a/Source/HBIOS/ch376kyb.asm +++ b/Source/HBIOS/ch376kyb.asm @@ -153,7 +153,6 @@ UKY_READ: LD A, H OR A JR NZ, UKY_READ - LD C, 0 - LD D, 0 + LD C, L XOR A RET