selfmade-os

annotate loader.s @ 1:42ba76f77035

the kernel with output and mem alloc
author meillo@marmaro.de
date Sun, 01 Nov 2009 23:50:51 +0100
parents
children
rev   line source
meillo@0 1 global loader ; making entry point visible to linker
meillo@0 2 extern kmain ; main is defined elsewhere
meillo@0 3
meillo@0 4 ; setting up the Multiboot header - see GRUB docs for details
meillo@0 5 MODULEALIGN equ 1<<0 ; align loaded modules on page
meillo@0 6 ; boundaries
meillo@0 7 MEMINFO equ 1<<1 ; provide memory map
meillo@0 8 FLAGS equ MODULEALIGN | MEMINFO ; this is the Multiboot 'flag' field
meillo@0 9 MAGIC equ 0x1BADB002 ; 'magic number' lets bootloader find the header
meillo@0 10 CHECKSUM equ -(MAGIC + FLAGS) ; checksum required
meillo@0 11
meillo@0 12 section .multiboot
meillo@0 13 align 4
meillo@0 14 MultiBootHeader:
meillo@0 15 dd MAGIC
meillo@0 16 dd FLAGS
meillo@0 17 dd CHECKSUM
meillo@0 18
meillo@0 19 ; reserve initial kernel stack space
meillo@0 20 STACKSIZE equ 0x4000 ; that's 16k.
meillo@0 21
meillo@0 22 loader:
meillo@0 23 mov esp, stack+STACKSIZE ; set up the stack
meillo@0 24 push eax ; pass Multiboot magic number
meillo@0 25 push ebx ; pass Multiboot info structure
meillo@0 26 call kmain ; call kernel proper
meillo@0 27 cli
meillo@0 28 hang:
meillo@0 29 hlt ; halt machine should kernel return
meillo@0 30 jmp hang
meillo@0 31
meillo@0 32 section .bss
meillo@0 33 align 32
meillo@0 34 stack:
meillo@0 35 resb STACKSIZE ; reserve stack on a quadword boundary