summaryrefslogtreecommitdiffstats
path: root/kernel/bootloader.s
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/bootloader.s')
-rw-r--r--kernel/bootloader.s57
1 files changed, 57 insertions, 0 deletions
diff --git a/kernel/bootloader.s b/kernel/bootloader.s
new file mode 100644
index 0000000..36d516f
--- /dev/null
+++ b/kernel/bootloader.s
@@ -0,0 +1,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