#include "pic.h"
#include "internal.h"
#include "../../../runtime/stdio.h"


SYSV_ABI void irq_pic_IntHandler(int irq) {
	if (irq >= 8)
		outb(PIC2_COMMAND, PIC_CMD_EOI);
	outb(PIC1_COMMAND, PIC_CMD_EOI);

	if (irq_pic_IRQHandler[irq] == 0)
		// Text output is EXPENSIVE, do that only on unexpected IRQs
		io_Printf("INT %xh (IRQ %d) (no handler)\n", irq + IRQ_PIC_INT_OFFSET_MASTER, irq);
	else {
		//io_Printf("INT %xh (IRQ %d), handler%llx\n", irq + IRQ_PIC_INT_OFFSET_MASTER, irq, irq_pic_IRQHandler[irq]);
		irq_pic_IRQHandler[irq]();
	}
}