Files
YukiOS/arch/x86_64/boot/idt.zig

23 lines
694 B
Zig

const desc = @import("arch").desc;
const mem = @import("arch").mem;
const TrapType = @import("arch").trap.TrapType;
extern const __KERNEL_CS: u8;
var idt_table: [256]desc.IdtEntry align(mem.PAGE_SIZE) = .{.{}} ** 256;
extern const boot_page_fault: u8;
extern const boot_nmi: u8;
fn setIdtEntry(vec: usize, handler: anytype) void {
var entry = desc.IdtEntry{};
entry.setOffset(@intFromPtr(handler));
entry.selector = @intFromPtr(&__KERNEL_CS);
entry.gate_type = .trap;
entry.present = 1;
idt_table[vec] = entry;
}
export fn loadLoaderIdt() void {
setIdtEntry(TrapType.PF, &boot_page_fault);
setIdtEntry(TrapType.NMI, &boot_nmi);
desc.loadIdt(&idt_table);
}