aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/arch/x86/gdt.asm
diff options
context:
space:
mode:
authorEmu <89668582+EmulatedSeasons@users.noreply.github.com>2024-05-31 23:38:46 -0400
committerGitHub <noreply@github.com>2024-05-31 23:38:46 -0400
commit27a44e0d79d1c6e01cd832feb8ad958d5999b5e3 (patch)
tree3759eb02fcad7a609a064080d81b7c6f9dbec4c8 /kernel/arch/x86/gdt.asm
parent639240bbf498195912d8ceb6cb396b89391a5b1b (diff)
parentfd5a1699592ce0afafc42ebf22401596abcdfc28 (diff)
Merge pull request #1 from EmulatedSeasons/limineswitch
Limineswitch
Diffstat (limited to 'kernel/arch/x86/gdt.asm')
-rw-r--r--kernel/arch/x86/gdt.asm35
1 files changed, 35 insertions, 0 deletions
diff --git a/kernel/arch/x86/gdt.asm b/kernel/arch/x86/gdt.asm
new file mode 100644
index 0000000..e3af8bd
--- /dev/null
+++ b/kernel/arch/x86/gdt.asm
@@ -0,0 +1,35 @@
+; gdt.asm
+; GDT is defined here
+
+gdt_start:
+
+gdt_null: ; Null segment
+ dd 0x0
+ dd 0x0
+
+gdt_kcode: ; Kernel code segment. Kernel has seperate segment from users for ring level
+ ; flag and access byte description on osdev wiki
+ dw 0xffff ; low limit
+ dw 0x0 ;low base
+ db 0x0 ; mid base
+ db 10011010b ; order (reversed): ac, rw, dc, ex, s, privl, pr
+ db 11001111b ; flags then limit. order (reversed): 0, 0, size bit, granularity bit
+ db 0x0 ; high limit
+
+gdt_kdata: ; same as gdt_kcode but for the data segment
+ dw 0xffff ;low limit
+ dw 0x0 ;low base
+ db 0x0 ;mid base
+ db 10010010b ; order: same as code seg. changed for data seg
+ db 11001111b ; same as kcode
+ db 0x0 ; high limit
+
+gdt_end:
+
+gdt_descriptor: ; describes the gdt to the lgdt register
+ dw gdt_end - gdt_start - 1
+
+ dd gdt_start
+
+CODE_SEG equ gdt_kcode - gdt_start
+DATA_SEG equ gdt_kdata - gdt_start \ No newline at end of file