#pragma once #include #include #define dprintln(...) \ do { \ BAN::Formatter::print(Serial::serial_putc, "[{5}.{3}] {}:{}: ", PIT::ms_since_boot() / 1000, PIT::ms_since_boot() % 1000, __FILE__, __LINE__); \ BAN::Formatter::print(Serial::serial_putc, __VA_ARGS__); \ BAN::Formatter::print(Serial::serial_putc, "\r\n"); \ } while(false) #define dwarnln(...) \ do { \ BAN::Formatter::print(Serial::serial_putc, "\e[33m"); \ dprintln(__VA_ARGS__); \ BAN::Formatter::print(Serial::serial_putc, "\e[m"); \ } while(false) #define derrorln(...) \ do { \ BAN::Formatter::print(Serial::serial_putc, "\e[31m"); \ dprintln(__VA_ARGS__); \ BAN::Formatter::print(Serial::serial_putc, "\e[m"); \ } while(false) #define BOCHS_BREAK() asm volatile("xchgw %bx, %bx") namespace Serial { void initialize(); void serial_putc(char); }