X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/0264889df8dd6775d765416a13804bc4ed8cc3f7..fedfd71f5492177a7c7d7fd2bd1529a832106395:/lunaix-os/arch/x86/gdt.c?ds=sidebyside diff --git a/lunaix-os/arch/x86/gdt.c b/lunaix-os/arch/x86/gdt.c new file mode 100644 index 0000000..a59f3d2 --- /dev/null +++ b/lunaix-os/arch/x86/gdt.c @@ -0,0 +1,22 @@ +#include +#include + +#define GDT_ENTRY 5 + +uint64_t _gdt[GDT_ENTRY]; +uint16_t _gdt_limit = sizeof(_gdt); + +void _set_gdt_entry(uint32_t index, uint32_t base, uint32_t limit, uint32_t flags) { + _gdt[index] = SEG_BASE_H(base) | flags | SEG_LIM_H(limit) | SEG_BASE_M(base); + _gdt[index] <<= 32; + _gdt[index] |= SEG_BASE_L(base) | SEG_LIM_L(limit); +} +// +void +_init_gdt() { + _set_gdt_entry(0, 0, 0, 0); + _set_gdt_entry(1, 0, 0xfffff, SEG_R0_CODE); + _set_gdt_entry(2, 0, 0xfffff, SEG_R0_DATA); + _set_gdt_entry(3, 0, 0xfffff, SEG_R3_CODE); + _set_gdt_entry(4, 0, 0xfffff, SEG_R3_DATA); +} \ No newline at end of file