mirror of
https://github.com/0Nera/BMOSP.git
synced 2025-03-30 13:13:22 +03:00
Исправление отрисовки отладочной информации
This commit is contained in:
parent
b6ad573dfa
commit
210bea4f42
@ -1,3 +1,3 @@
|
||||
#define VERSION_MAJOR 0
|
||||
#define VERSION_MINOR 1
|
||||
#define VERSION_BUILD 934
|
||||
#define VERSION_BUILD 943
|
||||
|
37
kernel/log.c
37
kernel/log.c
@ -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) {
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
24
kernel/mem.c
24
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);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user