-
Notifications
You must be signed in to change notification settings - Fork 28
/
Copy pathboot.s
98 lines (77 loc) · 2.09 KB
/
boot.s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# Ezek a multiboot fejlec beallitasai, kesobb reszletesen foglalkozunk veluk
.set ALIGN, 1<<0 # modulok betoltese page(4k) aligned legyen
.set MEMINFO, 1<<1 # kerunk memory map-et
.set FLAGS, ALIGN | MEMINFO # most osszepreseljuk egy flags objektumba
.set MAGIC, 0x1BADB002 # 'magic number', ezzel fog megtalalni a GRUB
.set CHECKSUM, -(MAGIC + FLAGS) # checksum, ellenorzeskent
# Egy uj szekcio, amit a linker script majd jo elore tesz, elvileg.
.section .multiboot
.align 4 # 4byte boundary-n legyunk!
.long MAGIC # elsonek a MAGIC number
.long FLAGS # masodiknak a flags
.long CHECKSUM # majd vegul a checksum
# foglalunk a stack-nek 16KiB-ot
.section .bootstrap_stack
stack_bottom:
.skip 32768 # 16 KiB
stack_top:
# az elf-ben a .text szekcio tartalmazza a kodot amit futtatni fogunk
.section .text
.global __idt_default_handler
.type __idt_default_handler, @function
__idt_default_handler:
pushal
mov $0x20, %al
mov $0x20, %dx
out %al, %dx
#call _test
popal
iretl
.global _set_gdtr
.type _set_gdtr, @function
_set_gdtr:
push %ebp
movl %esp, %ebp
lgdt 0x800
movl %ebp, %esp
pop %ebp
ret
.global _set_idtr
.type _set_idtr, @function
_set_idtr:
push %ebp
movl %esp, %ebp
lidt 0x10F0
movl %ebp, %esp
pop %ebp
ret
.global _reload_segments
.type _reload_segments, @function
_reload_segments:
push %ebp
movl %esp, %ebp
push %eax
mov $0x10, %ax
mov %ax, %ds
mov %ax, %es
mov %ax, %fs
mov %ax, %gs
mov %ax, %ss
pop %eax
ljmp $0x8, $me
me:
movl %ebp, %esp
pop %ebp
ret
.global _start # ez exportalja a _start label-t
.type _start, @function # a _start label mostmar egy funkcio!
_start: # definialjuk a _start -ot
movl $stack_top, %esp # gyors allitsuk be a stacket!
mov $0x1337, %eax
call kernel_main # es hivjuk meg a C99 resz! :)
cli # kikapcsoljuk az interruptokat
hlt # halt a kovetkezo interruptig
# az elozo ket sor, orokre lefagyasztja a gepet, innen marcsak a reboot segit!
.Lhang: # ha GPF vagy PF lenne, akkor sem hagyjuk a gepet elfutni a rossz memoriaba!
jmp .Lhang # inkabb ugraljon orokre itt (~spinlock)
.size _start, . - _start