| 
														
															@@ -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) 
														 | 
														
														 | 
														
															 void kernel_main(void) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 { 
														 | 
														
														 | 
														
															 { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     MAKE_BREAK_POINT(); 
														 | 
														
														 | 
														
															     MAKE_BREAK_POINT(); 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -37,38 +43,41 @@ void kernel_main(void) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     mem_size += 1024 * asm_mem_size_info.n_1k_blks; 
														 | 
														
														 | 
														
															     mem_size += 1024 * asm_mem_size_info.n_1k_blks; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     mem_size += 64 * 1024 * asm_mem_size_info.n_64k_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); 
														 | 
														
														 | 
														
															         (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_idt(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     init_pit(); 
														 | 
														
														 | 
														
															     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(); 
														 | 
														
														 | 
														
															     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(); 
														 | 
														
														 | 
														
															     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); 
														 | 
														
														 | 
														
															     char* k_malloc_buf = (char*)k_malloc(sizeof(char) * 128); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     snprintf(k_malloc_buf, 128, "This text is printed on the heap!\n"); 
														 | 
														
														 | 
														
															     snprintf(k_malloc_buf, 128, "This text is printed on the heap!\n"); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     vga_printk(k_malloc_buf, 0x0fu); 
														 | 
														
														 | 
														
															     vga_printk(k_malloc_buf, 0x0fu); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     k_free(k_malloc_buf); 
														 | 
														
														 | 
														
															     k_free(k_malloc_buf); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    vga_printk("No work to do, halting...\n", 0x0fU); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    printkf("No work to do, halting...\n"); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     while (1) { 
														 | 
														
														 | 
														
															     while (1) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         // disable interrupt 
														 | 
														
														 | 
														
															         // disable interrupt 
														 |