summaryrefslogtreecommitdiff
path: root/stage3/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'stage3/main.c')
-rw-r--r--stage3/main.c64
1 files changed, 35 insertions, 29 deletions
diff --git a/stage3/main.c b/stage3/main.c
index 4f33c46..fb09dbb 100644
--- a/stage3/main.c
+++ b/stage3/main.c
@@ -8,8 +8,6 @@
void clear_screen(); // framebuffer.asm
-void kmain();
-
void init()
{
clear_screen();
@@ -20,6 +18,16 @@ void init()
#define MMAP for (MemRegion *mreg = (void *) 0x500; mreg->start != nil; mreg++)
+ // backup memory map
+ usize n_mreg = 0;
+ MMAP n_mreg++;
+ MemRegion mregs[n_mreg];
+ {
+ usize i = 0;
+ MMAP mregs[i++] = *mreg;
+ }
+
+ // setup paging
MMAP page_region(mreg);
page_region(&(MemRegion) {
@@ -28,39 +36,37 @@ void init()
.used = MEM_RESERVED,
});
+ // heap init
MMAP heap_add_region(mreg);
- kmain();
- halt();
-}
+ // gfx init
+ gfx_set_area(0, 0, gfx_info->width, gfx_info->height, 0xFF000000);
-void charset_demo()
-{
- const u8 max = '~' - '!' + 1;
+ // charset demo
+ {
+ const u8 max = '~' - '!' + 1;
- char str[max + 1];
- str[max] = '\0';
+ char str[max + 1];
+ str[max] = '\0';
- for (u8 i = 0; i < max; i++)
- str[i] = i + '!';
+ for (u8 i = 0; i < max; i++)
+ str[i] = i + '!';
- print("charset demo:\n");
- print(str);
- print("\n");
-}
+ print("charset demo:\n");
+ print(str);
+ print("\n");
+ }
-void kmain()
-{
- gfx_set_area(0, 0, gfx_info->width, gfx_info->height, 0xFF000000);
- charset_demo();
+ // memory map
+ print("memory map:\n");
+ for (usize i = 0; i < n_mreg; i++) {
+ print_num((u64) mregs[i].start, 16, 16);
+ print(" | ");
+ print_num((u64) mregs[i].start + mregs[i].size, 16, 16);
+ print(" | ");
+ print_num(mregs[i].used, 10, 0);
+ print("\n");
+ }
- print(
- "\n"
- "#include <stdio.h>\n\n"
- "int main()\n{\n"
- "\tprintf(\"hello, world\\n\");\n"
- "\treturn 0;\n"
- "}\n"
- "\n"
- );
+ halt();
}