From 6789f1082a86de0d871d2e7fa68ae4a7c59bb041 Mon Sep 17 00:00:00 2001 From: mrgian Date: Thu, 6 Apr 2023 21:21:10 +0200 Subject: [PATCH] Implement backspace --- kernel/src/keyboard.rs | 32 ++++++++++++++++++++++---------- kernel/src/print.rs | 8 ++++++++ 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/kernel/src/keyboard.rs b/kernel/src/keyboard.rs index f909969..6502d81 100644 --- a/kernel/src/keyboard.rs +++ b/kernel/src/keyboard.rs @@ -1,4 +1,5 @@ use crate::pic::PICS; +use crate::print::PRINTER; use core::arch::asm; pub const KEYBOARD_INT: u8 = 33; @@ -30,14 +31,25 @@ pub extern "C" fn keyboard_handler() { PICS.end_interrupt(KEYBOARD_INT); unsafe { - if scancode == 0x2a { - KEYBOARD.lshift = true; - return; - } - - if scancode == 0xaa { - KEYBOARD.lshift = false; - return; + match scancode { + //press left shift + 0x2a => { + KEYBOARD.lshift = true; + return; + }, + + //release left shift + 0xaa => { + KEYBOARD.lshift = false; + return; + }, + + //backspace + 0x0e => { + PRINTER.backspace(); + return; + }, + _ => {}, } } @@ -65,12 +77,12 @@ fn scancode_to_char(scancode: u8) -> char { let mut key; - if index < 36 { + if index < chars.len() { key = chars[index]; unsafe { if KEYBOARD.lshift { - key -= 0x20; + key -= 0x20; //make char uppercase } } } else { diff --git a/kernel/src/print.rs b/kernel/src/print.rs index b5e7928..cfa6b53 100644 --- a/kernel/src/print.rs +++ b/kernel/src/print.rs @@ -78,6 +78,14 @@ impl Printer { self.set_cursor_position(); } + pub fn backspace(&mut self) { + self.x -= 1; + self.printc('\0', 12, 0); + self.x -= 1; + + self.set_cursor_position(); + } + //get cursor position directly talking to vga hardware pub fn get_cursor_position(&self) -> (u16, u16) { let mut index: u16 = 0;