Enable base PICS (3h53m)
This commit is contained in:
parent
beb2227d7e
commit
59a7f07012
5 changed files with 23 additions and 3 deletions
10
Cargo.lock
generated
10
Cargo.lock
generated
|
@ -32,6 +32,7 @@ version = "0.1.0"
|
|||
dependencies = [
|
||||
"bootloader",
|
||||
"lazy_static",
|
||||
"pic8259",
|
||||
"spin 0.5.2",
|
||||
"uart_16550",
|
||||
"volatile 0.2.7",
|
||||
|
@ -47,6 +48,15 @@ dependencies = [
|
|||
"spin 0.9.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pic8259"
|
||||
version = "0.10.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cb844b5b01db1e0b17938685738f113bfc903846f18932b378bc0eabfa40e194"
|
||||
dependencies = [
|
||||
"x86_64",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustversion"
|
||||
version = "1.0.18"
|
||||
|
|
|
@ -18,6 +18,7 @@ volatile = "0.2.6"
|
|||
spin = "0.5.2"
|
||||
x86_64 = "0.14.2"
|
||||
uart_16550 = "0.2.0"
|
||||
pic8259 = "0.10.1"
|
||||
|
||||
[dependencies.lazy_static]
|
||||
version = "1.0"
|
||||
|
|
|
@ -2,6 +2,8 @@ use x86_64::structures::idt::{InterruptDescriptorTable, InterruptStackFrame};
|
|||
use crate::println;
|
||||
use lazy_static::lazy_static;
|
||||
use crate::gdt;
|
||||
use pic8259::ChainedPics;
|
||||
use spin;
|
||||
|
||||
lazy_static! {
|
||||
static ref IDT: InterruptDescriptorTable = {
|
||||
|
@ -36,4 +38,10 @@ extern "x86-interrupt" fn double_fault_handler(
|
|||
fn test_breakpoint_exception() {
|
||||
// invoke a breakpoint exception
|
||||
x86_64::instructions::interrupts::int3();
|
||||
}
|
||||
}
|
||||
|
||||
pub const PIC_1_OFFSET: u8 = 32;
|
||||
pub const PIC_2_OFFSET: u8 = PIC_1_OFFSET + 8;
|
||||
|
||||
pub static PICS: spin::Mutex<ChainedPics> =
|
||||
spin::Mutex::new(unsafe {ChainedPics::new(PIC_1_OFFSET, PIC_2_OFFSET) });
|
||||
|
|
|
@ -15,6 +15,8 @@ pub mod gdt;
|
|||
pub fn init() {
|
||||
gdt::init();
|
||||
interrupts::init_idt();
|
||||
unsafe { interrupts::PICS.lock().initialize() };
|
||||
x86_64::instructions::interrupts::enable();
|
||||
}
|
||||
|
||||
use core::panic::PanicInfo;
|
||||
|
|
|
@ -10,7 +10,7 @@ use donald::println;
|
|||
#[no_mangle]
|
||||
pub extern "C" fn _start() -> ! {
|
||||
println!("Hello World{}", "!");
|
||||
|
||||
println!("It did not crash!");
|
||||
donald::init();
|
||||
|
||||
fn stack_overflow() {
|
||||
|
@ -22,7 +22,6 @@ pub extern "C" fn _start() -> ! {
|
|||
#[cfg(test)]
|
||||
test_main();
|
||||
|
||||
println!("It did not crash!");
|
||||
loop {}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue