aboutsummaryrefslogtreecommitdiff
path: root/source/arch/x86_64/src/video
diff options
context:
space:
mode:
Diffstat (limited to 'source/arch/x86_64/src/video')
-rw-r--r--source/arch/x86_64/src/video/vga/text.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/source/arch/x86_64/src/video/vga/text.cpp b/source/arch/x86_64/src/video/vga/text.cpp
new file mode 100644
index 0000000..11e3b1a
--- /dev/null
+++ b/source/arch/x86_64/src/video/vga/text.cpp
@@ -0,0 +1,29 @@
+#include "arch/video/vga/text.hpp"
+
+#include "arch/boot/pointers.hpp"
+#include "memory/asm_pointer.hpp"
+
+#include <algorithm>
+#include <string_view>
+
+namespace teachos::arch::video::vga::text
+{
+
+ namespace
+ {
+ auto constinit text_buffer = teachos::boot::asm_pointer{boot::vga_buffer_pointer};
+
+ auto write(char character, std::byte color) -> void
+ {
+ auto & p = *text_buffer;
+ (*p++) = static_cast<std::byte>(character);
+ (*p++) = color;
+ };
+ } // namespace
+
+ auto write(std::string_view text, std::byte color) -> void
+ {
+ std::ranges::for_each(text, [&](auto character) { write(character, color); });
+ }
+
+} // namespace teachos::arch::video::vga::text \ No newline at end of file