From 8159a045f12d55a7099805dc4cbab447ff449db4 Mon Sep 17 00:00:00 2001 From: Michal Idziorek Date: Mon, 7 Jul 2014 00:44:03 +0200 Subject: Improved experimantel keyboard mini-driver Added some basic scancodes --- kernel/kernel.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 78 insertions(+), 4 deletions(-) diff --git a/kernel/kernel.c b/kernel/kernel.c index 665455d..05d04cc 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -84,16 +84,90 @@ void kernel_main_joke() } int cursor=0; +char last_code=0; + + void int0() { int i=0; - char codes[]={ 0x1e,0x30,0x2e,0x23,0x24,0x2b,0x34,0x33,0x43,0x3b,0x42,0x4b,0x3a,0x31,0x44,0x43,0x15,0x2d,0x1b,0x2c,0x3c,0x2a,0x1d,0x22,0x35,0x1a}; + + char make_codes[]={ + 0x1e, // A + 0x30, // B + 0x2e, // C + 0x20, // D + 0x12, // E + 0x21, // F + 0x22, // G + 0x23, // H + 0x17, // I + 0x24, // J + 0x25, // K + 0x26, // L + 0x32, // M + 0x31, // N + 0x18, // O + 0x19, // P + 0x10, // Q + 0x13, // R + 0x1F, // S + 0x14, // T + 0x16, // U + 0x2F, // V + 0x11, // W + 0x2D, // X + 0x15, // Y + 0x2c, // Z + }; + + char break_codes[]={ + 0x9e, // A + 0xb0, // B + 0xae, // C + 0xa0, // D + 0x92, // E + 0xa1, // F + 0xa2, // G + 0xa3, // H + 0x97, // I + 0xa4, // J + 0xa5, // K + 0xa6, // L + 0xb2, // M + 0xb1, // N + 0x98, // O + 0x99, // P + 0x90, // Q + 0x93, // R + 0x9F, // S + 0x94, // T + 0x96, // U + 0xaF, // V + 0x91, // W + 0xaD, // X + 0x95, // Y + 0xac, // Z + }; char* int_count=(char *)0x7c00+3; - for(i=0;i<24;i++){ - if(codes[i]==*int_count) - print_char(10,10,'A'+i,0xf); + if(last_code==*int_count)return; + + for(i=0;i<26;i++) + { + if(make_codes[i]==*int_count) + { + print_char(cursor,10,'A'+i,0xf); + } } + for(i=0;i<26;i++) + { + if(break_codes[i]==*int_count) + { + print_char(cursor++,10,'a'+i,0xf); + } + } + + last_code=*int_count; } -- cgit v1.2.3