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 |