diff options
author | Tyler Murphy <=> | 2023-07-17 19:34:52 -0400 |
---|---|---|
committer | Tyler Murphy <=> | 2023-07-17 19:34:52 -0400 |
commit | 7a912d1b668ab86ffe088eca3ac7e6f78a04a0c5 (patch) | |
tree | 4e86ff20e73171285156631db043e12aaf63bf04 /kernel/src/arch/i686/start.asm | |
parent | paging (diff) | |
download | finix-7a912d1b668ab86ffe088eca3ac7e6f78a04a0c5.tar.gz finix-7a912d1b668ab86ffe088eca3ac7e6f78a04a0c5.tar.bz2 finix-7a912d1b668ab86ffe088eca3ac7e6f78a04a0c5.zip |
refactoring
Diffstat (limited to 'kernel/src/arch/i686/start.asm')
-rw-r--r-- | kernel/src/arch/i686/start.asm | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/kernel/src/arch/i686/start.asm b/kernel/src/arch/i686/start.asm new file mode 100644 index 0000000..2151b51 --- /dev/null +++ b/kernel/src/arch/i686/start.asm @@ -0,0 +1,82 @@ +global start +bits 32 + + +; create the multiboot header +section .bootstrap.data +align 8 +mb_start: +dd 0xe85250d6 +dd 0 +dd mb_end - mb_start +dd -(0xe85250d6 + (mb_end - mb_start)) +dw 0 +dw 0 +dd 8 +mb_end: + + +; create the stack for bootstrapping +section .bootstrap.stack +align 16 +bootstrap_stack_start: +resb 1024 ; 1 KiB +bootstrap_stack_end: + + +; create the stack for the kernel +section .stack +align 16 +stack_start: +resb 16384 ; 16 KiB +stack_end: + + +; load the kernel into the higher half +section .bootstrap.text +align 8 +start: + ; init bootstrap stack + mov esp, bootstrap_stack_end + mov ebp, bootstrap_stack_end + + ; load kernel into higher half and init paging + extern paging_init + call paging_init + + jmp near load_kernel + +; initalize kernel after it has been loaded in higher half +section .text +align 8 +load_kernel: + ; init stack + mov esp, stack_end + mov ebp, stack_end + + ; load global descripter table + extern load_gdt + call load_gdt + + ; unmap kernel at page 0 + extern paging_finish + call paging_finish + + ; initalize the FPU + finit + + ; push multiboot header + extern KERNEL_MAPPING + add ebx, KERNEL_MAPPING + push ebx + + ; start kernel + sti + call kernel_main + extern kernel_main + + ; hlt forever if kernel quits (it should never) + cli +halt: + hlt + jmp halt |