- Implemented execp*.
[planlOS.git] / system / kernel / ke / start.S
blob446a8fcf115b667aea302df9215392fd474db816
2 .section .setup,"wxa"
3 .code32
4 .globl start
5 .globl kernel_stack
7 // Multiboot header
8 .align 4
9 multiboot_header:
10         .long 0x1BADB002
11         .long 0x00000003
12         .long 0xE4524FFB
14 // Kernel entry
15 start:
16         // Empty page directory
17         mov $page_directory, %edi
18         mov $1024, %ecx
19 setpdir:
20         movl $0, (%edi)
21         add $4, %edi
22         loop setpdir
23         
24         // Create simple page table to map kernel to 0xC0000000
25         mov $page_table, %edi
26         mov $0x3, %eax
27         mov $1024, %ecx
28 setptab:
29         movl %eax, (%edi)
30         add $4, %edi
31         add $0x1000, %eax
32         loop setptab
33         movl $0, page_table
34         
35         // Map table into directory
36         mov $page_table, %eax
37         or $0x3, %eax
38         mov $page_directory, %edi
39         mov %eax, (%edi)
40         add $3072, %edi
41         mov %eax, (%edi)
42         
43         // Activate paging
44         mov $page_directory, %eax
45         mov %eax, %cr3
46         mov %cr0, %eax
47         or $0x80000001, %eax
48         mov %eax, %cr0
49         
50         jmp high
52 .section .text
53 high:
54         // Setup stack
55         mov $(kernel_stack + 0x4000), %esp
56         // Call C kernel
57         pushl $0
58         pushl $0
59         mov %esp, %ebp
60         push %ebx
61         push %eax
62         call keInit
63         cli
64         hlt
67 .section .setup,"awx"
68 // Paging data used for startup
69 .align 0x1000
70 page_directory:
71         .skip 0x1000
72 page_table:
73         .skip 0x1000
75 .section .bss
76 // Kernel stack
77 .lcomm kernel_stack, 0x4000