diff --git a/drivers/vga.c b/drivers/vga.c index a9f1782..b6dacc8 100644 --- a/drivers/vga.c +++ b/drivers/vga.c @@ -10,9 +10,6 @@ static uint cursor_row = 0; static uint cursor_col = 0; void vga_init() { - // Allocate VGA memory range - pm_malloc_range(VGA_ADDRESS, VGA_ADDRESS_MAX, true); // force alloc the VGA range - // Disable cursor port_outb(0x3d4, 0x0a); port_outb(0x3d5, 0x20); @@ -68,11 +65,14 @@ void clear_screen() { void print(char* str, int attribute_byte) { for( char* c = str; *c != '\0'; c++ ) writechar(*c, (uint)(c - str) + cursor_col, cursor_row, attribute_byte); + + cursor_col += strlen(str); } void println(char* str, int attribute_byte) { print(str, attribute_byte); cursor_row++; // Increment to next y-pos (newline) + cursor_col = 0; } void printint(int i, int attribute_byte) { diff --git a/kernel/kernel.c b/kernel/kernel.c index be39184..2a64f6b 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -11,6 +11,23 @@ void init() { println("Kernel loaded", SUCCESS_COLOR); + // Allocate VGA memory range + println("Allocating VGA memory...", DEFAULT_COLOR); + pm_malloc_range(VGA_ADDRESS, VGA_ADDRESS_MAX, true); // force alloc the VGA range + + // TODO: MAKE THESE DYNAMIC + print("Kernel offset: ", DEFAULT_COLOR); + println("0x1000", DEFAULT_COLOR); + + println("-VGA Stats-", DEFAULT_COLOR); + print("Start: ", DEFAULT_COLOR); + println("0xb7000", DEFAULT_COLOR); + + print("End: ", DEFAULT_COLOR); + println("0xb8fa0", DEFAULT_COLOR); + + // ENABLE PAGING + // TODO: make this work // enable_paging(); println(""); @@ -20,29 +37,12 @@ void init() { char* subtitle = "A x86 operating system, licenced under GPL-2.0"; println(subtitle, DEFAULT_COLOR); - /* - print("Kernel offset: ", DEFAULT_COLOR); - println("0x1000", DEFAULT_COLOR); - */ - - char* malloctest = pm_malloc(1); // allocate two blocks - - - - char* intbuf = "xxxx"; - int num = 1234; - intbuf = int_to_str(num, intbuf); - print("TEST NUM: ", DEFAULT_COLOR); - println(intbuf, DEFAULT_COLOR); - - /* - // Memory allocation testing - printalign("-- PMM Tests --", DEFAULT_COLOR, MIDDLE); + printalign("-- PMM malloc Tests --", DEFAULT_COLOR, MIDDLE); - println("THESE ALLOC SHOULD WORK:", 0xa0); + println("THESE MALLOC SHOULD WORK (no text => success):", 0xa0); for(int i=0; i < 4; i++) { - block_alloc(i); + pm_malloc(1); } println("(2) THIS ALLOC SHOULD FAIL:", 0xc0); @@ -52,11 +52,10 @@ void init() { block_free(2); // after this, allocation of 2nd block should work block_alloc(2); - printalign("-- End of PMM Tests --", DEFAULT_COLOR, MIDDLE); + printalign("-- End of PMM malloc Tests --", DEFAULT_COLOR, MIDDLE); char* strbuf = "Concat test: "; char* str2 = "Works!"; strbuf = strcat(strbuf, str2); println(strbuf, DEFAULT_COLOR); - */ } diff --git a/kernel/memory.c b/kernel/memory.c index b5f8abc..074d010 100644 --- a/kernel/memory.c +++ b/kernel/memory.c @@ -37,8 +37,6 @@ pointer block_alloc(uint blockidx) { block_bflag = CHECK_BITMAP(bitmap, blockidx); if( block_bflag == BM_FREE ) { // check if block is free - println("Allocating block...", DEFAULT_COLOR); - mod_bitmap(blockidx, 1); last_block = blockidx; @@ -107,11 +105,15 @@ void pm_malloc_range(ulong start, ulong end, bool force) { } pointer pm_malloc(uint block_count) { + // failsafe if the dev is a moron + if( block_count < 1 ) { + println("[ERROR] Attempted to allocated zero blocks!", URGENT_COLOR); + return 0x0; + } + // find free block range and get lower offset int lower; lower = find_free(block_count); - println("lower: ", DEFAULT_COLOR); - println((lower+46), 0xfc); if( lower < 0 ) { println("malloc: OUT OF MEMORY :(", URGENT_COLOR);