diff options
Diffstat (limited to 'src/kernel/gen_gdt.c')
| -rw-r--r-- | src/kernel/gen_gdt.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/kernel/gen_gdt.c b/src/kernel/gen_gdt.c index 05eedaa..ccfb461 100644 --- a/src/kernel/gen_gdt.c +++ b/src/kernel/gen_gdt.c @@ -1,11 +1,19 @@ #include "gdt.h" +#include <stdint.h> GDT_t *table = 0x0; -GDTR_t gdtr = {0, 0}; +extern GDTR_t gdtr; void get_gdtr() { - *table = (GDT_t){make_descriptor(0, 0, 0), - make_descriptor(0x0000, 0xFFFFF, make_code(0, 0, 1)), - make_descriptor(0x0000, 0xFFFFF, make_data(0, 0, 1))}; + uint32_t base = 0x0000; + + *table = (GDT_t){ + // NULL + make_descriptor(0, 0, 0), + // Code segment, read + make_descriptor(base, 0x8FFFF, make_code(0, 0, 1)), + // Data segment, read write + make_descriptor(base, 0x8FFFF, make_data(0, 0, 1)), + }; gdtr.size = sizeof(Segment_Descriptor_t) * 3 - 1; - gdtr.offset = 0x0; + gdtr.offset = base; } |
