summaryrefslogtreecommitdiff
path: root/kernel/log.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/log.c')
-rw-r--r--kernel/log.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/kernel/log.c b/kernel/log.c
index 47f6d6f..11ac783 100644
--- a/kernel/log.c
+++ b/kernel/log.c
@@ -1,13 +1,50 @@
#include "log.h"
#include <cpu/arch_inst.h>
+#include <drivers/serial.h>
+#include <drivers/vbe.h>
+#include <fonts.h>
#include <sched/scheduler.h>
#include <stdarg.h>
+int log_to_screen = 0;
+
+extern u8 *framebuffer;
+extern u32 framebuffer_width;
+extern u32 framebuffer_height;
+
+void log_enable_screen(void) {
+ log_to_screen = 1;
+ u32 *p = (u32 *)framebuffer;
+ for (u32 i = 0; i < framebuffer_width * framebuffer_height; i++, p++) {
+ *p = 0xFF0000;
+ }
+}
+
struct stackframe {
struct stackframe *ebp;
u32 eip;
};
+u32 x = 0;
+u32 y = 0;
+
+void log_char(const char c) {
+ write_serial(c);
+ if (log_to_screen) {
+ if ('\n' == c) {
+ x = 0;
+ y += 8;
+ return;
+ }
+ if (x > 1000) {
+ y += 8;
+ x = 0;
+ }
+ vbe_drawfont(x, y, c);
+ x += 8;
+ }
+}
+
void dump_backtrace(u32 max_frames) {
struct stackframe *stk = (void *)get_current_sbp();
kprintf("Stack trace:\n");