Mercurial > selfmade-os
diff loader.s @ 0:99db6262c157
initial commit with code from http://wiki.osdev.org/Bare_bones
author | meillo@marmaro.de |
---|---|
date | Sun, 01 Nov 2009 23:50:00 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/loader.s Sun Nov 01 23:50:00 2009 +0100 @@ -0,0 +1,35 @@ +global loader ; making entry point visible to linker +extern kmain ; main is defined elsewhere + +; setting up the Multiboot header - see GRUB docs for details +MODULEALIGN equ 1<<0 ; align loaded modules on page +; boundaries +MEMINFO equ 1<<1 ; provide memory map +FLAGS equ MODULEALIGN | MEMINFO ; this is the Multiboot 'flag' field +MAGIC equ 0x1BADB002 ; 'magic number' lets bootloader find the header +CHECKSUM equ -(MAGIC + FLAGS) ; checksum required + +section .multiboot +align 4 +MultiBootHeader: + dd MAGIC + dd FLAGS + dd CHECKSUM + +; reserve initial kernel stack space +STACKSIZE equ 0x4000 ; that's 16k. + +loader: + mov esp, stack+STACKSIZE ; set up the stack + push eax ; pass Multiboot magic number + push ebx ; pass Multiboot info structure + call kmain ; call kernel proper + cli +hang: + hlt ; halt machine should kernel return + jmp hang + +section .bss +align 32 +stack: + resb STACKSIZE ; reserve stack on a quadword boundary