#include "pic.h" #include "portio.h" /* * Re-maps the Programmable Interrupr Controllers * so IRQ0->pic1 base address, IRG8->pic2 base address */ void pic_remap(u8_t base1, u8_t base2) { u8_t a1, a2; a1 = inportb(PIC1_DATA); /* 0x21 */ a2 = inportb(PIC2_DATA); /* 0xA1 */ outportb(PIC1_COMMAND, ICW1_INIT+ICW1_ICW4); /* 0x20, 0x10+0x01 00010001b */ outportb(PIC2_COMMAND, ICW1_INIT+ICW1_ICW4); /* 0xA0, 0x10+0x01 00010001b */ outportb(PIC1_DATA, base1); /* 0x21, pic1 */ outportb(PIC2_DATA, base2); /* 0xA1, pic2 */ outportb(PIC1_DATA, 4); /* 0x21, 0x04 00000100b */ outportb(PIC2_DATA, 2); /* 0xA1, 0x02 00000010b */ outportb(PIC1_DATA, ICW4_8086); /* 0x21, 0x01 00000001b */ outportb(PIC2_DATA, ICW4_8086); /* 0xA1, 0x01 00000001b */ outportb(PIC1_DATA, a1); /* 0x21 */ outportb(PIC2_DATA, a2); /* 0xA1 */ }