diff --git a/src/headers/graphics.h b/src/headers/graphics.h index 69e8a57..3b6bcaf 100644 --- a/src/headers/graphics.h +++ b/src/headers/graphics.h @@ -153,6 +153,7 @@ static uint8_t VGA_basic8x8font[128][8] = { static uint8_t VGA_palette[256][3]; void VGA_setchar(virtualConsole* con, uint8_t x, uint8_t y, char val); void VGA_renderchar(virtualConsole* con); +void _VGA_renchar(uint8_t x, uint8_t y, char val, uint8_t fcolor[3], uint8_t bcolor[3]); static uint8_t* VGA_fbuf = (unsigned char*)0xA0000; static uint8_t VGA_values[] = { // THIS. THIS IS CANCER. // MISC diff --git a/src/headers/stdlib.h b/src/headers/stdlib.h index 67f3ee8..aaf48a1 100644 --- a/src/headers/stdlib.h +++ b/src/headers/stdlib.h @@ -5,6 +5,7 @@ uint32_t strlen32(char* str); void strrev32(char* str); uint8_t uitoa32(uint32_t x, char* str); void memcopy(void* dest, void* src, size_t size); +void kpanic(char* msg); static inline void outb(uint16_t port, uint8_t val) { __asm__ volatile ( "outb %b0, %w1" : : "a"(val), "Nd"(port) : "memory"); } diff --git a/src/headers/stdmem.h b/src/headers/stdmem.h deleted file mode 100644 index b116f98..0000000 --- a/src/headers/stdmem.h +++ /dev/null @@ -1,4 +0,0 @@ -#pragma once -#include "stddef.h" - -void memcpy32(void* dest, void* src, uint32_t length); \ No newline at end of file diff --git a/src/headers/tty.h b/src/headers/tty.h index b81eaf4..4d5f79a 100644 --- a/src/headers/tty.h +++ b/src/headers/tty.h @@ -8,12 +8,13 @@ typedef struct { uint8_t FU_forecolor[3]; uint8_t FU_backcolor[3]; char charbuf[40][25]; + uint8_t enableRendering; } virtualConsole; typedef void (*FU_kupdbuf_t)(virtualConsole*); #define consolesAmount 12 -static virtualConsole consoles[consolesAmount]; -static uint8_t currentConsole = 0; +extern virtualConsole consoles[consolesAmount]; +extern uint8_t currentConsole; void con_kputchar(virtualConsole* con, char x); void con_kputstr(virtualConsole* con, char* x); diff --git a/src/kernel/entry.c b/src/kernel/entry.c index 1f124d7..7d4d334 100644 --- a/src/kernel/entry.c +++ b/src/kernel/entry.c @@ -50,6 +50,11 @@ void kernel_main(struct multiboot_info* header, uint32_t magic) { kputstr("Setting up stdout rendering: "); for (uint8_t i=0;i 127) { // out of bounds, no ascii character + return; + } for (uint8_t px=0;px<8;px++) { for (uint8_t py=0;py<8;py++) { VGA_setpix(x*8+px,y*8+py,(VGA_basic8x8font[val][py] >> px) & 1 ? *(VGA_pixel*)fcolor : *(VGA_pixel*)bcolor); diff --git a/src/kernel/stdlib.c b/src/kernel/stdlib.c index 1899835..6c1ca8b 100644 --- a/src/kernel/stdlib.c +++ b/src/kernel/stdlib.c @@ -1,4 +1,5 @@ #include "../headers/stdlib.h" +#include "../headers/graphics.h" uint32_t strlen32(char* str) { uint32_t i = 0; @@ -27,4 +28,23 @@ void memcopy(void* dest, void* src, size_t size) { for (size_t i=0;ikstdout_count == 8192) { @@ -10,9 +13,11 @@ void con_kputchar(virtualConsole* con, char x) { con->kstdout_count --; } con->kstdout[con->kstdout_count++] = x; - if (&consoles[currentConsole] == con) { // current console + if (&consoles[currentConsole] == con && con->enableRendering) { // current console if (con->FU_kupdbuf != 0x00) { ((FU_kupdbuf_t)con->FU_kupdbuf)(con); + } else { + kpanic("virtualConsole failure:\nFU_kupdbuf is 0x00."); } } } @@ -30,6 +35,7 @@ void con_init(virtualConsole* con) { con->FU_backcolor[0] = 0x00; con->FU_backcolor[1] = 0x00; con->FU_backcolor[2] = 0x00; + con->enableRendering = 0; } void kputchar(char x) { con_kputchar(&consoles[currentConsole], x);