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'
jmp .hlt
;
-; Multiprocessing AP Startup Code (Must be within 0x10FFF0)
+; Multiprocessing AP Startup Code (Must be within 0 - 0x10FFF0)
;
%if USE_MP
[extern gGDT]
[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
+ ; Jump into PMode
jmp 08h:DWORD .ProtectedMode-KERNEL_BASE
[bits 32]
.ProtectedMode:
[section .initpd]
[global gaInitPageDir]
[global gaInitPageTable]
-align 0x1000
+align 4096
gaInitPageDir:
dd gaInitPageTable-KERNEL_BASE+3 ; 0x000 - Low kernel
times 0x300-0x000-1 dd 0
times 0x3F0-0x300-1 dd 0
dd gaInitPageDir-KERNEL_BASE+3 ; 0xFC0 - Fractal
times 0x400-0x3F0-1 dd 0
-align 0x1000
+align 4096
gaInitPageTable:
%assign i 0
%rep 1024
%assign i i+1
%endrep
[global Kernel_Stack_Top]
-ALIGN 0x1000
+ALIGN 4096
times 1024 dd 0
Kernel_Stack_Top:
gInitAPStacks: