blob: f3fea4ff5b211ae3ad45cd326a9138b0e7caf98a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#include "idt.h"
#include "gdt.h"
#include <stdint.h>
IDT_t idt = (IDT_t)0x7fffe;
extern GDTR_t idtr;
void get_idtr() {
int base = 0x7fffe;
uint8_t code_seg = (0b1000 << 3) | 0b000;
// idtr.size = sizeof(Gate_Descriptor_t) * n - 1;
idtr.size = 0;
idtr.offset = base;
}
Gate_Descriptor_t make_gate(uint32_t offset, uint8_t segment_selector,
uint8_t type) {
Gate_Descriptor_t ret = (Gate_Descriptor_t){
.offset_low = offset,
.reserved = 0,
.attrs = (0b1000 << 4) | type,
.offset_high = offset >> 16,
.segment_selector = segment_selector,
};
return ret;
}
|