From 6dd33393dfdb82bb616e70752e3e23d61c065c70 Mon Sep 17 00:00:00 2001 From: wescande Date: Mon, 12 Feb 2018 12:54:11 +0100 Subject: [PATCH] keyboard handle maj --- kernel-rs/keycode | 258 ++++++++++++++++++++++++++++++++++++ kernel-rs/keycode2 | 249 ++++++++++++++++++++++++++++++++++ kernel-rs/src/keyboard.rs | 159 +++++++++++++++++++++- kernel-rs/src/lib.rs | 28 ++-- kernel-rs/src/vga_buffer.rs | 3 + 5 files changed, 687 insertions(+), 10 deletions(-) create mode 100644 kernel-rs/keycode create mode 100644 kernel-rs/keycode2 diff --git a/kernel-rs/keycode b/kernel-rs/keycode new file mode 100644 index 00000000..5a9d4d08 --- /dev/null +++ b/kernel-rs/keycode @@ -0,0 +1,258 @@ +0x01 escape pressed +0x02 1 pressed +0x03 2 pressed +0x04 3 pressed +0x05 4 pressed +0x06 5 pressed +0x07 6 pressed +0x08 7 pressed +0x09 8 pressed +0x0A 9 pressed +0x0B 0 (zero) pressed +0x0C - pressed +0x0D = pressed +0x0E backspace pressed +0x0F tab pressed +0x10 Q pressed +0x11 W pressed +0x12 E pressed +0x13 R pressed +0x14 T pressed +0x15 Y pressed +0x16 U pressed +0x17 I pressed +0x18 O pressed +0x19 P pressed +0x1A [ pressed +0x1B ] pressed +0x1C enter pressed +0x1D left control pressed +0x1E A pressed +0x1F S pressed +0x20 D pressed +0x21 F pressed +0x22 G pressed +0x23 H pressed +0x24 J pressed +0x25 K pressed +0x26 L pressed +0x27 ; pressed +0x28 ' (single quote) pressed +0x29 ` (back tick) pressed +0x2A left shift pressed +0x2B \ pressed +0x2C Z pressed +0x2D X pressed +0x2E C pressed +0x2F V pressed +0x30 B pressed +0x31 N pressed +0x32 M pressed +0x33 , pressed +0x34 . pressed +0x35 / pressed +0x36 right shift pressed +0x37 (keypad) * pressed +0x38 left alt pressed +0x39 space pressed +0x3A CapsLock pressed +0x3B F1 pressed +0x3C F2 pressed +0x3D F3 pressed +0x3E F4 pressed +0x3F F5 pressed +0x40 F6 pressed +0x41 F7 pressed +0x42 F8 pressed +0x43 F9 pressed +0x44 F10 pressed +0x45 NumberLock pressed +0x46 ScrollLock pressed +0x47 (keypad) 7 pressed +0x48 (keypad) 8 pressed +0x49 (keypad) 9 pressed +0x4A (keypad) - pressed +0x4B (keypad) 4 pressed +0x4C (keypad) 5 pressed +0x4D (keypad) 6 pressed +0x4E (keypad) + pressed +0x4F (keypad) 1 pressed +0x50 (keypad) 2 pressed +0x51 (keypad) 3 pressed +0x52 (keypad) 0 pressed +0x53 (keypad) . pressed +0x57 F11 pressed +0x58 F12 pressed + + + + + + + + + +0x81 escape released +0x82 1 released +0x83 2 released +0x84 3 released +0x85 4 released +0x86 5 released +0x87 6 released +0x88 7 released +0x89 8 released +0x8A 9 released +0x8B 0 (zero) released +0x8C - released +0x8D = released +0x8E backspace released +0x8F tab released +0x90 Q released +0x91 W released +0x92 E released +0x93 R released +0x94 T released +0x95 Y released +0x96 U released +0x97 I released +0x98 O released +0x99 P released +0x9A [ released +0x9B ] released +0x9C enter released +0x9D left control released +0x9E A released +0x9F S released +0xA0 D released +0xA1 F released +0xA2 G released +0xA3 H released +0xA4 J released +0xA5 K released +0xA6 L released +0xA7 ; released +0xA8 ' (single quote) released +0xA9 ` (back tick) released +0xAA left shift released +0xAB \ released +0xAC Z released +0xAD X released +0xAE C released +0xAF V released +0xB0 B released +0xB1 N released +0xB2 M released +0xB3 , released +0xB4 . released +0xB5 / released +0xB6 right shift released +0xB7 (keypad) * released +0xB8 left alt released +0xB9 space released +0xBA CapsLock released +0xBB F1 released +0xBC F2 released +0xBD F3 released +0xBE F4 released +0xBF F5 released +0xC0 F6 released +0xC1 F7 released +0xC2 F8 released +0xC3 F9 released +0xC4 F10 released +0xC5 NumberLock released +0xC6 ScrollLock released +0xC7 (keypad) 7 released +0xC8 (keypad) 8 released +0xC9 (keypad) 9 released +0xCA (keypad) - released +0xCB (keypad) 4 released +0xCC (keypad) 5 released +0xCD (keypad) 6 released +0xCE (keypad) + released +0xCF (keypad) 1 released +0xD0 (keypad) 2 released +0xD1 (keypad) 3 released +0xD2 (keypad) 0 released +0xD3 (keypad) . released +0xD7 F11 released +0xD8 F12 released +0xE0, 0x10 (multimedia) previous track pressed +0xE0, 0x19 (multimedia) next track pressed +0xE0, 0x1C (keypad) enter pressed +0xE0, 0x1D right control pressed +0xE0, 0x20 (multimedia) mute pressed +0xE0, 0x21 (multimedia) calculator pressed +0xE0, 0x22 (multimedia) play pressed +0xE0, 0x24 (multimedia) stop pressed +0xE0, 0x2E (multimedia) volume down pressed +0xE0, 0x30 (multimedia) volume up pressed +0xE0, 0x32 (multimedia) WWW home pressed +0xE0, 0x35 (keypad) / pressed +0xE0, 0x38 right alt (or altGr) pressed +0xE0, 0x47 home pressed +0xE0, 0x48 cursor up pressed +0xE0, 0x49 page up pressed +0xE0, 0x4B cursor left pressed +0xE0, 0x4D cursor right pressed +0xE0, 0x4F end pressed +0xE0, 0x50 cursor down pressed +0xE0, 0x51 page down pressed +0xE0, 0x52 insert pressed +0xE0, 0x53 delete pressed +0xE0, 0x5B left GUI pressed +0xE0, 0x5C right GUI pressed +0xE0, 0x5D "apps" pressed +0xE0, 0x5E (ACPI) power pressed +0xE0, 0x5F (ACPI) sleep pressed +0xE0, 0x63 (ACPI) wake pressed +0xE0, 0x65 (multimedia) WWW search pressed +0xE0, 0x66 (multimedia) WWW favorites pressed +0xE0, 0x67 (multimedia) WWW refresh pressed +0xE0, 0x68 (multimedia) WWW stop pressed +0xE0, 0x69 (multimedia) WWW forward pressed +0xE0, 0x6A (multimedia) WWW back pressed +0xE0, 0x6B (multimedia) my computer pressed +0xE0, 0x6C (multimedia) email pressed +0xE0, 0x6D (multimedia) media select pressed +0xE0, 0x90 (multimedia) previous track released +0xE0, 0x99 (multimedia) next track released +0xE0, 0x9C (keypad) enter released +0xE0, 0x9D right control released +0xE0, 0xA0 (multimedia) mute released +0xE0, 0xA1 (multimedia) calculator released +0xE0, 0xA2 (multimedia) play released +0xE0, 0xA4 (multimedia) stop released +0xE0, 0xAE (multimedia) volume down released +0xE0, 0xB0 (multimedia) volume up released +0xE0, 0xB2 (multimedia) WWW home released +0xE0, 0xB5 (keypad) / released +0xE0, 0xB8 right alt (or altGr) released +0xE0, 0xC7 home released +0xE0, 0xC8 cursor up released +0xE0, 0xC9 page up released +0xE0, 0xCB cursor left released +0xE0, 0xCD cursor right released +0xE0, 0xCF end released +0xE0, 0xD0 cursor down released +0xE0, 0xD1 page down released +0xE0, 0xD2 insert released +0xE0, 0xD3 delete released +0xE0, 0xDB left GUI released +0xE0, 0xDC right GUI released +0xE0, 0xDD "apps" released +0xE0, 0xDE (ACPI) power released +0xE0, 0xDF (ACPI) sleep released +0xE0, 0xE3 (ACPI) wake released +0xE0, 0xE5 (multimedia) WWW search released +0xE0, 0xE6 (multimedia) WWW favorites released +0xE0, 0xE7 (multimedia) WWW refresh released +0xE0, 0xE8 (multimedia) WWW stop released +0xE0, 0xE9 (multimedia) WWW forward released +0xE0, 0xEA (multimedia) WWW back released +0xE0, 0xEB (multimedia) my computer released +0xE0, 0xEC (multimedia) email released +0xE0, 0xED (multimedia) media select released +0xE0, 0x2A, 0xE0, 0x37 print screen pressed +0xE0, 0xB7, 0xE0, 0xAA print screen released +0xE1, 0x1D, 0x45, 0xE1, 0x9D, 0xC5 pause pressed diff --git a/kernel-rs/keycode2 b/kernel-rs/keycode2 new file mode 100644 index 00000000..a7473619 --- /dev/null +++ b/kernel-rs/keycode2 @@ -0,0 +1,249 @@ +0x01 F9 pressed +0x03 F5 pressed +0x04 F3 pressed +0x05 F1 pressed +0x06 F2 pressed +0x07 F12 pressed +0x09 F10 pressed +0x0A F8 pressed +0x0B F6 pressed +0x0C F4 pressed +0x0D tab pressed +0x0E ` (back tick) pressed +0x11 left alt pressed +0x12 left shift pressed +0x14 left control pressed +0x15 Q pressed +0x16 1 pressed +0x1A Z pressed +0x1B S pressed +0x1C A pressed +0x1D W pressed +0x1E 2 pressed +0x21 C pressed +0x22 X pressed +0x23 D pressed +0x24 E pressed +0x25 4 pressed +0x26 3 pressed +0x29 space pressed +0x2A V pressed +0x2B F pressed +0x2C T pressed +0x2D R pressed +0x2E 5 pressed +0x31 N pressed +0x32 B pressed +0x33 H pressed +0x34 G pressed +0x35 Y pressed +0x36 6 pressed +0x3A M pressed +0x3B J pressed +0x3C U pressed +0x3D 7 pressed +0x3E 8 pressed +0x41 , pressed +0x42 K pressed +0x43 I pressed +0x44 O pressed +0x45 0 (zero) pressed +0x46 9 pressed +0x49 . pressed +0x4A / pressed +0x4B L pressed +0x4C ; pressed +0x4D P pressed +0x4E - pressed +0x52 ' pressed +0x54 [ pressed +0x55 = pressed +0x58 CapsLock pressed +0x59 right shift pressed +0x5A enter pressed +0x5B ] pressed +0x5D \ pressed +0x66 backspace pressed +0x69 (keypad) 1 pressed +0x6B (keypad) 4 pressed +0x6C (keypad) 7 pressed +0x70 (keypad) 0 pressed +0x71 (keypad) . pressed +0x72 (keypad) 2 pressed +0x73 (keypad) 5 pressed +0x74 (keypad) 6 pressed +0x75 (keypad) 8 pressed +0x76 escape pressed +0x77 NumberLock pressed +0x78 F11 pressed +0x79 (keypad) + pressed +0x7A (keypad) 3 pressed +0x7B (keypad) - pressed +0x7C (keypad) * pressed +0x7D (keypad) 9 pressed +0x7E ScrollLock pressed +0x83 F7 pressed +0xE0, 0x10 (multimedia) WWW search pressed +0xE0, 0x11 right alt pressed +0xE0, 0x14 right control pressed +0xE0, 0x15 (multimedia) previous track pressed +0xE0, 0x18 (multimedia) WWW favourites pressed +0xE0, 0x1F left GUI pressed +0xE0, 0x20 (multimedia) WWW refresh pressed +0xE0, 0x21 (multimedia) volume down pressed +0xE0, 0x23 (multimedia) mute pressed +0xE0, 0x27 right GUI pressed +0xE0, 0x28 (multimedia) WWW stop pressed +0xE0, 0x2B (multimedia) calculator pressed +0xE0, 0x2F apps pressed +0xE0, 0x30 (multimedia) WWW forward pressed +0xE0, 0x32 (multimedia) volume up pressed +0xE0, 0x34 (multimedia) play/pause pressed +0xE0, 0x37 (ACPI) power pressed +0xE0, 0x38 (multimedia) WWW back pressed +0xE0, 0x3A (multimedia) WWW home pressed +0xE0, 0x3B (multimedia) stop pressed +0xE0, 0x3F (ACPI) sleep pressed +0xE0, 0x40 (multimedia) my computer pressed +0xE0, 0x48 (multimedia) email pressed +0xE0, 0x4A (keypad) / pressed +0xE0, 0x4D (multimedia) next track pressed +0xE0, 0x50 (multimedia) media select pressed +0xE0, 0x5A (keypad) enter pressed +0xE0, 0x5E (ACPI) wake pressed +0xE0, 0x69 end pressed +0xE0, 0x6B cursor left pressed +0xE0, 0x6C home pressed +0xE0, 0x70 insert pressed +0xE0, 0x71 delete pressed +0xE0, 0x72 cursor down pressed +0xE0, 0x74 cursor right pressed +0xE0, 0x75 cursor up pressed +0xE0, 0x7A page down pressed +0xE0, 0x7D page up pressed +0xF0, 0x01 F9 released +0xF0, 0x03 F5 released +0xF0, 0x04 F3 released +0xF0, 0x05 F1 released +0xF0, 0x06 F2 released +0xF0, 0x07 F12 released +0xF0, 0x09 F10 released +0xF0, 0x0A F8 released +0xF0, 0x0B F6 released +0xF0, 0x0C F4 released +0xF0, 0x0D tab released +0xF0, 0x0E ` (back tick) released +0xF0, 0x11 left alt released +0xF0, 0x12 left shift released +0xF0, 0x14 left control released +0xF0, 0x15 Q released +0xF0, 0x16 1 released +0xF0, 0x1A Z released +0xF0, 0x1B S released +0xF0, 0x1C A released +0xF0, 0x1D W released +0xF0, 0x1E 2 released +0xF0, 0x21 C released +0xF0, 0x22 X released +0xF0, 0x23 D released +0xF0, 0x24 E released +0xF0, 0x25 4 released +0xF0, 0x26 3 released +0xF0, 0x29 space released +0xF0, 0x2A V released +0xF0, 0x2B F released +0xF0, 0x2C T released +0xF0, 0x2D R released +0xF0, 0x2E 5 released +0xF0, 0x31 N released +0xF0, 0x32 B released +0xF0, 0x33 H released +0xF0, 0x34 G released +0xF0, 0x35 Y released +0xF0, 0x36 6 released +0xF0, 0x3A M released +0xF0, 0x3B J released +0xF0, 0x3C U released +0xF0, 0x3D 7 released +0xF0, 0x3E 8 released +0xF0, 0x41 , released +0xF0, 0x42 K released +0xF0, 0x43 I released +0xF0, 0x44 O released +0xF0, 0x45 0 (zero) released +0xF0, 0x46 9 released +0xF0, 0x49 . released +0xF0, 0x4A / released +0xF0, 0x4B L released +0xF0, 0x4C ; released +0xF0, 0x4D P released +0xF0, 0x4E - released +0xF0, 0x52 ' released +0xF0, 0x54 [ released +0xF0, 0x55 = released +0xF0, 0x58 CapsLock released +0xF0, 0x59 right shift released +0xF0, 0x5A enter released +0xF0, 0x5B ] released +0xF0, 0x5D \ released +0xF0, 0x66 backspace released +0xF0, 0x69 (keypad) 1 released +0xF0, 0x6B (keypad) 4 released +0xF0, 0x6C (keypad) 7 released +0xF0, 0x70 (keypad) 0 released +0xF0, 0x71 (keypad) . released +0xF0, 0x72 (keypad) 2 released +0xF0, 0x73 (keypad) 5 released +0xF0, 0x74 (keypad) 6 released +0xF0, 0x75 (keypad) 8 released +0xF0, 0x76 escape released +0xF0, 0x77 NumberLock released +0xF0, 0x78 F11 released +0xF0, 0x79 (keypad) + released +0xF0, 0x7A (keypad) 3 released +0xF0, 0x7B (keypad) - released +0xF0, 0x7C (keypad) * released +0xF0, 0x7D (keypad) 9 released +0xF0, 0x7E ScrollLock released +0xF0, 0x83 F7 released +0xE0, 0x12, 0xE0, 0x7C print screen pressed +0xE0, 0xF0, 0x10 (multimedia) WWW search released +0xE0, 0xF0, 0x11 right alt released +0xE0, 0xF0, 0x14 right control released +0xE0, 0xF0, 0x15 (multimedia) previous track released +0xE0, 0xF0, 0x18 (multimedia) WWW favourites released +0xE0, 0xF0, 0x1F left GUI released +0xE0, 0xF0, 0x20 (multimedia) WWW refresh released +0xE0, 0xF0, 0x21 (multimedia) volume down released +0xE0, 0xF0, 0x23 (multimedia) mute released +0xE0, 0xF0, 0x27 right GUI released +0xE0, 0xF0, 0x28 (multimedia) WWW stop released +0xE0, 0xF0, 0x2B (multimedia) calculator released +0xE0, 0xF0, 0x2F apps released +0xE0, 0xF0, 0x30 (multimedia) WWW forward released +0xE0, 0xF0, 0x32 (multimedia) volume up released +0xE0, 0xF0, 0x34 (multimedia) play/pause released +0xE0, 0xF0, 0x37 (ACPI) power released +0xE0, 0xF0, 0x38 (multimedia) WWW back released +0xE0, 0xF0, 0x3A (multimedia) WWW home released +0xE0, 0xF0, 0x3B (multimedia) stop released +0xE0, 0xF0, 0x3F (ACPI) sleep released +0xE0, 0xF0, 0x40 (multimedia) my computer released +0xE0, 0xF0, 0x48 (multimedia) email released +0xE0, 0xF0, 0x4A (keypad) / released +0xE0, 0xF0, 0x4D (multimedia) next track released +0xE0, 0xF0, 0x50 (multimedia) media select released +0xE0, 0xF0, 0x5A (keypad) enter released +0xE0, 0xF0, 0x5E (ACPI) wake released +0xE0, 0xF0, 0x69 end released +0xE0, 0xF0, 0x6B cursor left released +0xE0, 0xF0, 0x6C home released +0xE0, 0xF0, 0x70 insert released +0xE0, 0xF0, 0x71 delete released +0xE0, 0xF0, 0x72 cursor down released +0xE0, 0xF0, 0x74 cursor right released +0xE0, 0xF0, 0x75 cursor up released +0xE0, 0xF0, 0x7A page down released +0xE0, 0xF0, 0x7D page up released +0xE0, 0xF0, 0x7C, 0xE0, 0xF0, 0x12 print screen released +0xE1, 0x14, 0x77, 0xE1, 0xF0, 0x14, 0xF0, 0x77 pause pressed diff --git a/kernel-rs/src/keyboard.rs b/kernel-rs/src/keyboard.rs index daf172f5..94b35fdc 100644 --- a/kernel-rs/src/keyboard.rs +++ b/kernel-rs/src/keyboard.rs @@ -1 +1,158 @@ -pub static KEY_CODE_TO_ASCII: [u8; 59] = *b"??1234567890-=??qwertyuiop[]\n?asdfghjkl;'`?\\zxcvbnm,./?*? ?"; +// pub static KEY_CODE_TO_ASCII: [u8; 59] = *b"\0\01234567890-=\0\0qwertyuiop[]\n\0asdfghjkl;'`\0\\zxcvbnm,./\0*\0 \0"; + +const MAX_KEYS: usize = 59; +const TOUCH_RELEASE: u8 = 1 << 7; +// static ASCII_GUARD:[u8;2] = *b"\0\0"; + +static mut SHIFT: bool = false; +const KEYMAP_US: [[u8;2]; MAX_KEYS] = [ + *b"\0\0", + *b"\0\0",//escape + *b"1!", + *b"2@", + *b"3#", + *b"4$", + *b"5%", + *b"6^", + *b"7&", + *b"8*", + *b"9(", + *b"0)", + *b"-_", + *b"=+", + *b"\0\0",//backspace + *b"\0\0",//tab + *b"qQ", + *b"wW", + *b"eE", + *b"rR", + *b"tT", + *b"yY", + *b"uU", + *b"iI", + *b"oO", + *b"pP", + *b"[{", + *b"]}", + *b"\n\n", + *b"\0\0",//left_control + *b"aA", + *b"sS", + *b"dD", + *b"fF", + *b"gG", + *b"hH", + *b"jJ", + *b"kK", + *b"lL", + *b";:", + *b"'\"", + *b"`~", + *b"\0\0",//left shift + *b"\\|", + *b"zZ", + *b"xX", + *b"cC", + *b"vV", + *b"bB", + *b"nN", + *b"mM", + *b",<", + *b".>", + *b"/?", + *b"\0\0",//right shift + *b"**", + *b"\0\0",//left alt + *b" ", + *b"\0\0",//capslock + ]; +// use vga_buffer; +use cpuio; + +// use vga_buffer::buffer::{Writer, Screen}; +use vga_buffer::WRITER; + +fn check_touch_state(key: u8) -> (bool, usize) { + if (key & TOUCH_RELEASE) == TOUCH_RELEASE { + (true, (key - TOUCH_RELEASE) as usize) + } else { + (false, key as usize) + } +} + +pub fn kbd_loop() { + // let terminal_one: vga::terminal::Terminal = vga::Screen::new(); + // let terminal_two: vga::terminal::Terminal = vga::Screen::new(); + + let control = unsafe { cpuio::inb(0x64) }; + if (control & 1) == 1 { + let scancode = unsafe { cpuio::inb(0x60) }; + let (is_release, scancode) = check_touch_state(scancode); + if scancode < MAX_KEYS { + let key_array = KEYMAP_US[scancode]; + if key_array == *b"\0\0"{ + match scancode { + 0x2A | 0x36 => { + unsafe {SHIFT = !is_release}; + } + _ => {} + } + } + else if !is_release { + unsafe { + if SHIFT { + WRITER.lock().write_byte(key_array[1]); + } + else { + WRITER.lock().write_byte(key_array[0]); + } + } + } + } + } + //match self::KEYMAP_US.get(scancode as usize) { + // Some(ASCII_GUARD) => {}, + // Some(touch_array) if !is_release => { + // //TODO screen switching logic + // // if let Some(action) = Screen::keypress(current_screen, *ascii as char) { + // if let Some(action) = current_screen.keypress(*ascii as char) { + // writer.action(action); + // } + // }, + // _ =>{}, + // None => println!("nokey ctrl {:x}", control), + // } + // if scancode < MAX_KEYS { + // let ascii = KEYMAP_US[scancode]; + // if ascii != *b"\0\0" { + // if shift { + // writer.write(ascii[1] as char); + // } + // else { + // writer.write(ascii[0] as char); + // } + + // } + // else { + // if scancode == 0x2A || scancode == 0x36 + + // } + + // } + + //TODO current_screen() with mutex lock? + // let current_screen = terminal_one; + + //TODO implement logic to translate scancode->ascii + //match self::SCANCODE_TO_ASCII.get(scancode as usize) { + // Some(ascii) => { + // //TODO screen switching logic + // // if let Some(action) = Screen::keypress(current_screen, *ascii as char) { + // if let Some(action) = current_screen.keypress(*ascii as char) { + // writer.action(action); + // } + // }, + // None =>{}, + // // None => println!("nokey ctrl {:x}", control), + //} +} diff --git a/kernel-rs/src/lib.rs b/kernel-rs/src/lib.rs index a4556262..7acccf37 100644 --- a/kernel-rs/src/lib.rs +++ b/kernel-rs/src/lib.rs @@ -15,6 +15,15 @@ mod vga_buffer; mod cpuio; mod keyboard; +// fn check_shift(key: u8) -> u8 { +// print!("{:b} vs {:b}\n", key as u8, (1<<7) as u8); +// if (key >> 7 & 1) == 1 { +// print!("MATCH"); +// key - (1 << 7) +// } else { +// key +// } +// } #[no_mangle] pub extern fn kmain() -> ! { use vga_buffer::WRITER; @@ -40,15 +49,16 @@ pub extern fn kmain() -> ! { WRITER.lock().color_code = ColorCode::new(Color::White, Color::Black); println!(">> Kernel startup..."); loop { - let control = unsafe { cpuio::inb(0x64) }; - if (control & 1) == 1 { - let keycode = unsafe { cpuio::inb(0x60) }; - match keyboard::KEY_CODE_TO_ASCII.get(keycode as usize) { - Some(ascii) => print!("{}", *ascii as char), - None =>{}, - // None => println!("nokey ctrl {:x}", control), - } - } + keyboard::kbd_loop(); + // let control = unsafe { cpuio::inb(0x64) }; + // if (control & 1) == 1 { + // let keycode = unsafe { cpuio::inb(0x60) }; + // match keyboard::KEY_CODE_TO_ASCII.get(keycode as usize) { + // Some(ascii) => print!("{}", *ascii as char), + // None =>{}, + // // None => println!("nokey ctrl {:x}", control), + // } + // } } } diff --git a/kernel-rs/src/vga_buffer.rs b/kernel-rs/src/vga_buffer.rs index 5bbaedfb..b245d306 100644 --- a/kernel-rs/src/vga_buffer.rs +++ b/kernel-rs/src/vga_buffer.rs @@ -87,6 +87,9 @@ impl Writer { self.column_position += 1; } } + if self.column_position >= BUFFER_WIDTH { + self.new_line(); + } let row = BUFFER_HEIGHT - 1; let col = self.column_position; self.buffer().chars[row][col].write(CURSOR);