diff options
Diffstat (limited to 'kernel/bootloader.s')
-rw-r--r-- | kernel/bootloader.s | 57 |
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 |