aboutsummaryrefslogtreecommitdiff
path: root/source/arch/x86_64/include
diff options
context:
space:
mode:
Diffstat (limited to 'source/arch/x86_64/include')
-rw-r--r--source/arch/x86_64/include/arch/boot/pointers.hpp11
-rw-r--r--source/arch/x86_64/include/arch/io/port_io.hpp134
-rw-r--r--source/arch/x86_64/include/arch/kernel/main.hpp11
-rw-r--r--source/arch/x86_64/include/arch/video/vga/io.hpp41
-rw-r--r--source/arch/x86_64/include/arch/video/vga/text.hpp113
5 files changed, 0 insertions, 310 deletions
diff --git a/source/arch/x86_64/include/arch/boot/pointers.hpp b/source/arch/x86_64/include/arch/boot/pointers.hpp
deleted file mode 100644
index dcd14fe..0000000
--- a/source/arch/x86_64/include/arch/boot/pointers.hpp
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef TEACHOS_ARCH_X86_64_BOOT_POINTERS_HPP
-#define TEACHOS_ARCH_X86_64_BOOT_POINTERS_HPP
-
-#include <cstddef>
-
-namespace teachos::arch::boot
-{
- extern "C" std::byte const multiboot_information_pointer;
-} // namespace teachos::arch::boot
-
-#endif \ No newline at end of file
diff --git a/source/arch/x86_64/include/arch/io/port_io.hpp b/source/arch/x86_64/include/arch/io/port_io.hpp
deleted file mode 100644
index 5b61f90..0000000
--- a/source/arch/x86_64/include/arch/io/port_io.hpp
+++ /dev/null
@@ -1,134 +0,0 @@
-#ifndef TEACHOS_ARCH_X86_64_IO_PORT_IO_HPP
-#define TEACHOS_ARCH_X86_64_IO_PORT_IO_HPP
-
-#include <concepts>
-#include <cstddef>
-#include <cstdint>
-#include <type_traits>
-
-namespace teachos::arch::io
-{
-
- /**
- * @brief An I/O port of a given size at a given address.
- *
- * @tparam Address The address (port number) of the I/O port.
- * @tparam Size The size (in bytes) of the I/O port.
- */
- template<std::uint16_t Address, std::size_t Size>
- struct port
- {
- static_assert(Size == 1 || Size == 2 || Size == 4, "A port must be either 1, 2, or 4 bytes in size");
-
- /**
- * @brief The type of data available for reading and writing through this port.
- */
- using io_type =
- std::conditional_t<Size == 1, std::byte, std::conditional_t<Size == 2, std::uint16_t, std::uint32_t>>;
-
- /**
- * @brief Write a byte to the I/O port.
- *
- * @param data The data to write to the I/O port.
- */
- auto static write(io_type data) -> void
- requires(Size == 1)
- {
- asm volatile("mov %[port], %%dx\n"
- "mov %[data], %%al\n"
- "out %%al, %%dx\n"
- :
- : [port] "i"(Address), [data] "im"(data)
- : "dx", "al");
- }
-
- /**
- * @brief Write a word to the I/O port.
- *
- * @param data The data to write to the I/O port.
- */
- auto static write(io_type data) -> void
- requires(Size == 2)
- {
- asm volatile("mov %[port], %%dx\n"
- "mov %[data], %%ax\n"
- "out %%ax, %%dx\n"
- :
- : [port] "i"(Address), [data] "im"(data)
- : "dx", "ax");
- }
-
- /**
- * @brief Write a double-word to the I/O port.
- *
- * @param data The data to write to the I/O port.
- */
- auto static write(io_type data) -> void
- requires(Size == 4)
- {
- asm volatile("mov %[port], %%dx\n"
- "mov %[data], %%eax\n"
- "out %%eax, %%dx\n"
- :
- : [port] "i"(Address), [data] "im"(data)
- : "dx", "eax");
- }
-
- /**
- * @brief Read a byte from the I/O port.
- *
- * @return The data read from the I/O port.
- */
- auto static read() -> io_type
- requires(Size == 1)
- {
- auto data = io_type{};
- asm volatile("mov %[port], %%dx\n"
- "in %%dx, %%al\n"
- "mov %%al, %[data]\n"
- : [data] "=m"(data)
- : [port] "i"(Address)
- : "dx", "al");
- return data;
- }
-
- /**
- * @brief Read a word from the I/O port.
- *
- * @return The data read from the I/O port.
- */
- auto static read() -> io_type
- requires(Size == 2)
- {
- auto data = io_type{};
- asm volatile("mov %[port], %%dx\n"
- "in %%dx, %%ax\n"
- "mov %%ax, %[data]\n"
- : [data] "=m"(data)
- : [port] "i"(Address)
- : "dx", "ax");
- return data;
- }
-
- /**
- * @brief Read a double-word from the I/O port.
- *
- * @return The data read from the I/O port.
- */
- auto static read() -> io_type
- requires(Size == 4)
- {
- auto data = io_type{};
- asm volatile("mov %[port], %%dx\n"
- "in %%dx, %%eax\n"
- "mov %%eax, %[data]\n"
- : [data] "=m"(data)
- : [port] "i"(Address)
- : "dx", "eax");
- return data;
- }
- };
-
-} // namespace teachos::arch::io
-
-#endif \ No newline at end of file
diff --git a/source/arch/x86_64/include/arch/kernel/main.hpp b/source/arch/x86_64/include/arch/kernel/main.hpp
deleted file mode 100644
index 6961594..0000000
--- a/source/arch/x86_64/include/arch/kernel/main.hpp
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef TEACHOS_ARCH_X86_64_KERNEL_MAIN_HPP
-#define TEACHOS_ARCH_X86_64_KERNEL_MAIN_HPP
-
-#include <cstddef>
-
-namespace teachos::arch::kernel
-{
- auto main() -> void;
-}
-
-#endif \ No newline at end of file
diff --git a/source/arch/x86_64/include/arch/video/vga/io.hpp b/source/arch/x86_64/include/arch/video/vga/io.hpp
deleted file mode 100644
index 9226c5c..0000000
--- a/source/arch/x86_64/include/arch/video/vga/io.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef TEACHOS_ARCH_X86_64_VIDEO_VGA_IO_HPP
-#define TEACHOS_ARCH_X86_64_VIDEO_VGA_IO_HPP
-
-#include "arch/io/port_io.hpp"
-
-#include <cstddef>
-
-namespace teachos::arch::video::vga
-{
-
- namespace crtc
- {
-
- /**
- * @brief The address port of the CRT Controller
- */
- using address_port = arch::io::port<0x3d4, 1>;
-
- /**
- * @brief The data port of the CRT Controller
- */
- using data_port = arch::io::port<0x3d5, 1>;
-
- namespace registers
- {
- /**
- * @brief The address of the Cursor Start register of the CRTC
- */
- [[maybe_unused]] auto constexpr cursor_start = std::byte{0x0a};
-
- /**
- * @brief The address of the Cursor End register of the CRTC
- */
- [[maybe_unused]] auto constexpr curser_end = std::byte{0x0b};
- } // namespace registers
-
- }; // namespace crtc
-
-} // namespace teachos::arch::video::vga
-
-#endif \ No newline at end of file
diff --git a/source/arch/x86_64/include/arch/video/vga/text.hpp b/source/arch/x86_64/include/arch/video/vga/text.hpp
deleted file mode 100644
index 1e584d6..0000000
--- a/source/arch/x86_64/include/arch/video/vga/text.hpp
+++ /dev/null
@@ -1,113 +0,0 @@
-#ifndef TEACHOS_ARCH_X86_64_VIDEO_VGA_TEXT_HPP
-#define TEACHOS_ARCH_X86_64_VIDEO_VGA_TEXT_HPP
-
-#include <cstdint>
-#include <string_view>
-
-namespace teachos::arch::video::vga::text
-{
- /**
- * @brief The colors available in the standard VGA text mode.
- */
- enum struct color : std::uint8_t
- {
- black, /**< Equivalent to HTML color \#000000 */
- blue, /**< Equivalent to HTML color \#0000AA */
- green, /**< Equivalent to HTML color \#00AA00 */
- cyan, /**< Equivalent to HTML color \#00AAAA */
- red, /**< Equivalent to HTML color \#AA0000 */
- purple, /**< Equivalent to HTML color \#AA00AA */
- brown, /**< Equivalent to HTML color \#AA5500 */
- gray, /**< Equivalent to HTML color \#AAAAAA */
- };
-
- /**
- * @brief The foreground color modification flag.
- */
- enum struct foreground_flag : bool
- {
- none, /**< Apply no flag e.g., keep color as is. */
- intense, /**< Make the color more intense (usually brighter). */
- };
-
- /**
- * @brief The background color modification flag.
- */
- enum struct background_flag : bool
- {
- none, /**< Apply no flag e.g., keep color as is. */
- blink_or_bright, /**< Make the cell blink or more intense, dependent on the VGA configuration */
- };
-
- /**
- * @brief The VGA text mode attribute.
- *
- * In the text mode of VGA, every code point being presented is followed by an attribute description. This allows for
- * the modification of how the relevant "cell" is presented.
- *
- * @see vga::text::foreground_flag
- * @see vga::text::background_flag
- */
- struct attribute
- {
- color foreground_color : 3; /**< The foreground color of the cell, e.g. the color of the code point.*/
- enum foreground_flag foreground_flag : 1; /**< The foreground color modification flag of the cell.*/
- color bacground_color : 3; /**< The background color of the cell.*/
- enum background_flag background_flag : 1; /**< The background color modification flag of the cell.*/
- };
-
- static_assert(sizeof(attribute) == 1, "The VGA text mode attribute must fit inside a single byte.");
-
- /**
- * @brief Commonly used VGA text mode attributes
- */
- namespace common_attributes
- {
- /**
- * @brief Make the affected cell display with a gray foreground and black background.
- */
- [[maybe_unused]] auto constexpr gray_on_black =
- attribute{color::gray, foreground_flag::none, color::black, background_flag::none};
-
- /**
- * @brief Make the affected cell display with a green foreground and black background.
- */
- [[maybe_unused]] auto constexpr green_on_black =
- attribute{color::green, foreground_flag::none, color::black, background_flag::none};
-
- /**
- * @brief Make the affected cell display with a white (gray + intense) foreground and red background.
- */
- [[maybe_unused]] auto constexpr white_on_red =
- attribute{color::gray, foreground_flag::intense, color::red, background_flag::none};
- } // namespace common_attributes
-
- /**
- * @brief Clear the VGA text mode buffer.
- *
- * @note This function also resets the text mode buffer pointer.
- *
- * @param attribute The attribute to "clear" the screen with.
- */
- auto clear(attribute attribute = common_attributes::gray_on_black) -> void;
-
- /**
- * @brief Enable or disable the VGA text mode cursor.
- *
- * @param enabled Whether or not to enable the cursors.
- */
- auto cursor(bool enabled) -> void;
-
- /**
- * @brief Write a string of code points to the VGA text buffer.
- *
- * @note This function also updates the text mode buffer pointer.
- *
- * @param code_points A string of (8-bit) code points to write to the VGA text mode buffer.
- * @param attribute The attribute to apply to the written sequence of code points.
- * @see vga::text::attribute
- */
- auto write(std::string_view code_points, attribute attribute) -> void;
-} // namespace teachos::arch::video::vga::text
-
-#endif \ No newline at end of file