aboutsummaryrefslogtreecommitdiffstats
path: root/idt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'idt.cpp')
-rw-r--r--idt.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/idt.cpp b/idt.cpp
index 0dc0f73..c889c14 100644
--- a/idt.cpp
+++ b/idt.cpp
@@ -8,6 +8,8 @@
extern TextOutput& term;
+static constexpr unsigned InterruptCount = 49;
+
static constexpr std::uint8_t TaskGate = 0x5;
static constexpr std::uint8_t IntrGate16 = 0x6;
static constexpr std::uint8_t TrapGate16 = 0x7;
@@ -25,7 +27,7 @@ struct idt_entry_bits {
std::uint32_t offset_high : 16;
} __attribute__((packed));
-static std::array<Callback, 48> callbacks;
+static std::array<Callback, InterruptCount> callbacks;
extern "C"
void interruptGeneralHandler(Registers regs)
@@ -91,10 +93,12 @@ struct StubEntry
static auto idt =
[]<std::size_t... ints>(std::index_sequence<ints...>) {
return std::array<idt_entry_bits, 256> { StubEntry<ints>()... };
- }(std::make_index_sequence<48>{});
+ }(std::make_index_sequence<InterruptCount>{});
void idt_initialize()
{
+ idt[0x28].dpl = 3;
+
auto idtr = reinterpret_cast<std::uint64_t>(idt.data());
idtr <<= 16;
idtr |= idt.size() * sizeof(idt[0]);