aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/idt.h
diff options
context:
space:
mode:
authorGravatar ornitorrincos 2026-08-18 12:15:05 +0200
committerGravatar ornitorrincos 2026-08-18 12:15:05 +0200
commit132d3236bb884433bf94e961f6d32264e0334aec (patch)
tree06638976b06f019ea4037175ff228f8271057c44 /kernel/idt.h
Diffstat (limited to '')
-rw-r--r--kernel/idt.h287
1 files changed, 287 insertions, 0 deletions
diff --git a/kernel/idt.h b/kernel/idt.h
new file mode 100644
index 0000000..74ae7f9
--- /dev/null
+++ b/kernel/idt.h
@@ -0,0 +1,287 @@
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#define INT_CALL 0xC
+#define INT_INT 0xE
+#define INT_TRAP 0xF
+
+extern void vector0();
+extern void vector1();
+extern void vector2();
+extern void vector3();
+extern void vector4();
+extern void vector5();
+extern void vector6();
+extern void vector7();
+extern void vector8();
+extern void vector9();
+extern void vector10();
+extern void vector11();
+extern void vector12();
+extern void vector13();
+extern void vector14();
+extern void vector15();
+extern void vector16();
+extern void vector17();
+extern void vector18();
+extern void vector19();
+extern void vector20();
+extern void vector21();
+extern void vector22();
+extern void vector23();
+extern void vector24();
+extern void vector25();
+extern void vector26();
+extern void vector27();
+extern void vector28();
+extern void vector29();
+extern void vector30();
+extern void vector31();
+extern void vector32();
+extern void vector33();
+extern void vector34();
+extern void vector35();
+extern void vector36();
+extern void vector37();
+extern void vector38();
+extern void vector39();
+extern void vector40();
+extern void vector41();
+extern void vector42();
+extern void vector43();
+extern void vector44();
+extern void vector45();
+extern void vector46();
+extern void vector47();
+extern void vector48();
+extern void vector49();
+extern void vector50();
+extern void vector51();
+extern void vector52();
+extern void vector53();
+extern void vector54();
+extern void vector55();
+extern void vector56();
+extern void vector57();
+extern void vector58();
+extern void vector59();
+extern void vector60();
+extern void vector61();
+extern void vector62();
+extern void vector63();
+extern void vector64();
+extern void vector65();
+extern void vector66();
+extern void vector67();
+extern void vector68();
+extern void vector69();
+extern void vector70();
+extern void vector71();
+extern void vector72();
+extern void vector73();
+extern void vector74();
+extern void vector75();
+extern void vector76();
+extern void vector77();
+extern void vector78();
+extern void vector79();
+extern void vector80();
+extern void vector81();
+extern void vector82();
+extern void vector83();
+extern void vector84();
+extern void vector85();
+extern void vector86();
+extern void vector87();
+extern void vector88();
+extern void vector89();
+extern void vector90();
+extern void vector91();
+extern void vector92();
+extern void vector93();
+extern void vector94();
+extern void vector95();
+extern void vector96();
+extern void vector97();
+extern void vector98();
+extern void vector99();
+extern void vector100();
+extern void vector101();
+extern void vector102();
+extern void vector103();
+extern void vector104();
+extern void vector105();
+extern void vector106();
+extern void vector107();
+extern void vector108();
+extern void vector109();
+extern void vector110();
+extern void vector111();
+extern void vector112();
+extern void vector113();
+extern void vector114();
+extern void vector115();
+extern void vector116();
+extern void vector117();
+extern void vector118();
+extern void vector119();
+extern void vector120();
+extern void vector121();
+extern void vector122();
+extern void vector123();
+extern void vector124();
+extern void vector125();
+extern void vector126();
+extern void vector127();
+extern void vector128();
+extern void vector129();
+extern void vector130();
+extern void vector131();
+extern void vector132();
+extern void vector133();
+extern void vector134();
+extern void vector135();
+extern void vector136();
+extern void vector137();
+extern void vector138();
+extern void vector139();
+extern void vector140();
+extern void vector141();
+extern void vector142();
+extern void vector143();
+extern void vector144();
+extern void vector145();
+extern void vector146();
+extern void vector147();
+extern void vector148();
+extern void vector149();
+extern void vector150();
+extern void vector151();
+extern void vector152();
+extern void vector153();
+extern void vector154();
+extern void vector155();
+extern void vector156();
+extern void vector157();
+extern void vector158();
+extern void vector159();
+extern void vector160();
+extern void vector161();
+extern void vector162();
+extern void vector163();
+extern void vector164();
+extern void vector165();
+extern void vector166();
+extern void vector167();
+extern void vector168();
+extern void vector169();
+extern void vector170();
+extern void vector171();
+extern void vector172();
+extern void vector173();
+extern void vector174();
+extern void vector175();
+extern void vector176();
+extern void vector177();
+extern void vector178();
+extern void vector179();
+extern void vector180();
+extern void vector181();
+extern void vector182();
+extern void vector183();
+extern void vector184();
+extern void vector185();
+extern void vector186();
+extern void vector187();
+extern void vector188();
+extern void vector189();
+extern void vector190();
+extern void vector191();
+extern void vector192();
+extern void vector193();
+extern void vector194();
+extern void vector195();
+extern void vector196();
+extern void vector197();
+extern void vector198();
+extern void vector199();
+extern void vector200();
+extern void vector201();
+extern void vector202();
+extern void vector203();
+extern void vector204();
+extern void vector205();
+extern void vector206();
+extern void vector207();
+extern void vector208();
+extern void vector209();
+extern void vector210();
+extern void vector211();
+extern void vector212();
+extern void vector213();
+extern void vector214();
+extern void vector215();
+extern void vector216();
+extern void vector217();
+extern void vector218();
+extern void vector219();
+extern void vector220();
+extern void vector221();
+extern void vector222();
+extern void vector223();
+extern void vector224();
+extern void vector225();
+extern void vector226();
+extern void vector227();
+extern void vector228();
+extern void vector229();
+extern void vector230();
+extern void vector231();
+extern void vector232();
+extern void vector233();
+extern void vector234();
+extern void vector235();
+extern void vector236();
+extern void vector237();
+extern void vector238();
+extern void vector239();
+extern void vector240();
+extern void vector241();
+extern void vector242();
+extern void vector243();
+extern void vector244();
+extern void vector245();
+extern void vector246();
+extern void vector247();
+extern void vector248();
+extern void vector249();
+extern void vector250();
+extern void vector251();
+extern void vector252();
+extern void vector253();
+extern void vector254();
+extern void vector255();
+
+typedef struct __attribute__((packed))
+{
+ uint16_t size;
+ uint64_t ptr;
+} idt_load;
+
+typedef struct __attribute__((packed))
+{
+ uint64_t target_offset;
+ uint16_t target_selector;
+ uint8_t ist; // 3 bits
+ uint8_t type; // 4 bits
+ uint8_t dpl;
+ bool p;
+} gate;
+
+void init_idt();
+void make_call_gate(gate* g, uint64_t* rg);
+void make_int_gate(gate* g, uint64_t* rg);
+
+