]> git.dujemihanovic.xyz Git - nameless-os.git/commitdiff
Merge branch 'elf' into mm
authorDuje Mihanović <duje.mihanovic@skole.hr>
Mon, 27 Jun 2022 19:29:50 +0000 (21:29 +0200)
committerDuje Mihanović <duje.mihanovic@skole.hr>
Mon, 27 Jun 2022 19:29:50 +0000 (21:29 +0200)
1  2 
boot/x86/stage3/loader.s

diff --combined boot/x86/stage3/loader.s
index 747905d704ef8bc0ae3c50921d996c3bc5ac000e,87598f4b0c93a6d95cbb1aa21dcf6a87723ff1da..bd2fb9b912fa31d65b95f25dbc093e0264527f21
@@@ -1,7 -1,9 +1,9 @@@
  bits 16
  cpu 686
- org 0x1800
  
+ extern run_kernel
+ section .text
  %include "../fat32/fat32-structs.s"
  
  %macro print 1
        pop si
  %endmacro
  
+ extern __STACK_BOTTOM__
+ global _start
  _start:
+       mov sp, __STACK_BOTTOM__
        mov [BOOT_DRIVE], dl
        call enable_unreal
        print begin
        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
        print kernel_loaded
        
        call get_e820_map
+       mov ebx, ecx
+       mov eax, 24
+       mul ecx
+       add eax, 20
+       sub sp, ax
  
        cli
        lgdt [gdt]
@@@ -147,7 -160,6 +160,6 @@@ memcpy
        pop esi
        ret
  
  %include "unreal.s"
  %include "a20.s"
  %include "../fat32/fat32.s"
  %include "print.s"
  %include "e820.s"
  
- in_protected:
  bits 32
+ section .text
+ in_protected:
        mov ax, 0x10
        mov ds, ax
        mov es, ax
        mov fs, ax
        mov gs, ax
  
-       call load_paging_structs
-       call enable_paging
+       push dword [KERNEL_SIZE]
+       push 0x100000
+       push ebx
+       push edi
+       call run_kernel
+ section .bss
+ KERNEL_SIZE: resd 1
  
-       jmp 0x8:0xc0000000
-       nop
+ 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
@@@ -178,7 -196,7 +196,7 @@@ crit_err: db "A critical error occurred
  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
@@@ -192,5 -210,3 +210,5 @@@ ss_s: db "SS: ", 
  space: db " ", 0
  hex_delm: db "0x", 0
  newline: db 0xd, 0xa, 0
 +
 +%include "paging.s"