blob: 28058890a3148e5f0cf7642feb5db6e44b3fc4ba (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#include "idt.h"
#include "gdt.h"
#include <stdint.h>
static Gate_Descriptor_t idt[256];
extern GDTR_t idtr;
void get_idtr() {
idtr.offset = (uintptr_t)&idt[0];
idtr.size = sizeof(Gate_Descriptor_t) * 256 - 1;
for (uint8_t vec = 0; vec < 32; vec++) {
make_gate(stub_table[vec], 0x8E, vec);
}
}
void make_gate(uint32_t offset, uint8_t attrs, uint8_t vec) {
Gate_Descriptor_t *descriptor = &idt[vec];
descriptor->offset_low = offset & 0xFFFF;
descriptor->attrs = (0b1000 << 4) | attrs;
descriptor->offset_high = offset >> 16, descriptor->segment_selector = 0x08;
descriptor->reserved = 0;
}
|