X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Farch%2Fx86%2Fstart.asm;h=8c7d9a64008e469209a3bd7b3a2b459476ba7780;hb=30e2436921e53b149d65403430048e39a44cad4b;hp=0988a7733f36958ee24834f64f0487a6d9973a39;hpb=2d83a99f3202f0e4688b58405f67604a24420861;p=tpg%2Facess2.git diff --git a/Kernel/arch/x86/start.asm b/Kernel/arch/x86/start.asm index 0988a773..8c7d9a64 100644 --- a/Kernel/arch/x86/start.asm +++ b/Kernel/arch/x86/start.asm @@ -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 @@ -71,13 +73,20 @@ start: 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: