Rev 235 | Rev 271 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 235 | Rev 267 | ||
---|---|---|---|
Line 29... | Line 29... | ||
29 | #include <arch/boot/boot.h> |
29 | #include <arch/boot/boot.h> |
30 | 30 | ||
31 | .section K_TEXT_START |
31 | .section K_TEXT_START |
32 | .global kernel_image_start |
32 | .global kernel_image_start |
33 | 33 | ||
- | 34 | KTEXT=8 |
|
- | 35 | KDATA=16 |
|
- | 36 | ||
34 | .code16 |
37 | .code16 |
35 | # |
38 | # |
36 | # This is where we require any SPARTAN-kernel-compatible boot loader |
39 | # This is where we require any SPARTAN-kernel-compatible boot loader |
37 | # to pass control in real mode. |
40 | # to pass control in real mode. |
38 | # |
41 | # |
Line 42... | Line 45... | ||
42 | # |
45 | # |
43 | kernel_image_start: |
46 | kernel_image_start: |
44 | cli |
47 | cli |
45 | xorw %ax, %ax |
48 | xorw %ax, %ax |
46 | movw %ax, %ds |
49 | movw %ax, %ds |
47 | movw %ax, %ss # initialize stack segment register |
50 | movw %ax, %ss # initialize stack segment register |
48 | movl $0x7c00, %esp # initialize stack pointer |
51 | movl $BOOTSTRAP_OFFSET - 0x400, %esp # initialize stack pointer |
49 | 52 | ||
50 | call memmap_arch_init |
53 | call memmap_arch_init |
51 | 54 | ||
52 | lgdt gdtr # initialize Global Descriptor Table register |
55 | lgdt bsp_bootstrap_gdtr # initialize Global Descriptor Table register |
53 | 56 | ||
54 | movl %cr0, %eax |
57 | movl %cr0, %eax |
55 | orl $0x1, %eax |
58 | orl $0x1, %eax |
56 | movl %eax, %cr0 # switch to protected mode |
59 | movl %eax, %cr0 # switch to protected mode |
57 | 60 | ||
58 | jmpl $8, $boot_image_start |
61 | jmpl $KTEXT, $boot_image_start |
59 | 62 | ||
60 | .code32 |
63 | .code32 |
61 | .align 4 |
64 | .align 4 |
62 | multiboot_header: |
65 | multiboot_header: |
63 | .long MULTIBOOT_HEADER_MAGIC |
66 | .long MULTIBOOT_HEADER_MAGIC |
Line 68... | Line 71... | ||
68 | .long 0 |
71 | .long 0 |
69 | .long 0 |
72 | .long 0 |
70 | .long multiboot_image_start + BOOT_OFFSET |
73 | .long multiboot_image_start + BOOT_OFFSET |
71 | 74 | ||
72 | boot_image_start: |
75 | boot_image_start: |
73 | movw $16, %ax |
76 | movw $KDATA, %ax |
74 | movw %ax, %es |
77 | movw %ax, %es |
75 | movw %ax, %gs |
78 | movw %ax, %gs |
76 | movw %ax, %fs |
79 | movw %ax, %fs |
77 | movw %ax, %ds # kernel data + stack |
80 | movw %ax, %ds # kernel data + stack |
78 | movw %ax, %ss |
81 | movw %ax, %ss |
Line 82... | Line 85... | ||
82 | movb $0xd1, %al # enable A20 using the keyboard controller |
85 | movb $0xd1, %al # enable A20 using the keyboard controller |
83 | outb %al, $0x64 |
86 | outb %al, $0x64 |
84 | movb $0xdf, %al |
87 | movb $0xdf, %al |
85 | outb %al, $0x60 |
88 | outb %al, $0x60 |
86 | 89 | ||
87 | movl $0x8000, %esi |
90 | movl $BOOTSTRAP_OFFSET, %esi |
88 | movl $0x8000 + BOOT_OFFSET, %edi |
91 | movl $BOOTSTRAP_OFFSET + BOOT_OFFSET, %edi |
89 | movl $_hardcoded_kernel_size, %ecx |
92 | movl $_hardcoded_kernel_size, %ecx |
90 | cld |
93 | cld |
91 | rep movsb |
94 | rep movsb |
92 | 95 | ||
93 | jmp protected |
96 | jmp protected |
94 | 97 | ||
95 | multiboot_image_start: |
98 | multiboot_image_start: |
96 | movl $0x7c00, %esp # initialize stack pointer |
99 | movl BOOTSTRAP_OFFSET - 0x400, %esp # initialize stack pointer |
97 | 100 | ||
98 | lgdt gdtr |
101 | lgdt gdtr # initialize Global Descriptor Table register |
99 | 102 | ||
100 | movw $16, %ax |
103 | movw $KDATA, %ax |
101 | movw %ax, %es |
104 | movw %ax, %es |
102 | movw %ax, %gs |
105 | movw %ax, %gs |
103 | movw %ax, %fs |
106 | movw %ax, %fs |
104 | movw %ax, %ds # kernel data + stack |
107 | movw %ax, %ds # kernel data + stack |
105 | movw %ax, %ss |
108 | movw %ax, %ss |
106 | 109 | ||
107 | call map_kernel # map kernel and turn paging on |
110 | call map_kernel # map kernel and turn paging on |
108 | 111 | ||
109 | protected: |
112 | protected: |
110 | call main_bsp # never returns |
113 | call main_bsp # never returns |
111 | 114 | ||
112 | cli |
115 | cli |
113 | hlt |
116 | hlt |
114 | 117 | ||
115 | .global map_kernel |
118 | .global map_kernel |