Skip to content

Commit

Permalink
Исправление отрисовки отладочной информации
Browse files Browse the repository at this point in the history
  • Loading branch information
0Nera committed Jan 13, 2024
1 parent b6ad573 commit 210bea4
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 28 deletions.
2 changes: 1 addition & 1 deletion include/version.h
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#define VERSION_MAJOR 0
#define VERSION_MINOR 1
#define VERSION_BUILD 934
#define VERSION_BUILD 943
37 changes: 24 additions & 13 deletions kernel/log.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,14 @@
#include <stdint.h>
#include <tool.h>

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) {
Expand All @@ -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;
Expand All @@ -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);
Expand All @@ -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);
}
}

Expand Down
24 changes: 10 additions & 14 deletions kernel/mem.c
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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);
}

0 comments on commit 210bea4

Please sign in to comment.