#include #include #include #define COM1 0x3f8 int is_transmit_empty () { return hos::io::inb(COM1 + 5) & 0x20; } namespace hos::io { com_logger::com_logger (enum log_level level) : logger (level) { outb(COM1 + 1, 0x00); outb(COM1 + 3, 0x80); outb(COM1 + 0, 0x03); outb(COM1 + 1, 0x00); outb(COM1 + 3, 0x03); outb(COM1 + 2, 0xc7); outb(COM1 + 4, 0x0b); outb(COM1 + 4, 0x1e); outb(COM1 + 0, 0xae); if (inb(COM1 + 0) != 0xae) { return; } outb(COM1 + 4, 0x0f); } void com_logger::flush () { std::size_t len = strlen(this->buffer); for (std::size_t i = 0; i < len; i++) { while (is_transmit_empty() == 0); outb(COM1 + 0, this->buffer[i]); } } }