summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--boot/mbr.asm20
-rw-r--r--kernel/kernel.c71
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);