From 132d3236bb884433bf94e961f6d32264e0334aec Mon Sep 17 00:00:00 2001 From: ornitorrincos Date: Tue, 18 Aug 2026 12:15:05 +0200 Subject: --- kernel/idt.h | 287 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 287 insertions(+) create mode 100644 kernel/idt.h (limited to 'kernel/idt.h') 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 +#include + +#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); + + -- cgit v1.2.3-70-g09d2