summaryrefslogtreecommitdiff
path: root/kernel/src/cpu/pic.c
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksav013@gmail.com>2022-08-05 14:33:51 +0200
committerAleksa Vuckovic <aleksav013@gmail.com>2022-08-05 14:33:51 +0200
commitbd7d4366b6643b5c6cd04f40dd32f5d9c9575fd6 (patch)
tree92429e897be007d46c8f063a39a986df2124111a /kernel/src/cpu/pic.c
parentbe3274c49d0ca5e31daa855c4c109d830fdead67 (diff)
organised files; switched to recursive make
Diffstat (limited to 'kernel/src/cpu/pic.c')
-rw-r--r--kernel/src/cpu/pic.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/kernel/src/cpu/pic.c b/kernel/src/cpu/pic.c
new file mode 100644
index 0000000..801556d
--- /dev/null
+++ b/kernel/src/cpu/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);
+}