diff --git a/src/keyboard.c b/src/keyboard.c index 820d5ff..26d7280 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -463,3 +463,22 @@ void keyboard_process() } } } + +void keyboard_send_scancode(int code, int is_break) +{ + scancode *scancodes = (AT) ? at_scancodes : scancode_xt; + int d = 0; + + if (!keyboard_scan) return; + + if (!is_break) + { + while (scancodes[code].scancodes_make[d] != 0) + keyboard_send(scancodes[code].scancodes_make[d++]); + } + else + { + while (scancodes[code].scancodes_break[d] != 0) + keyboard_send(scancodes[code].scancodes_break[d++]); + } +} diff --git a/src/keyboard.h b/src/keyboard.h index b48a02d..c4a63e0 100644 --- a/src/keyboard.h +++ b/src/keyboard.h @@ -13,3 +13,4 @@ enum }; void keyboard_set_scancode_set(int set); +void keyboard_send_scancode(int code, int is_break); diff --git a/src/pc.c b/src/pc.c index 1951134..2cbf071 100644 --- a/src/pc.c +++ b/src/pc.c @@ -388,12 +388,12 @@ void resetpc() void resetpc_cad() { - keyboard_send(29); /* Ctrl key pressed */ - keyboard_send(56); /* Alt key pressed */ - keyboard_send(83); /* Delete key pressed */ - keyboard_send(157); /* Ctrl key released */ - keyboard_send(184); /* Alt key released */ - keyboard_send(211); /* Delete key released */ + keyboard_send_scancode(29, 0); /* Ctrl key pressed */ + keyboard_send_scancode(56, 0); /* Alt key pressed */ + keyboard_send_scancode(83, 0); /* Delete key pressed */ + keyboard_send_scancode(29, 1); /* Ctrl key released */ + keyboard_send_scancode(56, 1); /* Alt key released */ + keyboard_send_scancode(83, 1); /* Delete key released */ } void resetpchard()