diff --git a/include/fb.h b/include/fb.h index 38f5778..2130023 100644 --- a/include/fb.h +++ b/include/fb.h @@ -10,19 +10,35 @@ #ifndef FB_H #define FB_H +#include #include #include #include #include +enum colors { + WHITE = 0xFFFFFF, + BLACK = 0x000000, + RED = 0xFF0000, + GREEN = 0x00D000, + PRIMA_GREEN = 0x00FF00, + BLUE = 0x0000FF, + DARK_GREEN = 0x013220, +}; + #define GET_TICK_BIG arch_get_tick_b( ) #define GET_TICK_lOW arch_get_tick_l( ) +#define SCREEN_WIDTH width +#define SCREEN_HEIGHT height +#define SCREEN_BUFFER fb_addr + #define LOG(...) \ fb_printf("[%u]%s() (%s:%d) ", GET_TICK_BIG, __func__, __FILE__, \ __LINE__); \ fb_printf(__VA_ARGS__) +void fb_set_text_color(uint32_t color); void fb_init( ); void fb_print_buf(size_t x, size_t y, size_t h, size_t w, uint32_t *buf); void fb_printf(char *str, ...); diff --git a/kernel/fb.c b/kernel/fb.c index 2204904..f1e4735 100644 --- a/kernel/fb.c +++ b/kernel/fb.c @@ -15,15 +15,6 @@ #include #include -enum colors { - WHITE = 0xFFFFFF, - BLACK = 0x000000, - RED = 0xFF0000, - GREEN = 0x00FF00, - BLUE = 0x0000FF, - DARK_GREEN = 0x013220, -}; - static volatile struct limine_framebuffer_request framebuffer_request = { .id = LIMINE_FRAMEBUFFER_REQUEST, .revision = 0, @@ -44,9 +35,9 @@ uint16_t bpp; uint64_t pos_x = 4; uint64_t pos_y = 4; -#define SCREEN_WIDTH width -#define SCREEN_HEIGHT height -#define SCREEN_BUFFER fb_addr +void fb_set_text_color(uint32_t color) { + text_color = color; +} // Настройка прослойки графики ядра void fb_init( ) { @@ -64,7 +55,9 @@ void fb_init( ) { for (uint64_t i = 0; i < width * height; i++) { fb_addr[i] = background; } LOG("0x%x %ux%u\n", fb_addr, width, height); + if (framebuffer_response->framebuffer_count == 1) { return; } + LOG("Инициализация дополнительных: %u мониторов\n", framebuffer_response->framebuffer_count); @@ -130,6 +123,7 @@ void scroll_fb( ) { // Вывод одного символа static void fb_putchar(char c) { + pause( ); if (c == '\t') { pos_x += FONT_6X8_SLIM_CHAR_WIDTH * 4; } else if (c == '\n') { diff --git a/kernel/start.c b/kernel/start.c index dc75b93..0c268cb 100644 --- a/kernel/start.c +++ b/kernel/start.c @@ -23,14 +23,23 @@ void _start( ) { arch_init( ); mem_init( ); + fb_set_text_color(0x00FF00); LOG("\t\t\t\t *** Базовая Модульная Платформа Операционных Систем " "версии %u.%u.%u ***\n", VERSION_MAJOR, VERSION_MINOR, VERSION_BUILD); LOG("\t\t\t\t *** Дата сборки: %s %s ***\n", __DATE__, __TIME__); + fb_set_text_color(0x00D000); + mod_init( ); - pit_init( ); - LOG("Готово! Для выхода из симуляции: ESCAPE\n"); + // pit_init( ); + + mod_list_show( ); + + fb_set_text_color(0x00FF00); + LOG("Готово! Для выхода из симуляции удерживайте: ESCAPE\n"); + fb_set_text_color(0x00D000); + while (1) { uint64_t byte = inb(0x60); if (byte == 0x1) {