summaryrefslogtreecommitdiff
path: root/stage2/main.asm
diff options
context:
space:
mode:
authorLizzy Fleckenstein <lizzy@vlhl.dev>2024-01-09 22:13:20 +0100
committerLizzy Fleckenstein <lizzy@vlhl.dev>2024-01-09 22:13:20 +0100
commitd9b8af151fb92fa89042dfdeaa60c854a3e8af31 (patch)
treeb30e7176d5612c1e8a2e4035e26925c7a6f0b77d /stage2/main.asm
parent697634653c2253239ab983fe2e28010c431e0915 (diff)
downloadcuddles-d9b8af151fb92fa89042dfdeaa60c854a3e8af31.tar.xz
stage2: move kernel loading code to separate file
Diffstat (limited to 'stage2/main.asm')
-rw-r--r--stage2/main.asm67
1 files changed, 3 insertions, 64 deletions
diff --git a/stage2/main.asm b/stage2/main.asm
index 5027546..fae8d5a 100644
--- a/stage2/main.asm
+++ b/stage2/main.asm
@@ -35,6 +35,8 @@ setup:
[bits 64]
+%include "stage2/elf.asm"
+
long_mode:
; setup segment registers
mov ax, 0x0010
@@ -44,69 +46,6 @@ long_mode:
mov gs, ax
mov ss, ax
- mov eax, [kernel_elf]
- cmp eax, [.elf]
- jne .fail
-
- mov r8, [kernel_elf+32] ; program header pos
- add r8, kernel_elf
-
- movzx rbx, word[kernel_elf+54] ; program header size
- movzx rdx, word[kernel_elf+56] ; num of program headers
-
-.header:
- cmp rdx, 0
- je .start
-
- mov edi, [r8] ; type
- cmp edi, 0
- je .next
-
- cmp edi, 1
- je .load
-
- cmp edi, 2
- je .fail
-
- cmp edi, 3
- je .fail
-
- jmp .next
-
-.load:
- ; zero out the segment
- mov al, 0
- mov rdi, [r8+16]
- mov rcx, [r8+40]
- rep stosb
-
- ; load from file
- mov rdi, [r8+16]
- mov rsi, [r8+8]
- add rsi, kernel_elf
- mov rcx, [r8+32]
- rep movsb
-
-.next:
-
- add r8, rbx
- dec rdx
- jmp .header
-
-.start:
- ; more stack space
- mov rsp, 0x80000
- xor rbp, rbp
-
- ; ELF entry point
- mov rax, [kernel_elf+24]
- call rax
-
-.fail:
- cli
- hlt
- jmp $
-
-.elf: db 0x7f, "ELF"
+ call load_kernel_elf
kernel_elf: