Subversion Repositories HelenOS-historic

Rev

Rev 232 | Rev 267 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 232 Rev 235
Line 40... Line 40...
40
# time. So we can just load the respective table registers and
40
# time. So we can just load the respective table registers and
41
# switch to protected mode.
41
# switch to protected mode.
42
#
42
#
43
kernel_image_start:
43
kernel_image_start:
44
	cli
44
	cli
45
	xorw %ax,%ax
45
	xorw %ax, %ax
46
	movw %ax,%ds
46
	movw %ax, %ds
47
	movw %ax,%ss			# initialize stack segment register
47
	movw %ax, %ss			# initialize stack segment register
48
	movl $0x7c00,%esp		# initialize stack pointer
48
	movl $0x7c00, %esp		# initialize stack pointer
49
	
49
	
50
	call memmap_arch_init
50
	call memmap_arch_init
51
	
51
	
52
	lgdt gdtr			# initialize Global Descriptor Table register
52
	lgdt gdtr			# initialize Global Descriptor Table register
53
	
53
	
54
	movl %cr0,%eax
54
	movl %cr0, %eax
55
	orl $0x1,%eax
55
	orl $0x1, %eax
56
	movl %eax,%cr0			# switch to protected mode
56
	movl %eax, %cr0			# switch to protected mode
-
 
57
	
57
	jmpl $8,$meeting_point
58
	jmpl $8, $boot_image_start
58
 
59
	
59
.code32
60
.code32
60
.align 4
61
.align 4
61
multiboot_header:
62
multiboot_header:
62
	.long MULTIBOOT_HEADER_MAGIC
63
	.long MULTIBOOT_HEADER_MAGIC
63
	.long MULTIBOOT_HEADER_FLAGS
64
	.long MULTIBOOT_HEADER_FLAGS
64
	.long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)	# checksum
65
	.long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)	# checksum
65
	.long multiboot_header
66
	.long multiboot_header + BOOT_OFFSET
66
	.long unmapped_ktext_start
67
	.long unmapped_ktext_start + BOOT_OFFSET
67
	.long 0
68
	.long 0
68
	.long 0
69
	.long 0
69
	.long multiboot_image_start
70
	.long multiboot_image_start + BOOT_OFFSET
-
 
71
	
-
 
72
boot_image_start:
-
 
73
	movw $16, %ax
-
 
74
	movw %ax, %es
-
 
75
	movw %ax, %gs
-
 
76
	movw %ax, %fs
-
 
77
	movw %ax, %ds			# kernel data + stack
-
 
78
	movw %ax, %ss
-
 
79
	
-
 
80
	call map_kernel			# map kernel and turn paging on
-
 
81
	
-
 
82
	movb $0xd1, %al			# enable A20 using the keyboard controller
-
 
83
	outb %al, $0x64
-
 
84
	movb $0xdf, %al
-
 
85
	outb %al, $0x60
-
 
86
	
-
 
87
	movl $0x8000, %esi
-
 
88
	movl $0x8000 + BOOT_OFFSET, %edi
-
 
89
	movl $_hardcoded_kernel_size, %ecx
-
 
90
	cld
-
 
91
	rep movsb
-
 
92
	
-
 
93
	jmp protected
70
	
94
	
71
multiboot_image_start:
95
multiboot_image_start:
72
	movl $0x7c00, %esp		# initialize stack pointer
96
	movl $0x7c00, %esp		# initialize stack pointer
73
	
97
	
74
	lgdt gdtr
98
	lgdt gdtr
75
 
99
 
76
meeting_point:
-
 
77
	movw $16,%ax
100
	movw $16, %ax
78
	movw %ax,%es
101
	movw %ax, %es
79
	movw %ax,%gs
102
	movw %ax, %gs
80
	movw %ax,%fs
103
	movw %ax, %fs
81
	movw %ax,%ds			# kernel data + stack
104
	movw %ax, %ds			# kernel data + stack
82
	movw %ax,%ss
105
	movw %ax, %ss
83
 
106
	
84
	call map_kernel			# map kernel and turn paging on
107
	call map_kernel			# map kernel and turn paging on
85
 
108
	
-
 
109
protected:
86
	call main_bsp			# never returns
110
	call main_bsp			# never returns
87
 
111
 
88
	cli
112
	cli
89
	hlt
113
	hlt
90
 
114