aboutsummaryrefslogtreecommitdiff
path: root/src/drivers/pic.c
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2021-04-12 10:28:04 +0200
committerLoic Guegan <manzerbredes@mailbox.org>2021-04-12 10:28:04 +0200
commit457a2117706cdaee34f894e67c89da7bf29f6143 (patch)
treee3a1a519c5360abcca95732500594c92af9af51c /src/drivers/pic.c
parent39713a3736145483dd3310c3605f940ca34f05c3 (diff)
Refactoring
Diffstat (limited to 'src/drivers/pic.c')
-rw-r--r--src/drivers/pic.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/drivers/pic.c b/src/drivers/pic.c
new file mode 100644
index 0000000..d509e1d
--- /dev/null
+++ b/src/drivers/pic.c
@@ -0,0 +1,28 @@
+#include "pic.h"
+#include "core/asm.h"
+#include "core/mem.h"
+#include "core/syscall.h"
+
+void pic_init(){
+
+ // ICW1: Initialisation
+ outbj(0x20,0x11); // Master
+ outbj(0xA0,0x11); // Slave
+
+ // ICW2: Map IRQ index to entry into the IDT
+ outbj(0x21,0x20); // Start interrupt at offset 0x20 in IDT (index 32)
+ outbj(0xA1,0x70); // Start interrupt at offset 0x50 in IDT (index 80)
+
+ // ICW3: Indicate the connection between master and slave
+ outbj(0x21,0x02); // Slave connected to pin 2
+ outbj(0xA1,0x01); // Indicate pin id to the slave (2-1)
+
+ // ICW4: Operating mode
+ outbj(0x21,0x01); // Default operating mode
+ outbj(0xA1,0x01); // Default operating mode
+
+ // OCW: Masking
+ outbj(0x21,0b11111100);
+}
+
+