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