Kernel/x86_64 - Fixed Kernel not using COW, cleanup
[tpg/acess2.git] / Kernel / arch / x86 / start.asm
index 0988a77..d504a5d 100644 (file)
@@ -22,7 +22,7 @@ mboot:
        dd MULTIBOOT_HEADER_MAGIC
        dd MULTIBOOT_HEADER_FLAGS
        dd MULTIBOOT_CHECKSUM
-       dd mboot - KERNEL_BASE  ;Location of Multiboot Header
+       dd mboot; - KERNEL_BASE ;Location of Multiboot Header
        
 ; Multiboot 2 Header
 ;mboot2:
@@ -59,6 +59,8 @@ mboot:
 [extern kmain]
 [global start]
 start:
+       ; Just show we're here
+       mov WORD [0xB8000], 0x0741      ; 'A'
        
        ; Set up stack
        mov esp, Kernel_Stack_Top
@@ -68,16 +70,23 @@ start:
        mov cr3, ecx
        
        mov ecx, cr0
-       or      ecx, 0x80010000 ; PG and WP
+       or ecx, 0x80010000      ; PG and WP
        mov cr0, ecx
        
+       mov WORD [0xB8002], 0x0763      ; 'c'
+       mov WORD [0xB8004], 0x0765      ; 'e'
+       
        lea ecx, [.higherHalf]
        jmp ecx
 .higherHalf:
+       
+       mov WORD [0xB8006], 0x0773      ; 's'
+       mov WORD [0xB8008], 0x0773      ; 's'
 
        ; Call the kernel
        push ebx        ; Multiboot Info
        push eax        ; Multiboot Magic Value
+       mov WORD [0xB800A], 0x0732      ; '2'
        call kmain
 
        ; Halt the Machine
@@ -87,7 +96,7 @@ start:
        jmp .hlt
 
 ; 
-; Multiprocessing AP Startup Code (Must be within 0x10FFF0)
+; Multiprocessing AP Startup Code (Must be within 0 - 0x10FFF0)
 ;
 %if USE_MP
 [extern gGDT]
@@ -114,12 +123,15 @@ APWait:
 [global APStartup]
 APStartup:
        ;xchg bx, bx    ; MAGIC BREAK!
+       ; Load initial GDT
        mov ax, 0xFFFF
        mov ds, ax
        lgdt [DWORD ds:lGDTPtr-KERNEL_BASE-0xFFFF0]
+       ; Enable PMode in CR0
        mov eax, cr0
-       or      al, 1
-       mov     cr0, eax
+       or al, 1
+       mov cr0, eax
+       ; Jump into PMode
        jmp 08h:DWORD .ProtectedMode-KERNEL_BASE
 [bits 32]
 .ProtectedMode:
@@ -134,7 +146,7 @@ APStartup:
        mov eax, gaInitPageDir - KERNEL_BASE
        mov cr3, eax
        mov eax, cr0
-       or      eax, 0x80010000 ; PG and WP
+       or eax, 0x80010000      ; PG and WP
        mov cr0, eax
        ; Jump to higher half
        lea eax, [.higherHalf]
@@ -219,13 +231,15 @@ CallWithArgArray:
 [section .initpd]
 [global gaInitPageDir]
 [global gaInitPageTable]
-align 0x1000
+align 4096
 gaInitPageDir:
-       dd      gaInitPageTable-KERNEL_BASE+3   ; 0x00
-       times 1024-256-1        dd      0
-       dd      gaInitPageTable-KERNEL_BASE+3   ; 0xC0
-       times 256-1     dd      0
-align 0x1000
+       dd      gaInitPageTable-KERNEL_BASE+3   ; 0x000 - Low kernel
+       times 0x300-0x000-1     dd      0
+       dd      gaInitPageTable-KERNEL_BASE+3   ; 0xC00 - High kernel
+       times 0x3F0-0x300-1     dd      0
+       dd      gaInitPageDir-KERNEL_BASE+3     ; 0xFC0 - Fractal
+       times 0x400-0x3F0-1     dd      0
+align 4096
 gaInitPageTable:
        %assign i 0
        %rep 1024
@@ -233,7 +247,7 @@ gaInitPageTable:
        %assign i i+1
        %endrep
 [global Kernel_Stack_Top]
-ALIGN 0x1000
+ALIGN 4096
        times 1024      dd      0
 Kernel_Stack_Top:
 gInitAPStacks:

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