blob: 36d516f4f9cdcadcb74f547e249a71fa61e1bee3 (
plain)
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
|
global entrypoint ; the entry point symbol defined in kernel.ld
extern mainKernel ; indique la fonction ne se trouve pas dans ce fichier
; Values for the multiboot header
MULTIBOOT_HEADER_MAGIC equ 0x1BADB002
MULTIBOOT_HEADER_FLAGS equ 0x0
; magic + checksum + flags must equal 0
MULTIBOOT_HEADER_CHECKSUM equ -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
STACK_SIZE equ 256000
;---------------------------------------------------------------------------------------------------
; bootloader section
; This section must be located at the very beginning of the kernel image.
section .bootloader
align 4 ; section aligned to a 4 bytes boundary
; Minimum multiboot header
dd MULTIBOOT_HEADER_MAGIC
dd MULTIBOOT_HEADER_FLAGS
dd MULTIBOOT_HEADER_CHECKSUM
entrypoint:
; Bootloader code starts executing here
cli ; disable hardware interrupts
; TODO : initialiser le pointeur de pile ainsi qu'EBP (à la même valeur)
; Rappel : la pile "grandi" en descendant !
; ...
mov esp, stack ; l'adresse de la pile est defini par le label 'stack'
add esp, STACK_SIZE ; on deplace le pointeur de pile a la fin de la pile
mov ebp, esp
; TODO : appeler la fonction principale du kernel (code C)
; Celle-ci doit etre visible par le linker
; ...
call mainKernel
; infinite loop (should never get here)
.forever:
hlt
jmp .forever
;---------------------------------------------------------------------------------------------------
; stack section
; TODO : ajouter une section pour la pile kernel dans laquelle
; reserver au moins 256KB grace a la directive "resb".
; Cette section devra etre alignee sur 4 bytes.
; ...
section .stack
stack:
resb STACK_SIZE
|