Исправление отрисовки отладочной информации

This commit is contained in:
Aren Elchinyan 2024-01-13 18:23:29 +03:00
parent b6ad573dfa
commit 210bea4f42
3 changed files with 35 additions and 28 deletions

View File

@ -1,3 +1,3 @@
#define VERSION_MAJOR 0 #define VERSION_MAJOR 0
#define VERSION_MINOR 1 #define VERSION_MINOR 1
#define VERSION_BUILD 934 #define VERSION_BUILD 943

View File

@ -14,12 +14,14 @@
#include <stdint.h> #include <stdint.h>
#include <tool.h> #include <tool.h>
static char start_buffer[4096]; static char start_buffer[8192];
static char *log_buffer; static char *log_buffer;
static uint64_t fb_pos_x = 4; static uint64_t fb_pos_x = 4;
static uint64_t fb_pos_y = 0; static uint64_t fb_pos_y = 0;
static uint64_t buf_pos = 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) { 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 == '\0' || fb_init_status < 1) { return; }
if (c == '\t') { if (c == '\t') {
fb_pos_x += FONT_6X8_SLIM_CHAR_WIDTH * 4; 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 = 4;
fb_pos_y += FONT_6X8_SLIM_CHAR_HEIGHT + 1; 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); print_char(fb_pos_x, fb_pos_y, c);
fb_pos_x += FONT_6X8_SLIM_CHAR_WIDTH; 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) { void log_putchar(char c) {
log_buffer[buf_pos] = c; log_buffer[buf_pos] = c;
com_write_byte(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]; } for (uint64_t i = 0; i < buf_max - 1; i++) { log_buffer[i] = log_buffer[i + 1]; }
if (fb_init_status < 1) { return; } if (fb_init_status < 1) { return; }
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++) { fb_putchar(log_buffer[i]); }
} else { } else {
fb_putchar(c);
buf_pos++; buf_pos++;
if (fb_init_status < 1) { return; }
log_fb_putchar(c);
} }
} }

View File

@ -250,14 +250,14 @@ void mem_init( ) {
mmmap_count = memmap_response->entry_count; mmmap_count = memmap_response->entry_count;
struct limine_memmap_entry **mmaps = memmap_response->entries; 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++) { for (uint64_t i = 0; i < mmmap_count; i++) {
available += mmaps[i]->length; available += mmaps[i]->length;
// LOG("\t%d: 0x%x\tдлина: 0x%x\tтип: %s\n", i + 1, // LOG("\t%d: 0x%x\tдлина: 0x%x\tтип: %s\n", i + 1, mmaps[i]->base, mmaps[i]->length,
// mmaps[i]->base, mmaps[i]->length, memory_types[mmaps[i]->type]); // memory_types[mmaps[i]->type]);
if (mmaps[i]->type == LIMINE_MEMMAP_FRAMEBUFFER) { if (mmaps[i]->type == LIMINE_MEMMAP_FRAMEBUFFER) {
LOG("На видеопамять BIOS/UEFI выделено: %u мегабайт + %u " LOG("На видеопамять BIOS/UEFI выделено: %u мегабайт + %u "
"килобайт\n", "килобайт\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); } 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 / %u блоков доступно\n", bitmap_available, bitmap_limit);
// LOG("Размер битовой карты: %u\n", bitmap_size); // LOG("Размер битовой карты: %u\n", bitmap_size);
alloc_init(mem_frame_alloc(1), BLOCK_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 мегабайта в аллокатор динамичной памяти // Выделяем по 4 мегабайта в аллокатор динамичной памяти
for (int64_t i = 0; i < 16; i += 4) { for (int64_t i = 0; i < 16; i += 8) { mem_add_block(mem_frame_alloc(1024), 1024 * BLOCK_SIZE); }
// fb_printf("%d/%u\n", i, 16);
mem_add_block(mem_frame_alloc(1024), 1024 * BLOCK_SIZE);
}
mem_merge_all_blocks( ); mem_merge_all_blocks( );
// mem_dump_memory( ); // mem_dump_memory( );
// LOG("%u МБ объем доступной памяти, %u МБ объем виртуальной памяти\n", (bitmap_available * BLOCK_SIZE) / 1024 / LOG("%u МБ объем доступной памяти, %u МБ объем виртуальной памяти\n", (bitmap_available * BLOCK_SIZE) / 1024 / 1024,
// 1024, available / 1024 / 1024);
// available / 1024 / 1024);
// LOG("%u / %u блоков доступно\n", bitmap_available, bitmap_limit); LOG("%u / %u блоков доступно\n", bitmap_available, bitmap_limit);
} }