diff options
| author | EmulatedSeasons <89668582+EmulatedSeasons@users.noreply.github.com> | 2024-05-10 01:44:59 -0400 |
|---|---|---|
| committer | EmulatedSeasons <89668582+EmulatedSeasons@users.noreply.github.com> | 2024-05-10 01:44:59 -0400 |
| commit | 975a9ec96e282e437ccc1bdf1e660dcbf4542791 (patch) | |
| tree | 29bdbd7769d59df82c6bace1d653c8be310c2d08 /kernel/arch/x86_64/gdt.cpp | |
| parent | abaab98bd757cd0818cfcddc983eee25ab7672ed (diff) | |
Added GDT and basic IDT as well as a bitmap drawing function
Diffstat (limited to 'kernel/arch/x86_64/gdt.cpp')
| -rw-r--r-- | kernel/arch/x86_64/gdt.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/kernel/arch/x86_64/gdt.cpp b/kernel/arch/x86_64/gdt.cpp new file mode 100644 index 0000000..19ec98e --- /dev/null +++ b/kernel/arch/x86_64/gdt.cpp @@ -0,0 +1,34 @@ +#include <stdint.h>
+#include "gdt.h"
+
+void gdt_entry(SegDesc* seg, uint32_t base, uint32_t limit, uint8_t access, uint8_t flags) {
+ // setting each part of the base by masking the part being set and shifting it to the right position
+ seg->base_low = base & 0xFFFF;
+ seg->base_mid = (base & 0xFF0000) >> 16;
+ seg->base_high = (base & 0xFF000000) >> 24;
+
+ seg->limit_low = limit & 0xFFFF;
+ seg->flag_limit_high = (limit & 0xF0000) >> 16;
+
+ // shifts flags to the right position and ors it with limit
+ seg->flag_limit_high |= (flags & 0xF) << 4;
+
+ seg->access = access;
+}
+
+void gdt_tss_entry(TssSegDesc* seg, uint64_t base, uint32_t limit, uint8_t access, uint8_t flags) {
+ // setting each part of the base by masking the part being set and shifting it to the right position
+ seg->base1 = base & 0xFFFF;
+ seg->base2 = (base & 0xFF0000) >> 16;
+ seg->base3 = (base & 0xFF000000) >> 24;
+ seg->base4 = (base & 0xFFFFFFFF00000000) >> 32;
+
+ seg->limit_low = limit & 0xFFFF;
+ seg->flag_limit_high = (limit & 0xF0000) >> 16;
+
+ // shifts flags to the right position and ors it with limit
+ seg->flag_limit_high |= (flags & 0xF) << 4;
+
+ seg->access = access;
+ seg->reserved = 0;
+}
\ No newline at end of file |
