Speedups to physical memory allocation, fixed a stupid error in the
[tpg/acess2.git] / Kernel / arch / x86_64 / start32.asm
index 21e7c40..0abf8eb 100644 (file)
@@ -32,9 +32,16 @@ mboot:
 [section .text]
 [global start]
 start:
+       mov [gMultibootMagic - KERNEL_BASE], eax
+       mov [gMultibootPtr - KERNEL_BASE], ebx
+
        ; Check for Long Mode support
+       mov eax, 0x80000000
+       cpuid
+       cmp eax, 0x80000001     ; Compare the A-register with 0x80000001.
        mov eax, 0x80000001
        cpuid
+    jb .not64bitCapable
        test edx, 1<<29
        jz .not64bitCapable
 
@@ -60,13 +67,6 @@ start:
 
        ; Load GDT
        lgdt [gGDTPtr - KERNEL_BASE]
-       mov ax, 0x10
-       mov ss, ax
-       mov ds, ax
-       mov es, ax
-       mov fs, ax
-       mov gs, ax
-
        jmp 0x08:start64 - KERNEL_BASE
 
 .not64bitCapable:
@@ -88,17 +88,23 @@ start:
 [global gGDT]
 gGDT:
        dd      0,0
-       dd      0x00000000, 0x00209800  ; 0x08: 64-bit Code
-       dd      0x00000000, 0x00009000  ; 0x10: 64-bit Data
-       dd      0x00000000, 0x00209800  ; 0x18: 64-bit User Code
-       dd      0x00000000, 0x00209000  ; 0x20: 64-bit User Data
-       dd      0x00000000, 0x00209800  ; 0x38: 32-bit User Code
-       dd      0x00000000, 0x00209000  ; 0x30: 32-bit User Data
-       times MAX_CPUS  dd      0, 0, 0, 0      ; 0x38+16*n: TSS 0
+       dd      0x00000000, 0x00209A00  ; 0x08: 64-bit Code
+       dd      0x00000000, 0x00009200  ; 0x10: 64-bit Data
+       dd      0x00000000, 0x0020FA00  ; 0x18: 64-bit User Code
+       dd      0x00000000, 0x0000F200  ; 0x20: 64-bit User Data
+       dd      0x00000000, 0x0040FA00  ; 0x38: 32-bit User Code
+       dd      0x00000000, 0x0040F200  ; 0x30: 32-bit User Data
+       times MAX_CPUS  dd      0, 0x00008900, 0, 0     ; 0x38+16*n: TSS 0
 gGDTPtr:
        dw      $-gGDT-1
        dd      gGDT-KERNEL_BASE
        dd      0
+[global gMultibootPtr]
+[global gMultibootMagic]
+gMultibootMagic:
+       dd      0
+gMultibootPtr:
+       dd      0
 
 [section .padata]
 [global gInitialPML4]
@@ -106,9 +112,11 @@ gInitialPML4:      ; Covers 256 TiB (Full 48-bit Virtual Address Space)
        dd      gInitialPDP - KERNEL_BASE + 3, 0        ; Identity Map Low 4Mb
        times 256-1 dq  0
        dd      gInitialPDP - KERNEL_BASE + 3, 0        ; Map Low 4Mb to kernel base
-       times 256-1-2 dq 0
+       times 256-1-4 dq 0
        dd      gInitialPML4 - KERNEL_BASE + 3, 0       ; Fractal Mapping
        dq      0
+       dq      0
+       dq      0
 
 gInitialPDP:   ; Covers 512 GiB
        dd      gInitialPD - KERNEL_BASE + 3, 0

UCC git Repository :: git.ucc.asn.au