From 086bac07ed7577afbb28e7636e64a6ee747d80b1 Mon Sep 17 00:00:00 2001 From: Ruslan Isaev Date: Tue, 18 Mar 2025 15:45:51 +0300 Subject: [PATCH] gdt: make gdt setup run before kmain --- src/boot.asm | 16 ++++++++++++++++ src/gdt.asm | 30 ++++++++++++++++++++++++++++++ src/kernel.c | 2 +- 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 src/gdt.asm diff --git a/src/boot.asm b/src/boot.asm index a16f266..6ae6fa3 100644 --- a/src/boot.asm +++ b/src/boot.asm @@ -6,11 +6,27 @@ section .text dd 0x00 dd - (0x1BADB002+0x00) +section .gdt +%include "src/gdt.asm" + +section .text global start extern kmain ; this function is gonna be located in our c code(kernel.c) start: cli ;clears the interrupts + + lgdt [gdt] + mov ax, DATA_SEG + mov ds, ax + mov es, ax + mov fs, ax + mov gs, ax + mov ss, ax + jmp CODE_SEG:.huita + +.huita: + push ebx call kmain ;send processor to continue execution from the kamin funtion in c code diff --git a/src/gdt.asm b/src/gdt.asm new file mode 100644 index 0000000..e2ffbb9 --- /dev/null +++ b/src/gdt.asm @@ -0,0 +1,30 @@ +gdt_start: + ; null entry + dd 0 + dd 0 + +gdt_code: + dw 0xffff ; 00-15 limit + dw 0 ; 16-31 base + db 0 ; 32-39 base + db 10011010b ; 40-47 access + db 11001111b ; 48-55 limit (48-51) and flags (52-55) + db 0 ; 56-63 base + +gdt_data: + dw 0xffff ; 00-15 limit + dw 0 ; 16-31 base + db 0 ; 32-39 base + db 10010010b ; 40-47 access + db 11001111b ; 48-55 limit (48-51) and flags (52-55) + db 0 ; 56-63 base + +gdt_end: + + +gdt: + dw gdt_end - gdt_start - 1 ; length + dd gdt_start ; address + +CODE_SEG equ gdt_code - gdt_start +DATA_SEG equ gdt_data - gdt_start diff --git a/src/kernel.c b/src/kernel.c index f161a37..0e43166 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -12,7 +12,7 @@ void kmain() { terminal_initialize(); printf("KatauOS booting up\n"); - gdt_install(); +// gdt_install(); isr_install(); printf("Kernel init sequence completed\n");