diff options
| -rw-r--r-- | boot/mbr.asm | 20 | ||||
| -rw-r--r-- | kernel/kernel.c | 71 |
2 files changed, 87 insertions, 4 deletions
diff --git a/boot/mbr.asm b/boot/mbr.asm index 12b7707..d4dcbe5 100644 --- a/boot/mbr.asm +++ b/boot/mbr.asm @@ -26,16 +26,15 @@ KERNEL_OFFSET equ 0x1000 jmp boot_16 ;start boot process ;SOME Global Data, mainly strings -STR_VERSION: +;STR_VERSION: ; db "v0.2~",0 -STR_PROT: +;STR_PROT: ; db "32-bit PM",0 -STR_LOADED: +;STR_LOADED: ; db "loaded",0 BOOT_DRIVE: db 0 - ;lets put our temporary GDT (Global Descriptor Table) here %include "boot/GDT.asm" @@ -81,6 +80,13 @@ boot_16: ; mov bx, STR_LOADED ; call print_string + + ;get memory map from biso before we enter 32 bit protected mode + ; todo: how to set es!?!? + ;mov es,0 + mov di,MEMMAP + call BiosGetMemoryMap + ;finally lets enter Protected mode!!! call switch_to_pm @@ -88,6 +94,8 @@ boot_16: [bits 32] boot_32_pm: +; we could do ALL This inside the kernel!!! + ;print info message that we are in protected mode! ; mov ecx,160 ; mov ebx,STR_PROT @@ -105,6 +113,10 @@ boot_32_pm: call KERNEL_OFFSET ;jump into our Kernel it +db 'X' +MEMMAP: + + ;idt_descriptor: ; dw idt_end-idt_start-1 diff --git a/kernel/kernel.c b/kernel/kernel.c index 94a5b9f..7c5f982 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -48,13 +48,84 @@ void kernel_main() } + //0xA5000 scr_put_hex((uint32_t)prober>>16); scr_put_hex((uint32_t)prober&0xffff); scr_put_string_nl(" finished!"); // + */ + uint16_t *memmap=0x7c00+0x120; + uint32_t avail_mem=0; + + //print memory map: + + while(1) + { + if(memmap[8]==0)break; + if(memmap[8]==1) + { + avail_mem+=memmap[4]+(memmap[5]<<16); + } + //bytes: 8 8 4 4// + //scr_put_hex(memmap[3]); + //scr_put_string(" "); + //scr_put_hex(memmap[2]); + //scr_put_string(" "); + scr_put_hex(memmap[1]); + scr_put_string(" "); + scr_put_hex(memmap[0]); + scr_put_string(" "); +// scr_put_hex(memmap[4]); +// scr_put_string(" "); +// scr_put_hex(memmap[5]); +// scr_put_string(" "); +// scr_put_hex(memmap[6]); +// scr_put_string(" "); +// scr_put_hex(memmap[7]); + + + scr_put_string(" - "); +// scr_put_hex(memmap[8]); +// scr_put_string(" "); +// scr_put_hex(memmap[9]); +// scr_put_string(" "); +// scr_put_hex(memmap[10]); +// scr_put_string(" "); +// scr_put_hex(memmap[11]); +// scr_put_string(" "); + //scr_put_hex(memmap[7]); + //scr_put_string(" "); + //scr_put_hex(memmap[6]); + //scr_put_string(" "); + scr_put_hex(memmap[5]); + scr_put_string(" "); + scr_put_hex(memmap[4]); + + scr_put_string(" : "); + scr_put_hex(memmap[8]); +// scr_put_string(" "); +// scr_put_hex(memmap[9]); + + + scr_put_string_nl(""); + + memmap+=12; + } + + + scr_put_string("Total Available Mem: "); + scr_put_hex(avail_mem>>16); + scr_put_string(" "); + scr_put_hex(avail_mem&0xffff); + scr_put_string_nl(" byte"); + scr_put_string_nl(""); + + + + // init and interrupt decriptor table int_init(0x08); |
