From 2701fe07b4c8c9b6a36112c98fbfc900acbd6cf3 Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Wed, 27 Nov 2019 01:46:33 +0100 Subject: Implement proto Keyboard handling --- kernel/src/interrupts/idt.rs | 2 ++ kernel/src/interrupts/interrupt_handlers.rs | 12 +++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) (limited to 'kernel/src/interrupts') diff --git a/kernel/src/interrupts/idt.rs b/kernel/src/interrupts/idt.rs index e41f957..c901916 100644 --- a/kernel/src/interrupts/idt.rs +++ b/kernel/src/interrupts/idt.rs @@ -26,6 +26,8 @@ lazy_static! { .set_stack_index(gdt::PAGE_FAULT_IST_INDEX); } idt[InterruptType::Timer.as_usize()].set_handler_fn(interrupt_handlers::timer_handler); + idt[InterruptType::Keyboard.as_usize()] + .set_handler_fn(interrupt_handlers::keyboard_handler); idt }; diff --git a/kernel/src/interrupts/interrupt_handlers.rs b/kernel/src/interrupts/interrupt_handlers.rs index 4624723..e7af0e1 100644 --- a/kernel/src/interrupts/interrupt_handlers.rs +++ b/kernel/src/interrupts/interrupt_handlers.rs @@ -1,11 +1,21 @@ use super::InterruptType; use crate::io::qemu; +use core::fmt::Write; use x86_64::structures::idt::{InterruptStackFrame, PageFaultErrorCode}; +use x86_64::structures::port; pub extern "x86-interrupt" fn timer_handler(stack_frame: &mut InterruptStackFrame) { - panic!("Timer interrupt recieved\n\n"); + write!(crate::io::vga_text::OStream::new(), "Timer"); if let Some(apic) = unsafe { super::apic::get_local_apic() } { apic.end_of_interrupt() } } + +pub extern "x86-interrupt" fn keyboard_handler(stack_frame: &mut InterruptStackFrame) { + let code: u8 = unsafe { port::PortRead::read_from_port(0x60) }; + write!(crate::io::vga_text::OStream::new(), "{}", code); + if let Some(apic) = unsafe { super::apic::get_local_apic() } { + apic.end_of_interrupt() + } +} -- cgit v1.2.3-54-g00ecf