|
|
|
@ -41,6 +41,8 @@ _write_index: |
|
|
|
DEFS 1 |
|
|
|
_read_index: |
|
|
|
DEFS 1 |
|
|
|
_previous_keyCodes: |
|
|
|
DEFS 6 |
|
|
|
_active: |
|
|
|
DEFS 1 |
|
|
|
_report: |
|
|
|
@ -145,7 +147,7 @@ kyb_init_str_2: |
|
|
|
DEFB 0x0a |
|
|
|
DEFM "USB: KEYBOARD: NOT FOUND$" |
|
|
|
DEFB 0x00 |
|
|
|
;source-doc/keyboard/kyb-init.c:47: |
|
|
|
;source-doc/keyboard/kyb-init.c:49: |
|
|
|
; --------------------------------- |
|
|
|
; Function keyboard_buf_put |
|
|
|
; --------------------------------- |
|
|
|
@ -153,24 +155,42 @@ _keyboard_buf_put: |
|
|
|
push ix |
|
|
|
ld ix,0 |
|
|
|
add ix,sp |
|
|
|
;source-doc/keyboard/kyb-init.c:48: void keyboard_buf_put(const uint8_t modifier_keys, const uint8_t key_code) { |
|
|
|
;source-doc/keyboard/kyb-init.c:50: void keyboard_buf_put(const uint8_t modifier_keys, const uint8_t key_code) { |
|
|
|
ld a,(ix+5) |
|
|
|
sub 0x80 |
|
|
|
jr NC,l_keyboard_buf_put_00106 |
|
|
|
jr NC,l_keyboard_buf_put_00112 |
|
|
|
ld a,(ix+5) |
|
|
|
or a |
|
|
|
;source-doc/keyboard/kyb-init.c:49: if (key_code >= 0x80 || key_code == 0) |
|
|
|
jr Z,l_keyboard_buf_put_00106 |
|
|
|
;source-doc/keyboard/kyb-init.c:51: |
|
|
|
;source-doc/keyboard/kyb-init.c:51: if (key_code >= 0x80 || key_code == 0) |
|
|
|
;source-doc/keyboard/kyb-init.c:54: // if already reported, just skip it |
|
|
|
jr Z,l_keyboard_buf_put_00112 |
|
|
|
ld c,0x00 |
|
|
|
l_keyboard_buf_put_00110: |
|
|
|
ld a, c |
|
|
|
sub 0x06 |
|
|
|
jr NC,l_keyboard_buf_put_00106 |
|
|
|
;source-doc/keyboard/kyb-init.c:55: for (uint8_t i = 0; i < 6; i++) |
|
|
|
ld b,0x00 |
|
|
|
ld hl,_previous_keyCodes |
|
|
|
add hl, bc |
|
|
|
ld a,(ix+5) |
|
|
|
sub (hl) |
|
|
|
;source-doc/keyboard/kyb-init.c:56: if (previous_keyCodes[i] == key_code) |
|
|
|
jr Z,l_keyboard_buf_put_00112 |
|
|
|
;source-doc/keyboard/kyb-init.c:54: // if already reported, just skip it |
|
|
|
inc c |
|
|
|
jr l_keyboard_buf_put_00110 |
|
|
|
l_keyboard_buf_put_00106: |
|
|
|
;source-doc/keyboard/kyb-init.c:58: |
|
|
|
ld a,(_write_index) |
|
|
|
inc a |
|
|
|
and 0x07 |
|
|
|
ld c, a |
|
|
|
;source-doc/keyboard/kyb-init.c:52: uint8_t next_write_index = (write_index + 1) & KEYBOARD_BUFFER_SIZE_MASK; |
|
|
|
;source-doc/keyboard/kyb-init.c:59: uint8_t next_write_index = (write_index + 1) & KEYBOARD_BUFFER_SIZE_MASK; |
|
|
|
ld a,(_read_index) |
|
|
|
sub c |
|
|
|
jr Z,l_keyboard_buf_put_00106 |
|
|
|
;source-doc/keyboard/kyb-init.c:53: if (next_write_index != read_index) { // Check if buffer is not full |
|
|
|
jr Z,l_keyboard_buf_put_00112 |
|
|
|
;source-doc/keyboard/kyb-init.c:60: if (next_write_index != read_index) { // Check if buffer is not full |
|
|
|
ld de,_buffer+0 |
|
|
|
ld hl,(_write_index) |
|
|
|
ld h,0x00 |
|
|
|
@ -178,7 +198,7 @@ _keyboard_buf_put: |
|
|
|
add hl, de |
|
|
|
ld a,(ix+4) |
|
|
|
ld (hl), a |
|
|
|
;source-doc/keyboard/kyb-init.c:54: buffer[write_index].modifier_keys = modifier_keys; |
|
|
|
;source-doc/keyboard/kyb-init.c:61: buffer[write_index].modifier_keys = modifier_keys; |
|
|
|
ld hl,(_write_index) |
|
|
|
ld h,0x00 |
|
|
|
add hl, hl |
|
|
|
@ -187,30 +207,30 @@ _keyboard_buf_put: |
|
|
|
inc de |
|
|
|
ld a,(ix+5) |
|
|
|
ld (de), a |
|
|
|
;source-doc/keyboard/kyb-init.c:55: buffer[write_index].key_code = key_code; |
|
|
|
;source-doc/keyboard/kyb-init.c:62: buffer[write_index].key_code = key_code; |
|
|
|
ld hl,_write_index |
|
|
|
ld (hl), c |
|
|
|
l_keyboard_buf_put_00106: |
|
|
|
;source-doc/keyboard/kyb-init.c:57: } |
|
|
|
l_keyboard_buf_put_00112: |
|
|
|
;source-doc/keyboard/kyb-init.c:64: } |
|
|
|
pop ix |
|
|
|
ret |
|
|
|
;source-doc/keyboard/kyb-init.c:59: |
|
|
|
;source-doc/keyboard/kyb-init.c:66: |
|
|
|
; --------------------------------- |
|
|
|
; Function keyboard_buf_size |
|
|
|
; --------------------------------- |
|
|
|
_keyboard_buf_size: |
|
|
|
;source-doc/keyboard/kyb-init.c:60: uint8_t keyboard_buf_size() __sdcccall(1) { |
|
|
|
;source-doc/keyboard/kyb-init.c:67: uint8_t keyboard_buf_size() __sdcccall(1) { |
|
|
|
ld a,(_write_index) |
|
|
|
ld hl,_read_index |
|
|
|
sub (hl) |
|
|
|
jr C,l_keyboard_buf_size_00102 |
|
|
|
;source-doc/keyboard/kyb-init.c:61: if (write_index >= read_index) |
|
|
|
;source-doc/keyboard/kyb-init.c:68: if (write_index >= read_index) |
|
|
|
ld a,(_write_index) |
|
|
|
ld hl,_read_index |
|
|
|
sub (hl) |
|
|
|
jr l_keyboard_buf_size_00103 |
|
|
|
l_keyboard_buf_size_00102: |
|
|
|
;source-doc/keyboard/kyb-init.c:63: |
|
|
|
;source-doc/keyboard/kyb-init.c:70: |
|
|
|
ld hl,_read_index |
|
|
|
ld c, (hl) |
|
|
|
ld a,0x08 |
|
|
|
@ -219,9 +239,9 @@ l_keyboard_buf_size_00102: |
|
|
|
ld c, (hl) |
|
|
|
add a, c |
|
|
|
l_keyboard_buf_size_00103: |
|
|
|
;source-doc/keyboard/kyb-init.c:64: return KEYBOARD_BUFFER_SIZE - read_index + write_index; |
|
|
|
;source-doc/keyboard/kyb-init.c:71: return KEYBOARD_BUFFER_SIZE - read_index + write_index; |
|
|
|
ret |
|
|
|
;source-doc/keyboard/kyb-init.c:66: |
|
|
|
;source-doc/keyboard/kyb-init.c:73: |
|
|
|
; --------------------------------- |
|
|
|
; Function keyboard_buf_get_next |
|
|
|
; --------------------------------- |
|
|
|
@ -231,41 +251,41 @@ _keyboard_buf_get_next: |
|
|
|
add ix,sp |
|
|
|
push af |
|
|
|
push af |
|
|
|
;source-doc/keyboard/kyb-init.c:67: uint32_t keyboard_buf_get_next() { |
|
|
|
;source-doc/keyboard/kyb-init.c:74: uint32_t keyboard_buf_get_next() { |
|
|
|
ld a,(_write_index) |
|
|
|
ld hl,_read_index |
|
|
|
sub (hl) |
|
|
|
jr NZ,l_keyboard_buf_get_next_00102 |
|
|
|
;source-doc/keyboard/kyb-init.c:68: if (write_index == read_index) // Check if buffer is empty |
|
|
|
;source-doc/keyboard/kyb-init.c:75: 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_00103 |
|
|
|
l_keyboard_buf_get_next_00102: |
|
|
|
;source-doc/keyboard/kyb-init.c:70: |
|
|
|
;source-doc/keyboard/kyb-init.c:77: |
|
|
|
ld bc,_buffer+0 |
|
|
|
ld hl,(_read_index) |
|
|
|
ld h,0x00 |
|
|
|
add hl, hl |
|
|
|
add hl, bc |
|
|
|
ld b, (hl) |
|
|
|
;source-doc/keyboard/kyb-init.c:71: const uint8_t modifier_key = buffer[read_index].modifier_keys; |
|
|
|
;source-doc/keyboard/kyb-init.c:78: const uint8_t modifier_key = buffer[read_index].modifier_keys; |
|
|
|
inc hl |
|
|
|
ld c, (hl) |
|
|
|
;source-doc/keyboard/kyb-init.c:72: const uint8_t key_code = buffer[read_index].key_code; |
|
|
|
;source-doc/keyboard/kyb-init.c:79: const uint8_t key_code = buffer[read_index].key_code; |
|
|
|
ld hl,_read_index |
|
|
|
ld a, (hl) |
|
|
|
inc a |
|
|
|
and 0x07 |
|
|
|
ld (hl), a |
|
|
|
;source-doc/keyboard/kyb-init.c:73: read_index = (read_index + 1) & KEYBOARD_BUFFER_SIZE_MASK; |
|
|
|
;source-doc/keyboard/kyb-init.c:80: read_index = (read_index + 1) & KEYBOARD_BUFFER_SIZE_MASK; |
|
|
|
push bc |
|
|
|
ld l, c |
|
|
|
ld a, b |
|
|
|
call _scancode_to_char |
|
|
|
ld e, a |
|
|
|
pop bc |
|
|
|
;source-doc/keyboard/kyb-init.c:75: /* D = modifier, e-> char, H = 0, L=>code */ |
|
|
|
;source-doc/keyboard/kyb-init.c:82: /* D = modifier, e-> char, H = 0, L=>code */ |
|
|
|
xor a |
|
|
|
ld (ix-1),b |
|
|
|
xor a |
|
|
|
@ -282,34 +302,34 @@ l_keyboard_buf_get_next_00102: |
|
|
|
pop hl |
|
|
|
push hl |
|
|
|
l_keyboard_buf_get_next_00103: |
|
|
|
;source-doc/keyboard/kyb-init.c:76: return (uint32_t)modifier_key << 24 | (uint32_t)c << 16 | key_code; |
|
|
|
;source-doc/keyboard/kyb-init.c:83: return (uint32_t)modifier_key << 24 | (uint32_t)c << 16 | key_code; |
|
|
|
ld sp, ix |
|
|
|
pop ix |
|
|
|
ret |
|
|
|
;source-doc/keyboard/kyb-init.c:78: |
|
|
|
;source-doc/keyboard/kyb-init.c:85: |
|
|
|
; --------------------------------- |
|
|
|
; Function keyboard_buf_flush |
|
|
|
; --------------------------------- |
|
|
|
_keyboard_buf_flush: |
|
|
|
;source-doc/keyboard/kyb-init.c:79: void keyboard_buf_flush() { |
|
|
|
;source-doc/keyboard/kyb-init.c:86: void keyboard_buf_flush() { |
|
|
|
ld hl,_write_index |
|
|
|
ld (hl),0x00 |
|
|
|
;source-doc/keyboard/kyb-init.c:80: write_index = 0; |
|
|
|
;source-doc/keyboard/kyb-init.c:87: write_index = 0; |
|
|
|
ld hl,_read_index |
|
|
|
ld (hl),0x00 |
|
|
|
;source-doc/keyboard/kyb-init.c:81: read_index = 0; |
|
|
|
;source-doc/keyboard/kyb-init.c:88: read_index = 0; |
|
|
|
ret |
|
|
|
;source-doc/keyboard/kyb-init.c:87: |
|
|
|
;source-doc/keyboard/kyb-init.c:94: |
|
|
|
; --------------------------------- |
|
|
|
; Function keyboard_tick |
|
|
|
; --------------------------------- |
|
|
|
_keyboard_tick: |
|
|
|
;source-doc/keyboard/kyb-init.c:88: void keyboard_tick(void) { |
|
|
|
;source-doc/keyboard/kyb-init.c:95: void keyboard_tick(void) { |
|
|
|
ld hl,_in_critical_usb_section |
|
|
|
ld a, (hl) |
|
|
|
or a |
|
|
|
;source-doc/keyboard/kyb-init.c:89: if (is_in_critical_section()) |
|
|
|
ret NZ |
|
|
|
;source-doc/keyboard/kyb-init.c:96: if (is_in_critical_section()) |
|
|
|
jr NZ,l_keyboard_tick_00111 |
|
|
|
;././source-doc/base-drv//ch376.h:110: #endif |
|
|
|
ld l,0x0b |
|
|
|
call _ch_command |
|
|
|
@ -321,8 +341,8 @@ _keyboard_tick: |
|
|
|
ld a,0x1f |
|
|
|
ld bc,_CH376_DATA_PORT |
|
|
|
out (c),a |
|
|
|
;source-doc/keyboard/kyb-init.c:92: ch_configure_nak_retry_disable(); |
|
|
|
ld bc,_report |
|
|
|
;source-doc/keyboard/kyb-init.c:99: ch_configure_nak_retry_disable(); |
|
|
|
ld bc,_report+0 |
|
|
|
ld hl, (_keyboard_config) |
|
|
|
ld a,0x08 |
|
|
|
push af |
|
|
|
@ -346,20 +366,47 @@ _keyboard_tick: |
|
|
|
ld a,0xdf |
|
|
|
ld bc,_CH376_DATA_PORT |
|
|
|
out (c),a |
|
|
|
;source-doc/keyboard/kyb-init.c:94: ch_configure_nak_retry_3s(); |
|
|
|
;source-doc/keyboard/kyb-init.c:101: ch_configure_nak_retry_3s(); |
|
|
|
ld hl,_result |
|
|
|
ld a, (hl) |
|
|
|
;source-doc/keyboard/kyb-init.c:102: if (result == 0) |
|
|
|
or a |
|
|
|
ret NZ |
|
|
|
;source-doc/keyboard/kyb-init.c:95: if (result == 0) |
|
|
|
ld a, (_report + 2) |
|
|
|
jr NZ,l_keyboard_tick_00111 |
|
|
|
ld c,a |
|
|
|
l_keyboard_tick_00109: |
|
|
|
ld a, c |
|
|
|
sub 0x06 |
|
|
|
ret NC |
|
|
|
;source-doc/keyboard/kyb-init.c:103: for (uint8_t i = 0; i < 6; i++) { |
|
|
|
ld a,+((_report+2) & 0xFF) |
|
|
|
add a, c |
|
|
|
ld e, a |
|
|
|
ld a,+((_report+2) / 256) |
|
|
|
adc a,0x00 |
|
|
|
ld d, a |
|
|
|
ld a, (de) |
|
|
|
ld hl,_report |
|
|
|
ld c, (hl) |
|
|
|
ld b, (hl) |
|
|
|
push bc |
|
|
|
push de |
|
|
|
ld c,b |
|
|
|
ld b,a |
|
|
|
push bc |
|
|
|
call _keyboard_buf_put |
|
|
|
pop af |
|
|
|
;source-doc/keyboard/kyb-init.c:96: keyboard_buf_put(report.bModifierKeys, report.keyCode[0]); |
|
|
|
pop de |
|
|
|
pop bc |
|
|
|
;source-doc/keyboard/kyb-init.c:104: 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:102: if (result == 0) |
|
|
|
inc c |
|
|
|
jr l_keyboard_tick_00109 |
|
|
|
l_keyboard_tick_00111: |
|
|
|
;source-doc/keyboard/kyb-init.c:106: } |
|
|
|
ret |
|
|
|
_keyboard_config: |
|
|
|
DEFW +0x0000 |
|
|
|
@ -384,6 +431,13 @@ _write_index: |
|
|
|
DEFB +0x00 |
|
|
|
_read_index: |
|
|
|
DEFB +0x00 |
|
|
|
_previous_keyCodes: |
|
|
|
DEFB +0x00 |
|
|
|
DEFB 0x00 |
|
|
|
DEFB 0x00 |
|
|
|
DEFB 0x00 |
|
|
|
DEFB 0x00 |
|
|
|
DEFB 0x00 |
|
|
|
_active: |
|
|
|
DEFB +0x00 |
|
|
|
_report: |
|
|
|
|