diff --git a/kernel/src/arch/x86_64/mod.rs b/kernel/src/arch/x86_64/mod.rs index 9bce207..14c95ad 100644 --- a/kernel/src/arch/x86_64/mod.rs +++ b/kernel/src/arch/x86_64/mod.rs @@ -1,17 +1,19 @@ use embedded_graphics::pixelcolor::Rgb888; -use crate::{arch::x86_64::graphics::DISPLAY, bootmodules::BootModule}; - +use { + crate::{arch::x86_64::graphics::DISPLAY, bootmodules::BootModule}, + core::arch::asm, +}; pub mod memory; mod cpuid; +mod device_info_collector; mod gdt; pub mod graphics; pub(crate) mod interrupts; pub mod logging; pub mod pci; pub mod virtio; -mod device_info_collector; pub use {logging::log, memory::PAGE_SIZE}; @@ -192,3 +194,71 @@ pub fn hardware_random_u64() -> u64 { } pub fn get_edid() {} + +pub fn register_dump() { + let rax: u64; + let rbx: u64 = 0; + let rcx: u64; + let rdx: u64; + let si: u64; + let di: u64; + + let r8: u64; // TODO: r8-r15 + let r9: u64; + let r10: u64; + let r11: u64; + let r12: u64; + let r13: u64; + let r14: u64; + let r15: u64; + + unsafe { + asm!("", + out("rax") rax, + out("rcx") rcx, + out("rdx") rdx, + out("si") si, + out("di") di, + out("r8") r8, + out("r9") r9, + out("r10") r10, + out("r11") r11, + out("r12") r12, + out("r13") r13, + out("r14") r14, + out("r15") r15, + ) + }; + + log::error!( + "Kernel Panic!\r +Register Dump\r + rax: {:#x}\r + rbx: {:#x}\r + rcx: {:#x}\r + rdx: {:#x}\r + si : {:#x}\r + di : {:#x}\r + r8 : {:#x}\r + r9 : {:#x}\r + r11: {:#x}\r + r12: {:#x}\r + r13: {:#x}\r + r14: {:#x}\r + r15: {:#x}\r +", + rax, + rbx, + rcx, + rdx, + si, + di, + r8, + r9, + r11, + r12, + r13, + r14, + r15, + ); +}