summaryrefslogtreecommitdiffstats
path: root/kernel/bootloader.s
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