// this is just a 8259 PIC thing in zig, kinda defines only the constants the // IDT needs cause the actual remapping and masking is done in the kernel level // which is pretty cool.EOI has to stay here cause it runs inside the ISR tho, // so somewhere the VM cant really do much. // // see: https://wiki.osdev.org/8259_PIC const port = @import("port.zig"); const MASTER_CMD: u16 = 0x20; const SLAVE_CMD: u16 = 0xA0; const EOI: u8 = 0x20; // end-of-interrupt command pub const MASTER_OFFSET: u8 = 0x20; // IRQ0..7 -> vectors 0x20..0x27 pub const SLAVE_OFFSET: u8 = 0x28; // IRQ8..15 -> vectors 0x28..0x2F // tell the PIC we're done. the slave's interrupts also need the master EOI'd // since they arrive via the cascade. pub fn eoi(irq: u4) void { if (irq >= 8) port.outb(SLAVE_CMD, EOI); port.outb(MASTER_CMD, EOI); }