]> git.ameliathe1st.gay Git - voyage-au-centre-des-fichiers.git/commitdiff
Refactored boot.s a bit
authorAmelia Coutard <eliottulio.coutard@gmail.com>
Thu, 12 May 2022 10:33:10 +0000 (12:33 +0200)
committerAmelia Coutard <eliottulio.coutard@gmail.com>
Thu, 12 May 2022 10:33:10 +0000 (12:33 +0200)
src/boot.S

index f113d375153acc52f5eac5fa1a29e4ef7182b6e1..c156d36b9e5ce3ee2372c5b040bd892a377f8dcc 100644 (file)
@@ -85,6 +85,9 @@ TSS:
 TSS_END:
 .set TSS_SIZE, TSS_END - TSS
 .align 0x1000
+PML4T: .quad PDPT_low - KERNEL_VMA + 3
+       .skip 0x1000 - 16
+       .quad PDPT_high - KERNEL_VMA + 3
 PDPT_low:  .quad 0x83
            .quad 0x83 + 1024 * 1024 * 1024
            .skip 0x1000 - 16
@@ -94,7 +97,6 @@ PDPT_high: .skip 0x1000 - 16
 
 .section .bss
 .align 0x1000
-PML4T: .skip 0x1000
 phys_mem_map: .skip 0x1000 * 128 - 8
 .align 16
 stack_bottom:
@@ -103,18 +105,11 @@ stack_top:
 
 .section .bootstrap_text
 .code32
-.globl _start
-_start:
-       cli
-       mov $stack_top - KERNEL_VMA, %esp
 
-       # Save multiboot info:
-       push $0   # /
-       push %eax # \ magic
-       push $0   # /
-       push %ebx # \ info structure
+halt:  hlt
+       jmp halt
 
-       # Check if cpuid is supported:
+check_cpuid_support:
        pushfl
        pop %eax
        mov %eax, %ecx
@@ -126,29 +121,37 @@ _start:
        push %ecx
        popfl
        xor %ecx, %eax
-       jnz .has_cpuid
-       1:      hlt
-               jmp 1b
-       .has_cpuid:
+       jz halt # No cpuid.
+       ret
 
-       # Check is long mode is supported:
+check_long_mode_support:
        mov $0x80000000, %eax
        cpuid
        cmp $0x80000001, %eax
-       jb .no_long_mode
+       jb halt # No ability to check for long mode.
        mov $0x80000001, %eax
        cpuid
        # Long mode:
        test $1 << 29, %edx
-       jz .no_long_mode
+       jz halt # No long mode.
        # 1GiB pages:
        test $1 << 26, %edx
-       jz .no_long_mode
-       jmp .has_long_mode
-       .no_long_mode:
-       1:      hlt
-               jmp 1b
-       .has_long_mode:
+       jz halt # No 1GiB pages.
+       ret
+
+.globl _start
+_start:
+       cli
+       mov $stack_top - KERNEL_VMA, %esp
+
+       # Save multiboot info:
+       push $0   # /
+       push %eax # \ magic
+       push $0   # /
+       push %ebx # \ info structure
+
+       call check_cpuid_support
+       call check_long_mode_support
 
        # Disable 32-bit paging:
        mov %cr0, %eax
@@ -158,10 +161,6 @@ _start:
        # Setup 64-bit paging:
        mov $PML4T - KERNEL_VMA, %eax
        mov %eax, %cr3
-       mov $PDPT_low - KERNEL_VMA + 3, %eax
-       mov %eax, PML4T - KERNEL_VMA +   0 * 8
-       mov $PDPT_high - KERNEL_VMA + 3, %eax
-       mov %eax, PML4T - KERNEL_VMA + 511 * 8
 
        # Enable PAE paging:
        mov %cr4, %eax
@@ -245,5 +244,4 @@ _start:
        call _fini
 
        cli
-1:     hlt
-       jmp 1b
+       jmp halt