|
@@ -20,6 +20,12 @@ void call_constructors_for_cpp(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+#define KERNEL_MAIN_BUF_SIZE (128)
|
|
|
+
|
|
|
+#define printkf(x...) \
|
|
|
+ snprintf(buf, KERNEL_MAIN_BUF_SIZE, x); \
|
|
|
+ vga_printk(buf, 0x0fu);
|
|
|
+
|
|
|
void kernel_main(void)
|
|
|
{
|
|
|
MAKE_BREAK_POINT();
|
|
@@ -37,38 +43,41 @@ void kernel_main(void)
|
|
|
mem_size += 1024 * asm_mem_size_info.n_1k_blks;
|
|
|
mem_size += 64 * 1024 * asm_mem_size_info.n_64k_blks;
|
|
|
|
|
|
- char buf[128] = { 0 };
|
|
|
- snprintf(buf, 128, "Memory size: %d bytes (%d MB), 16k blocks: %d, 64k blocks: %d\n",
|
|
|
- mem_size, mem_size / 1024 / 1024, (int32_t)asm_mem_size_info.n_1k_blks,
|
|
|
+ char buf[KERNEL_MAIN_BUF_SIZE] = { 0 };
|
|
|
+ printkf(
|
|
|
+ "Memory size: %d bytes (%d MB), 16k blocks: %d, 64k blocks: %d\n",
|
|
|
+ mem_size,
|
|
|
+ mem_size / 1024 / 1024,
|
|
|
+ (int32_t)asm_mem_size_info.n_1k_blks,
|
|
|
(int32_t)asm_mem_size_info.n_64k_blks);
|
|
|
- vga_printk(buf, 0x0fu);
|
|
|
|
|
|
- vga_printk("Initializing interrupt descriptor table...\n", 0x0fu);
|
|
|
+ printkf("Initializing interrupt descriptor table...\n");
|
|
|
+
|
|
|
init_idt();
|
|
|
|
|
|
init_pit();
|
|
|
|
|
|
- vga_printk("Interrupt descriptor table initialized!\n", 0x0fu);
|
|
|
+ printkf("Interrupt descriptor table initialized!\n");
|
|
|
|
|
|
- vga_printk("Initializing heap space\n", 0x0fu);
|
|
|
+ printkf("Initializing heap space\n");
|
|
|
|
|
|
init_heap();
|
|
|
|
|
|
- vga_printk("Heap space initialized!\n", 0x0fu);
|
|
|
+ printkf("Heap space initialized!\n");
|
|
|
|
|
|
- vga_printk("Constructing c++ global objects\n", 0x0fu);
|
|
|
+ printkf("Constructing c++ global objects\n");
|
|
|
|
|
|
call_constructors_for_cpp();
|
|
|
|
|
|
- vga_printk("Cpp global objects constructed\n", 0x0fu);
|
|
|
+ printkf("Cpp global objects constructed\n");
|
|
|
|
|
|
- vga_printk("Testing k_malloc...\n", 0x0fu);
|
|
|
+ printkf("Testing k_malloc...\n");
|
|
|
char* k_malloc_buf = (char*)k_malloc(sizeof(char) * 128);
|
|
|
snprintf(k_malloc_buf, 128, "This text is printed on the heap!\n");
|
|
|
vga_printk(k_malloc_buf, 0x0fu);
|
|
|
k_free(k_malloc_buf);
|
|
|
|
|
|
- vga_printk("No work to do, halting...\n", 0x0fU);
|
|
|
+ printkf("No work to do, halting...\n");
|
|
|
|
|
|
while (1) {
|
|
|
// disable interrupt
|