summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Idziorek <m.i@gmx.at>2014-07-07 00:44:03 +0200
committerMichal Idziorek <m.i@gmx.at>2014-07-07 00:44:03 +0200
commit8159a045f12d55a7099805dc4cbab447ff449db4 (patch)
treec489be2585a1f4fec13419b72ed0c6e5ad50306a
parent3695234be1a4ef951e9716a6cda3a89ebbddcf61 (diff)
Improved experimantel keyboard mini-driver
Added some basic scancodes
-rw-r--r--kernel/kernel.c82
1 files 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;
}