diff --git a/src/kernel/cpu/interrupts.tt b/src/kernel/cpu/interrupts.tt index 1ef4501..8944702 100644 --- a/src/kernel/cpu/interrupts.tt +++ b/src/kernel/cpu/interrupts.tt @@ -6,7 +6,7 @@ #include "interrupts.c" uintptr_t isr_table[] ={}; -void load_idt(struct idtr *_) +void load_idt(void *_) { (void)_; } diff --git a/src/kernel/cpu/isr_common.S b/src/kernel/cpu/isr_common.S index 4394d57..e1b888a 100644 --- a/src/kernel/cpu/isr_common.S +++ b/src/kernel/cpu/isr_common.S @@ -1,10 +1,5 @@ .intel_syntax noprefix -.global load_idt -load_idt: - lidt [rdi] - ret - .extern int_handler .global isr_common .global isr_return diff --git a/src/kernel/cpu/registers.S b/src/kernel/cpu/registers.S new file mode 100644 index 0000000..fa5a1da --- /dev/null +++ b/src/kernel/cpu/registers.S @@ -0,0 +1,23 @@ +.intel_syntax noprefix + +.global load_idt +load_idt: + lidt [rdi] + ret + +.global read_cr0 +read_cr0: + mov rax, cr0 + ret +.global read_cr2 +read_cr2: + mov rax, cr2 + ret +.global read_cr3 +read_cr3: + mov rax, cr3 + ret +.global read_cr4 +read_cr4: + mov rax, cr4 + ret diff --git a/src/kernel/include/cpu.h b/src/kernel/include/cpu.h index bae8a75..f1d0dcd 100644 --- a/src/kernel/include/cpu.h +++ b/src/kernel/include/cpu.h @@ -1,3 +1,12 @@ #pragma once +#include void cpu_init(); + + +void load_idt(void *); + +uint64_t read_cr0(); +uint64_t read_cr2(); +uint64_t read_cr3(); +uint64_t read_cr4(); diff --git a/src/kernel/include/interrupts.h b/src/kernel/include/interrupts.h index 763fdcf..3bbbdab 100644 --- a/src/kernel/include/interrupts.h +++ b/src/kernel/include/interrupts.h @@ -1,5 +1,6 @@ #pragma once #include +#include #define IDT_INTERRUPT 0xE #define IDT_DPL0 0x0 @@ -57,9 +58,9 @@ debug("RAX=%016x RBX=%016x RCX=%016x RDX=%016x\n", r->rax, r->rbx, r->rcx, r->rd debug("RSI=%016x RDI=%016x RBP=%016x RSP=%016x\n", r->rsi, r->rdi, r->rbp, r->rsp); \ debug("R8 =%016x R9 =%016x R10=%016x R11=%016x\n", r->r8, r->r9, r->r10, r->r11); \ debug("R12=%016x R13=%016x R14=%016x R15=%016x\n", r->r12, r->r13, r->r14, r->r15); \ -debug("RIP=%016x RFL=%016x\n", r->rip, r->rflags); \ -debug("CS=%016x SS=%016x\n", r->cs, r->ss); +debug("RIP=%016x RFL=%08x\n", r->rip, r->rflags); \ +debug("CS=%016x SS=%016x\n", r->cs, r->ss); \ +debug("CR0=%08x CR2=%016x CR3=%016x CR4=%08x\n", read_cr0(), read_cr2(), read_cr3(), read_cr4()); -void load_idt(struct idtr *); void interrupt_init();