diff --git a/arch/x86/kernel/kb.c b/arch/x86/kernel/kb.c index 379fb878..237c3280 100644 --- a/arch/x86/kernel/kb.c +++ b/arch/x86/kernel/kb.c @@ -55,8 +55,8 @@ static const unsigned char kbdus[128] = { 0, 27, '1', '2', '3', '4', '5', '6', ' '\\', 'z', 'x', 'c', 'v', 'b', 'n', /* 49 */ 'm', ',', '.', '/', 0, /* Right shift */ '*', 0, /* Alt */ - ' ', /* Space bar */ - 0, /* Caps lock */ + ' ', /* 57 - Space bar */ + 0, /* 58 - Caps lock */ 0, /* 59 - F1 key ... > */ 0, 0, 0, 0, 0, 0, 0, 0, 0, /* < ... F10 */ 0, /* 69 - Num lock */ @@ -111,16 +111,22 @@ static void keyboard_handler(struct state *r) * held. If shift is held using the larger lookup table, * you would add 128 to the scancode when you look for it */ - kputchar(kbdus[scancode]); if (kb_buffer.size <= kb_buffer.maxsize && kb_buffer.buffer != NULL) { - if (scancode == 14 && kb_buffer.size != 0) { - kb_buffer.size--; + if (scancode == 14) { + if (kb_buffer.size != 0) { + kb_buffer.size--; + kputchar(kbdus[scancode]); + kputchar(kbdus[57]); + kputchar(kbdus[scancode]); + } } else { + kputchar(kbdus[scancode]); memcpy(kb_buffer.buffer + kb_buffer.size, &kbdus[scancode], 1); kb_buffer.size++; } if (scancode == 28 || scancode == 15 || kb_buffer.size >= kb_buffer.maxsize) { + kputchar(kbdus[scancode]); wakeup_task(kb_buffer.tid); reschedule(); }