Files
RockOS/kernel/lib/console.c

57 lines
1.4 KiB
C
Raw Normal View History

2026-07-15 08:07:06 -05:00
#include <lib/console.h>
2026-07-14 17:40:30 -05:00
#include <lib/font.h>
2026-07-15 08:07:06 -05:00
2026-07-14 17:40:30 -05:00
#include <drivers/vga/vga.h>
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;
2026-07-15 08:07:06 -05:00
static void write_vga_char(char c) {
2026-07-14 17:40:30 -05:00
uint32_t vga_pitch = vga_get_pitch();
uint8_t* glyph = (uint8_t*)font->glyphs + (c * font->hdr->charsz);
2026-07-15 23:02:24 -05:00
uint32_t pixel_y_start = console_row * font->hdr->charsz;
uint32_t pixel_x_start = console_col * 8;
2026-07-14 17:40:30 -05:00
for (uint32_t y = 0; y < font->hdr->charsz; y++) {
uint8_t bits = glyph[y];
2026-07-15 23:02:24 -05:00
uint8_t* row_bytes = (uint8_t*)VGA_FRAMEBUFFER + ((pixel_y_start + y) * vga_pitch);
uint32_t* pixel_row = (uint32_t*)row_bytes;
2026-07-14 17:40:30 -05:00
for (int x = 0; x < 8; x++) {
if (bits & (0b10000000 >> x)) {
2026-07-15 23:02:24 -05:00
pixel_row[pixel_x_start + x] = console_text_color;
} else {
pixel_row[pixel_x_start + x] = console_backgrnd_color;
2026-07-14 17:40:30 -05:00
}
}
}
}
2026-07-15 08:07:06 -05:00
int set_console_font(const char* path) {
2026-07-14 17:40:30 -05:00
font = load_font(path);
2026-07-15 08:07:06 -05:00
return font != NULL;
2026-07-14 17:40:30 -05:00
}
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);
2026-07-15 23:02:24 -05:00
vga_clear_scrn(0x000000FF);
2026-07-14 17:40:30 -05:00
}
void console_putchar(char c) {
2026-07-15 08:07:06 -05:00
write_vga_char(c);
2026-07-14 17:40:30 -05:00
}