diff options
| author | EmulatedSeasons <89668582+EmulatedSeasons@users.noreply.github.com> | 2025-01-20 18:23:02 -0500 |
|---|---|---|
| committer | EmulatedSeasons <89668582+EmulatedSeasons@users.noreply.github.com> | 2025-01-20 18:23:02 -0500 |
| commit | 43d92e30ad3743b8d0ce6593c17892fe1a78a1e8 (patch) | |
| tree | 313cc6dbdd293b23b3f4354147998fadffbb78d5 /kernel/arch/x86_64/arch_init.cpp | |
| parent | 2243a1ade8f4a84dc7ffc358c0e9b1350dfbd533 (diff) | |
moved limine.cpp stuff to kernel.cpp (and fixed framebuffer pixel drawing)
Diffstat (limited to 'kernel/arch/x86_64/arch_init.cpp')
| -rw-r--r-- | kernel/arch/x86_64/arch_init.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/kernel/arch/x86_64/arch_init.cpp b/kernel/arch/x86_64/arch_init.cpp new file mode 100644 index 0000000..eb0e442 --- /dev/null +++ b/kernel/arch/x86_64/arch_init.cpp @@ -0,0 +1,19 @@ +#include "gdt.h" +#include "idt.h" + +void arch_init() { + // setup gdt + SegDesc segs[5]; + GDTR gdtr{sizeof(struct SegDesc) * 5 - 1, (uint64_t)&segs}; + + gdt_entry(&segs[0], 0, 0, 0, 0); // null desc + gdt_entry(&segs[1], 0, 0xFFFFF, 0x9A, 0xA); // kcode + gdt_entry(&segs[2], 0, 0xFFFFF, 0x92, 0xA); // kdata + gdt_entry(&segs[3], 0, 0xFFFFF, 0xFA, 0xA); // ucode + gdt_entry(&segs[4], 0, 0xFFFFF, 0xF2, 0xA); // udata + + load_gdt(&gdtr); + reload_segments(); + + setup_idt(); +}
\ No newline at end of file |
