20#include "pedigree/kernel/Log.h"
21#include "pedigree/kernel/core/BootIO.h"
22#include "pedigree/kernel/machine/Machine.h"
23#include "pedigree/kernel/machine/Serial.h"
24#include "pedigree/kernel/machine/Vga.h"
25#include "pedigree/kernel/processor/types.h"
26#include "pedigree/kernel/utilities/StaticString.h"
33 Vga* pVga = Machine::instance().
getVga(0);
36 uint16_t* pFramebuffer = *pVga;
37 if (pFramebuffer != 0)
43 str +=
"BootIO is initialized!\n";
44 write(str, Black, Black);
48void BootIO::write(T& str, Colour foreColour, Colour backColour) {
49 for (
size_t i = 0; i < str.length(); i++)
50 putCharVga(str[i], foreColour, backColour);
51 Vga* pVga = Machine::instance().
getVga(0);
56 startColour(Machine::instance().getSerial(0), foreColour, backColour);
58 for (
size_t j = 0; j < str.length(); j++)
59 Machine::instance().getSerial(0)->write(str[j]);
61 endColour(Machine::instance().getSerial(0));
66void BootIO::putCharVga(
const char c, Colour foreColour, Colour backColour) {
67 Vga* pVga = Machine::instance().
getVga(0);
69 uint16_t* pFramebuffer = *pVga;
70 if (pFramebuffer == 0)
84 uint8_t attributeByte = (backColour << 4) | (foreColour & 0x0F);
104 uint8_t attributeByte = (backColour << 4) | (foreColour & 0x0F);
118 uint8_t attributeByte = (Black << 4) | (White & 0x0F);
119 uint16_t blank =
' ' | (attributeByte << 8);
122 pFramebuffer[i] = pFramebuffer[i + pVga->
getNumCols()];
126 pFramebuffer[i] = blank;
133void BootIO::startColour(
Serial* pSerial, Colour foreColour, Colour backColour) {
134 pSerial->write_str(
"\033[");
135 switch (foreColour) {
137 pSerial->write_str(
"30");
140 pSerial->write_str(
"31");
143 pSerial->write_str(
"32");
146 pSerial->write_str(
"1;33");
149 pSerial->write_str(
"34");
152 pSerial->write_str(
"35");
155 pSerial->write_str(
"36");
158 pSerial->write_str(
"0;37");
161 pSerial->write_str(
"1;30");
164 pSerial->write_str(
"1;31");
167 pSerial->write_str(
"1;32");
170 pSerial->write_str(
"1;34");
173 pSerial->write_str(
"1;35");
176 pSerial->write_str(
"1;36");
179 pSerial->write_str(
"1;37");
184 pSerial->write_str(
";");
185 switch (backColour) {
187 pSerial->write_str(
"40");
190 pSerial->write_str(
"41");
193 pSerial->write_str(
"42");
196 pSerial->write_str(
"43");
199 pSerial->write_str(
"44");
202 pSerial->write_str(
"45");
205 pSerial->write_str(
"46");
208 pSerial->write_str(
"47");
216void BootIO::endColour(
Serial* pSerial) {}
218template EXPORTED_PUBLIC
void BootIO::write<TinyStaticString>(
TinyStaticString& str,
219 Colour foreColour, Colour backColour);
220template EXPORTED_PUBLIC
void BootIO::write<NormalStaticString>(
NormalStaticString& str,
223template EXPORTED_PUBLIC
void BootIO::write<LargeStaticString>(
LargeStaticString& str,
226template EXPORTED_PUBLIC
void BootIO::write<HugeStaticString>(
HugeStaticString& str,
227 Colour foreColour, Colour backColour);
EXPORTED_PUBLIC void write(T &str, Colour foreColour, Colour backColour)
static EXPORTED_PUBLIC Log & instance()
virtual Vga * getVga(size_t n)=0
virtual bool setLargestTextMode()=0
virtual size_t getNumRows()=0
virtual size_t getNumCols()=0