X-Git-Url: http://git.dujemihanovic.xyz/%7B%7B%20%24image.RelPermalink%20%7D%7D?a=blobdiff_plain;f=boot%2Fx86%2Fstage3%2Floader.s;h=87598f4b0c93a6d95cbb1aa21dcf6a87723ff1da;hb=da4e7bf5dd2b9448b638255a20ee503b0641e495;hp=9ed71021c5d42b291033df366f9231f3b8522b44;hpb=d895d72c4e8625b435add9067fe8f7298de2d301;p=nameless-os.git diff --git a/boot/x86/stage3/loader.s b/boot/x86/stage3/loader.s index 9ed7102..87598f4 100644 --- a/boot/x86/stage3/loader.s +++ b/boot/x86/stage3/loader.s @@ -1,9 +1,7 @@ bits 16 cpu 686 -extern enable_paging -extern map_range -extern set_up_page_directory +extern run_kernel section .text %include "../fat32/fat32-structs.s" @@ -63,9 +61,11 @@ _start: pop si pop cx print kernel_found + mov eax, [es:di+dir_entry.filesize] + mov [KERNEL_SIZE], eax mov ax, [es:di+dir_entry.firstclushi] shl eax, 16 - mov ax, [es:di+(dir_entry.firstcluslo)] + mov ax, [es:di+dir_entry.firstcluslo] call print_dword mov edi, 0x100000 print kernel_loading @@ -177,47 +177,18 @@ in_protected: mov fs, ax mov gs, ax - push dword 0 - push 0xc0003000 - push 0xc0000000 - push 0x103000 + push dword [KERNEL_SIZE] push 0x100000 - call map_range - cmp eax, 0 - jne .error - add esp, 20 - push dword 2 - push 0xc0009000 - push 0xc0003000 - push 0x109000 - push 0x103000 - call map_range - cmp eax, 0 - jne .error - add esp, 20 - push dword 2 - push 0x100000 - push dword 0 - push 0x100000 - push dword 0 - call map_range - cmp eax, 0 - jne .error - add esp, 20 - - call set_up_page_directory - call enable_paging - - jmp 0xc0000000 - nop -.error: - mov dword [0xb8000], 0xcf28cf3a - hlt - jmp $-1 + push ebx + push edi + call run_kernel + +section .bss +KERNEL_SIZE: resd 1 section .rodata -kernel_name: db "KERNEL BIN" +kernel_name: db "KERNEL ELF" begin: db "Nameless Bootloader revision ", GIT_REVISION, 0xd, 0xa, 0 a20_enabled: db "A20 has been enabled", 0xd, 0xa, "Searching for kernel...", 0xd, 0xa, 0 a20_fail: db "Failed to enable A20, giving up!", 0xd, 0xa, 0 @@ -225,7 +196,7 @@ crit_err: db "A critical error occurred, dumping registers now: ", 0xd, 0xa, 0 kernel_found: db "Found kernel at cluster ", 0 kernel_loading: db 0xd, 0xa, "Loading kernel...", 0xd, 0xa, 0 kernel_loaded: db "Kernel successfully loaded.", 0xd, 0xa, "Setting up kernel environment and running kernel...", 0xd, 0xa, 0 -missing_kernel: db "Could not find KERNEL.BIN", 0xd, 0xa, 0 +missing_kernel: db "Could not find KERNEL.ELF", 0xd, 0xa, 0 eax_s: db "EAX: ", 0 ebx_s: db "EBX: ", 0 ecx_s: db "ECX: ", 0