diff --git a/src/interrupts.rs b/src/interrupts.rs index 5825b09..84a198d 100644 --- a/src/interrupts.rs +++ b/src/interrupts.rs @@ -9,6 +9,7 @@ use crate::gdt; #[repr(u8)] pub enum InterruptIndex { Timer = PIC_1_OFFSET, + Keyboard, } impl InterruptIndex { @@ -36,6 +37,8 @@ lazy_static! { } idt[InterruptIndex::Timer.as_usize()] .set_handler_fn(timer_interrupt_handler); + idt[InterruptIndex::Keyboard.as_usize()] + .set_handler_fn(keyboard_interrupt_handler); idt }; } @@ -68,3 +71,15 @@ extern "x86-interrupt" fn timer_interrupt_handler(_stack_frame: &mut InterruptSt PICS.lock().notify_end_of_interrupt(InterruptIndex::Timer.as_u8()) } } + +extern "x86-interrupt" fn keyboard_interrupt_handler(_stack_frame: &mut InterruptStackFrame) { + use x86_64::instructions::port::Port; + + let mut port = Port::new(0x60); + let scancode: u8 = unsafe { port.read() }; + + print!("k"); + unsafe { + PICS.lock().notify_end_of_interrupt(InterruptIndex::Keyboard.as_u8()) + } +}