eada7b999a2d48ffb22215e929edd01d286b4775
[tpg/acess2.git] / Kernel / arch / x86_64 / start32.asm
1
2 [BITS 32]
3
4 [section .multiboot]
5 mboot:
6         MULTIBOOT_MAGIC equ     0x1BADB002
7         dd      MULTIBOOT_MAGIC
8
9 [extern start64]
10
11 [section .text]
12 [global start]
13 start:
14         ; Enable PAE
15         mov eax, cr4
16         or eax, 0x80|0x20
17         mov cr4, eax
18
19         ; Load PDP4
20         mov eax, gInitialPML4
21         mov cr3, eax
22
23         ; Enable long/compatability mode
24         mov ecx, 0xC0000080
25         rdmsr
26         or ax, 0x100
27         wrmsr
28
29         ; Enable paging
30         mov eax, cr0
31         or eax, 0x80000000
32         mov cr0, eax
33
34         ; Load GDT
35         lgdt [gGDTPtr]
36         mov ax, 0x10
37         mov ss, ax
38         mov ds, ax
39         mov es, ax
40         mov fs, ax
41         mov gs, ax
42
43         jmp 0x08:start64
44
45 [section .data]
46 gGDT:
47         dd      0,0
48         dd      0x00000000, 0x00209800  ; 64-bit Code
49         dd      0x00000000, 0x00009000  ; 64-bit Data
50 gGDTPtr:
51         dw      $-gGDT-1
52         dd      gGDT
53         dd      0
54
55 [section .padata]
56 gInitialPML4:   ; 256 TiB
57         dd      gInitialPDP + 3, 0      ; Identity Map Low 4Mb
58         times 256-1 dq  0
59         dd      gInitialPDP + 3, 0      ; Identity Map Low 4Mb to kernel base
60         times 256-1 dq 0
61
62 gInitialPDP:    ; 512 GiB
63         dd      gInitialPD + 3, 0
64         times 511 dq    0
65
66 gInitialPD:     ; 1 GiB
67         dd      gInitialPT1 + 3, 0
68         dd      gInitialPT2 + 3, 0
69
70 gInitialPT1:    ; 2 MiB
71         %assign i 1
72         %rep 512
73         dq      i*4096+3
74         %assign i i+1
75         %endrep
76 gInitialPT2:    ; 2 MiB
77         %assign i 512
78         %rep 512
79         dq      i*4096+3
80         %assign i i+1
81         %endrep
82
83

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