diff options
Diffstat (limited to 'src/vgaterminal.hpp')
-rw-r--r-- | src/vgaterminal.hpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/vgaterminal.hpp b/src/vgaterminal.hpp new file mode 100644 index 0000000..9f8d5f3 --- /dev/null +++ b/src/vgaterminal.hpp @@ -0,0 +1,51 @@ +#ifndef VGATERMINAL_HPP +#define VGATERMINAL_HPP + +#include "textoutput.hpp" + +#include <cstddef> +#include <cstdint> + +class VGATerminal : public TextOutput +{ +public: + enum class Color : std::uint8_t + { + Black = 0, + Blue, + Green, + Cyan, + Red, + Magenta, + Brown, + LightGray, + DarkGray, + LightBlue, + LightGreen, + LightCyan, + LightRed, + LightMagenta, + LightBrown, + White + }; + + using enum Color; + + virtual void write(char c) noexcept final; + +private: + static constexpr std::uintptr_t Videoram = 0xB8000; + static constexpr unsigned Width = 80; + static constexpr unsigned Height = 25; + + unsigned offset = 0; + Color foreground = LightGray; + Color background = Black; + + void put(char c) noexcept; + void checkpos() noexcept; + void updatecursor() const noexcept; +}; + +#endif // VGATERMINAL_HPP + |