mirror of https://github.com/garritfra/ditto-os
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
1.3 KiB
31 lines
1.3 KiB
global loader ; the entry symbol for ELF |
|
extern main |
|
|
|
MAGIC_NUMBER equ 0x1BADB002 ; define the magic number constant |
|
FLAGS equ 0x0 ; multiboot flags |
|
CHECKSUM equ -MAGIC_NUMBER ; calculate the checksum |
|
; (magic number + checksum + flags should equal 0) |
|
|
|
KERNEL_STACK_SIZE equ 4096 ; size of stack in bytes |
|
|
|
section .bss |
|
align 4 ; align at 4 bytes |
|
kernel_stack: ; label points to beginning of memory |
|
resb KERNEL_STACK_SIZE ; reserve stack for the kernel |
|
|
|
section .text: ; start of the text (code) section |
|
align 4 ; the code must be 4 byte aligned |
|
dd MAGIC_NUMBER ; write the magic number to the machine code, |
|
dd FLAGS ; the flags, |
|
dd CHECKSUM ; and the checksum |
|
|
|
loader: ; the loader label (defined as entry point in linker script) |
|
mov eax, 0xCAFEBABE ; place the number 0xCAFEBABE in the register eax |
|
|
|
mov esp, kernel_stack + KERNEL_STACK_SIZE ; point esp to the start of the |
|
; stack (end of memory area) |
|
call main |
|
|
|
.loop: |
|
|
|
jmp .loop ; loop forever
|