#include #include #include static psf_font_t* font; static uint32_t console_row; static uint32_t console_col; static uint32_t console_text_color; static uint32_t console_backgrnd_color; static void write_vga_char(char c) { uint32_t vga_pitch = vga_get_pitch(); uint8_t* glyph = (uint8_t*)font->glyphs + (c * font->hdr->charsz); uint32_t pixel_y_start = console_row * font->hdr->charsz; uint32_t pixel_x_start = console_col * 8; for (uint32_t y = 0; y < font->hdr->charsz; y++) { uint8_t bits = glyph[y]; uint8_t* row_bytes = (uint8_t*)VGA_FRAMEBUFFER + ((pixel_y_start + y) * vga_pitch); uint32_t* pixel_row = (uint32_t*)row_bytes; for (int x = 0; x < 8; x++) { if (bits & (0b10000000 >> x)) { pixel_row[pixel_x_start + x] = console_text_color; } else { pixel_row[pixel_x_start + x] = console_backgrnd_color; } } } } int set_console_font(const char* path) { font = load_font(path); return font != NULL; } void set_console_fg(uint32_t color) { console_text_color = color; } void set_console_bg(uint32_t color) { console_backgrnd_color = color; } void console_init() { console_row = 0; console_col = 0; set_console_fg(0xFFFFFFFF); vga_clear_scrn(0x000000FF); } void console_putchar(char c) { write_vga_char(c); }