2016-02-27 12:51:25 -05:00
|
|
|
/* Console.cc
|
|
|
|
* vim: set tw=80:
|
|
|
|
* Eryn Wells <eryn@erynwells.me>
|
|
|
|
*/
|
|
|
|
/**
|
|
|
|
* Implementation of the Console class.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "Console.hh"
|
|
|
|
|
2016-02-27 13:02:49 -05:00
|
|
|
namespace kernel {
|
|
|
|
|
2016-02-27 12:51:25 -05:00
|
|
|
/** Create a VGA color pair. */
|
|
|
|
static inline uint8_t
|
|
|
|
makeVGAColor(Console::Color fg,
|
|
|
|
Console::Color bg)
|
|
|
|
{
|
2016-02-27 13:02:49 -05:00
|
|
|
return uint8_t(fg) | uint8_t(bg) << 4;
|
2016-02-27 12:51:25 -05:00
|
|
|
}
|
|
|
|
|
2016-02-27 13:02:49 -05:00
|
|
|
|
2016-02-27 12:51:25 -05:00
|
|
|
/** Create a VGA character entry. */
|
|
|
|
static inline uint16_t
|
|
|
|
makeVGAEntry(char c,
|
|
|
|
uint8_t color)
|
|
|
|
{
|
|
|
|
uint16_t c16 = c;
|
|
|
|
uint16_t color16 = color;
|
|
|
|
return c16 | color16 << 8;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Console::Console()
|
2016-02-27 13:02:49 -05:00
|
|
|
: mBase(reinterpret_cast<uint16_t *>(0xB8000)),
|
|
|
|
mCursor{0, 0}
|
2016-02-27 12:51:25 -05:00
|
|
|
{ }
|
|
|
|
|
|
|
|
|
2016-02-27 13:02:49 -05:00
|
|
|
void
|
2016-02-27 12:51:25 -05:00
|
|
|
Console::clear(Console::Color color)
|
|
|
|
{
|
2016-02-27 13:02:49 -05:00
|
|
|
const uint16_t vgaColor = makeVGAColor(Color::LightGray, color);
|
2016-02-27 12:51:25 -05:00
|
|
|
for (size_t y = 0; y < Console::Height; y++) {
|
|
|
|
for (size_t x = 0; x < Console::Width; x++) {
|
|
|
|
const size_t index = y * Console::Width + x;
|
2016-02-27 13:02:49 -05:00
|
|
|
mBase[index] = makeVGAEntry(' ', vgaColor);
|
2016-02-27 12:51:25 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
} /* namespace kernel */
|