diff --git a/x86_64/disk.asm b/x86_64/disk.asm index 6376521ed2eaa19eb5218cc27439a23fed7aa740..fce7e9436a8a1c5edfb6afd8f4a7a10000245239 100644 --- a/x86_64/disk.asm +++ b/x86_64/disk.asm @@ -11,7 +11,18 @@ startup_start: align 512, db 0 startup_end: -filesystem: - %defstr FILESYSTEM_STR %[FILESYSTEM] - incbin FILESYSTEM_STR +%ifdef KERNEL + kernel_file: + %defstr KERNEL_STR %[KERNEL] + incbin KERNEL_STR + .end: align 512, db 0 +%endif + +%ifdef FILESYSTEM + filesystem: + %defstr FILESYSTEM_STR %[FILESYSTEM] + incbin FILESYSTEM_STR + .end: + align 512, db 0 +%endif diff --git a/x86_64/startup-common.asm b/x86_64/startup-common.asm index 2b9bd923d06cec4358989942cc57480073bed775..fb29d7fe84fb06aee6740a0461c24256cf9c4036 100644 --- a/x86_64/startup-common.asm +++ b/x86_64/startup-common.asm @@ -10,8 +10,25 @@ startup: or al, 2 out 0x92, al - call redoxfs + %ifdef KERNEL + mov edi, [kernel_base] + mov ecx, (kernel_file.end - kernel_file) + mov [kernel_size], ecx + mov eax, (kernel_file - boot)/512 + add ecx, 511 + shr ecx, 9 + call load_extent + + jmp .loaded_kernel + %endif + + %ifdef FILESYSTEM + call redoxfs + jmp .loaded_kernel + %endif + +.loaded_kernel: call memory_map call vesa @@ -113,7 +130,9 @@ load_extent: %include "memory_map.asm" %include "vesa.asm" %include "initialize.asm" -%include "redoxfs.asm" +%ifdef FILESYSTEM + %include "redoxfs.asm" +%endif init_fpu_msg: db "Init FPU",13,10,0 init_sse_msg: db "Init SSE",13,10,0