aboutsummaryrefslogtreecommitdiff
path: root/source/boot/include
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2023-10-07 17:15:31 +0200
committerFelix Morgner <felix.morgner@ost.ch>2023-10-07 17:15:31 +0200
commitff81b5438f280a59ca1825bfdf120d8f256bd154 (patch)
tree0a63ea3eb9fc28ca655c3ca3d1c70000d514aecd /source/boot/include
parent7e785ff5a7a2e9c98fd1679e74a728f4babf722a (diff)
downloadteachos-ff81b5438f280a59ca1825bfdf120d8f256bd154.tar.xz
teachos-ff81b5438f280a59ca1825bfdf120d8f256bd154.zip
x86_64: implement very simple VGA text output
Diffstat (limited to 'source/boot/include')
-rw-r--r--source/boot/include/boot/asm_pointer.hpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/source/boot/include/boot/asm_pointer.hpp b/source/boot/include/boot/asm_pointer.hpp
new file mode 100644
index 0000000..ec7141e
--- /dev/null
+++ b/source/boot/include/boot/asm_pointer.hpp
@@ -0,0 +1,43 @@
+#ifndef TEACHOS_BOOT_ASM_POINTER_HPP
+#define TEACHOS_BOOT_ASM_POINTER_HPP
+
+namespace teachos::boot
+{
+
+ template<typename Type>
+ struct asm_pointer
+ {
+ constexpr asm_pointer(Type & pointer)
+ : m_pointer{&pointer}
+ {
+ }
+
+ auto constexpr operator->() -> Type * { return m_pointer; }
+ auto constexpr operator->() const -> Type const * { return m_pointer; }
+ auto constexpr operator*() -> Type & { return *m_pointer; }
+ auto constexpr operator*() const -> Type const & { return *m_pointer; }
+
+ private:
+ Type * m_pointer;
+ };
+
+ template<typename Type>
+ struct asm_pointer<Type const>
+ {
+ constexpr asm_pointer(Type const & pointer)
+ : m_pointer{&pointer}
+ {
+ }
+
+ auto constexpr operator->() -> Type const * { return m_pointer; }
+ auto constexpr operator->() const -> Type const * { return m_pointer; }
+ auto constexpr operator*() -> Type const & { return *m_pointer; }
+ auto constexpr operator*() const -> Type const & { return *m_pointer; }
+
+ private:
+ Type const * m_pointer;
+ };
+
+} // namespace teachos::boot
+
+#endif \ No newline at end of file