From 2df1f6c006b29e135bf40f1e95b9c152dc6355a5 Mon Sep 17 00:00:00 2001 From: Drew Galbraith Date: Wed, 22 Nov 2023 08:56:26 -0800 Subject: [PATCH] [Teton] Print out every character into the framebuffer as a test. --- sys/teton/framebuffer/console.cpp | 20 ++++++++++++++++++-- sys/teton/framebuffer/console.h | 3 +++ sys/teton/teton.cpp | 5 ++++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/sys/teton/framebuffer/console.cpp b/sys/teton/framebuffer/console.cpp index f206663..0086cbc 100644 --- a/sys/teton/framebuffer/console.cpp +++ b/sys/teton/framebuffer/console.cpp @@ -1,15 +1,25 @@ #include "framebuffer/console.h" +#include + void Console::WriteChar(char c) { + if (c == '\n') { + CursorReturn(); + return; + } + uint64_t row = cursor_pos_ / cols(); + if (row >= rows()) { + crash("Unimplemented console scroll.", glcr::UNIMPLEMENTED); + } uint64_t fb_row = row * (psf_.height() + 1); uint64_t col = cursor_pos_ % cols(); uint64_t fb_col = col * (psf_.width() + 1); uint8_t* glyph = psf_.glyph(c); - for (uint8_t r = fb_row; r < fb_row + psf_.height(); r++) { - for (uint8_t c = fb_col; c < fb_col + psf_.width(); c++) { + for (uint32_t r = fb_row; r < fb_row + psf_.height(); r++) { + for (uint32_t c = fb_col; c < fb_col + psf_.width(); c++) { uint8_t glyph_offset = psf_.width() - (c - fb_col) - 1; if ((glyph[r] & (1 << glyph_offset))) { framebuf_.DrawPixel(r, c, 0xFFFFFFF); @@ -21,8 +31,14 @@ void Console::WriteChar(char c) { cursor_pos_++; } + void Console::WriteString(glcr::StringView str) { for (uint64_t i = 0; i < str.size(); i++) { WriteChar(str[i]); } } + +void Console::CursorReturn() { + cursor_pos_ -= cursor_pos_ % cols(); + cursor_pos_ += cols(); +} diff --git a/sys/teton/framebuffer/console.h b/sys/teton/framebuffer/console.h index 2e2a8c3..9afd2f4 100644 --- a/sys/teton/framebuffer/console.h +++ b/sys/teton/framebuffer/console.h @@ -20,4 +20,7 @@ class Console { Framebuffer& framebuf_; Psf& psf_; uint64_t cursor_pos_ = 0; + + void CursorIncr(); + void CursorReturn(); }; diff --git a/sys/teton/teton.cpp b/sys/teton/teton.cpp index b4b53ee..9152f8b 100644 --- a/sys/teton/teton.cpp +++ b/sys/teton/teton.cpp @@ -41,7 +41,10 @@ uint64_t main(uint64_t init_port) { psf.DumpHeader(); Console console(fbuf, psf); - console.WriteString("Hello World!"); + console.WriteString("Hello World!\n"); + for (uint8_t i = 0x20; i < 0x7E; i++) { + console.WriteChar(i); + } // 3. Write a line to the screen.