diff --git a/include/version.h b/include/version.h index 292d58f..ad9b23e 100644 --- a/include/version.h +++ b/include/version.h @@ -1,3 +1,3 @@ #define VERSION_MAJOR 0 #define VERSION_MINOR 1 -#define VERSION_BUILD 934 +#define VERSION_BUILD 943 diff --git a/kernel/log.c b/kernel/log.c index 656e336..c821da2 100644 --- a/kernel/log.c +++ b/kernel/log.c @@ -14,12 +14,14 @@ #include #include -static char start_buffer[4096]; +static char start_buffer[8192]; static char *log_buffer; static uint64_t fb_pos_x = 4; static uint64_t fb_pos_y = 0; static uint64_t buf_pos = 0; -static uint64_t buf_max = 4096; +static uint64_t buf_max = 8192; + +void redraw_screen( ); // Получение кода символа в таблице static inline uint32_t analyze(char glyth) { @@ -33,7 +35,7 @@ static void print_char(uint64_t x, uint64_t y, char glyth) { } } -static void fb_putchar(char c) { +static void log_fb_putchar(char c) { if (c == '\0' || fb_init_status < 1) { return; } if (c == '\t') { fb_pos_x += FONT_6X8_SLIM_CHAR_WIDTH * 4; @@ -46,12 +48,26 @@ static void fb_putchar(char c) { fb_pos_y = 4; fb_pos_y += FONT_6X8_SLIM_CHAR_HEIGHT + 1; } - if (fb_pos_y >= SCREEN_HEIGHT - FONT_6X8_SLIM_CHAR_HEIGHT) { fb_pos_y -= FONT_6X8_SLIM_CHAR_HEIGHT; } + if (fb_pos_y >= SCREEN_HEIGHT - FONT_6X8_SLIM_CHAR_HEIGHT) { + fb_pos_y -= FONT_6X8_SLIM_CHAR_HEIGHT - 1; + for (uint64_t i = 0; i < buf_max - 1; i++) { log_buffer[i] = log_buffer[i + 1]; } + redraw_screen( ); + } print_char(fb_pos_x, fb_pos_y, c); fb_pos_x += FONT_6X8_SLIM_CHAR_WIDTH; } } +void redraw_screen( ) { + // Перерисовка экрана + for (uint64_t i = 0; i < SCREEN_WIDTH * SCREEN_HEIGHT; i++) { SCREEN_BUFFER[i] = DARK_GREEN; } + + fb_pos_x = 4; + fb_pos_y = 0; + + for (uint64_t i = 0; i < buf_pos; i++) { log_fb_putchar(log_buffer[i]); } +} + void log_putchar(char c) { log_buffer[buf_pos] = c; com_write_byte(c); @@ -63,17 +79,12 @@ void log_putchar(char c) { for (uint64_t i = 0; i < buf_max - 1; i++) { log_buffer[i] = log_buffer[i + 1]; } if (fb_init_status < 1) { return; } - - // Перерисовка экрана - for (uint64_t i = 0; i < SCREEN_WIDTH * SCREEN_HEIGHT; i++) { SCREEN_BUFFER[i] = DARK_GREEN; } - - fb_pos_x = 4; - fb_pos_y = 0; - - for (uint64_t i = 0; i < buf_pos; i++) { fb_putchar(log_buffer[i]); } + redraw_screen( ); } else { - fb_putchar(c); buf_pos++; + + if (fb_init_status < 1) { return; } + log_fb_putchar(c); } } diff --git a/kernel/mem.c b/kernel/mem.c index 6bed9ba..65bb68a 100644 --- a/kernel/mem.c +++ b/kernel/mem.c @@ -250,14 +250,14 @@ void mem_init( ) { mmmap_count = memmap_response->entry_count; struct limine_memmap_entry **mmaps = memmap_response->entries; - LOG("Записей в карте памяти: %u\n", memmap_response->entry_count); + // LOG("Записей в карте памяти: %u\n", memmap_response->entry_count); // Обработка каждой записи в карте памяти for (uint64_t i = 0; i < mmmap_count; i++) { available += mmaps[i]->length; - // LOG("\t%d: 0x%x\tдлина: 0x%x\tтип: %s\n", i + 1, - // mmaps[i]->base, mmaps[i]->length, memory_types[mmaps[i]->type]); + // LOG("\t%d: 0x%x\tдлина: 0x%x\tтип: %s\n", i + 1, mmaps[i]->base, mmaps[i]->length, + // memory_types[mmaps[i]->type]); if (mmaps[i]->type == LIMINE_MEMMAP_FRAMEBUFFER) { LOG("На видеопамять BIOS/UEFI выделено: %u мегабайт + %u " "килобайт\n", @@ -296,21 +296,17 @@ void mem_init( ) { for (uint64_t t = 0; t < mmaps[i]->length; t += BLOCK_SIZE) { mem_frame_free((void *)mmaps[i]->base + t, 1); } } - // LOG("%u / %u блоков доступно\n", bitmap_available, bitmap_limit); - // LOG("Размер битовой карты: %u\n", bitmap_size); + LOG("%u / %u блоков доступно\n", bitmap_available, bitmap_limit); + // LOG("Размер битовой карты: %u\n", bitmap_size); alloc_init(mem_frame_alloc(1), BLOCK_SIZE); - // LOG("%u мегабайт выделено в динамичную память\n", (256 * 16 * BLOCK_SIZE + BLOCK_SIZE) / 1024 / 1024); + LOG("%u мегабайт выделено в динамичную память\n", (256 * 16 * BLOCK_SIZE + BLOCK_SIZE) / 1024 / 1024); // Выделяем по 4 мегабайта в аллокатор динамичной памяти - for (int64_t i = 0; i < 16; i += 4) { - // fb_printf("%d/%u\n", i, 16); - mem_add_block(mem_frame_alloc(1024), 1024 * BLOCK_SIZE); - } + for (int64_t i = 0; i < 16; i += 8) { mem_add_block(mem_frame_alloc(1024), 1024 * BLOCK_SIZE); } mem_merge_all_blocks( ); // mem_dump_memory( ); - // LOG("%u МБ объем доступной памяти, %u МБ объем виртуальной памяти\n", (bitmap_available * BLOCK_SIZE) / 1024 / - // 1024, - // available / 1024 / 1024); + LOG("%u МБ объем доступной памяти, %u МБ объем виртуальной памяти\n", (bitmap_available * BLOCK_SIZE) / 1024 / 1024, + available / 1024 / 1024); - // LOG("%u / %u блоков доступно\n", bitmap_available, bitmap_limit); + LOG("%u / %u блоков доступно\n", bitmap_available, bitmap_limit); } \ No newline at end of file