diff options
| author | Aleksa Vuckovic <aleksav013@gmail.com> | 2022-08-05 03:14:51 +0200 |
|---|---|---|
| committer | Aleksa Vuckovic <aleksav013@gmail.com> | 2022-08-05 03:14:51 +0200 |
| commit | be3274c49d0ca5e31daa855c4c109d830fdead67 (patch) | |
| tree | 7f097287c7917b5bf662c5d2322a437a15f2a2da /kernel/pic.c | |
| parent | f622bf0d79a7460cb160207bcd75f257deb872ea (diff) | |
interrupts
Diffstat (limited to 'kernel/pic.c')
| -rw-r--r-- | kernel/pic.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/kernel/pic.c b/kernel/pic.c new file mode 100644 index 0000000..801556d --- /dev/null +++ b/kernel/pic.c @@ -0,0 +1,24 @@ +#include <io.h> +#include <pic.h> + +void remap_pic(void) +{ + // save masks +// uint8_t a1 = inb(PIC1_DATA); +// uint8_t a2 = inb(PIC2_DATA); + + // starts the initialization sequence (in cascade mode) + outb(PIC1_COMMAND, ICW1_INIT | ICW1_ICW4); + outb(PIC2_COMMAND, ICW1_INIT | ICW1_ICW4); + outb(PIC1_DATA, 0x20); // ICW2: Master PIC vector offset + outb(PIC2_DATA, 0x28); // ICW2: Slave PIC vector offset + outb(PIC1_DATA, 4); // ICW3: tell Master PIC that there is a slave PIC at IRQ2 (0000 0100) + outb(PIC2_DATA, 2); // ICW3: tell Slave PIC its cascade identity (0000 0010) + + outb(PIC1_DATA, ICW4_8086); + outb(PIC2_DATA, ICW4_8086); + + // mask interrupts + outb(PIC1_DATA, 0xfd); + outb(PIC2_DATA, 0xff); +} |
