#include #include #include #include #include #include #define PORT_COM1 0x03F8 #define BUFFER_SIZE 1024 static bool amd64_debug_serial_tx_empty (void) { return (bool)(amd64_io_inb (PORT_COM1 + 5) & 0x20); } static void amd64_debug_serial_write (char x) { while (!amd64_debug_serial_tx_empty ()) ; amd64_io_outb (PORT_COM1, (uint8_t)x); } void debugprintf (const char* fmt, ...) { char buffer[BUFFER_SIZE]; memset (buffer, 0, sizeof (buffer)); va_list ap; va_start (ap, fmt); vsnprintf (buffer, sizeof (buffer), fmt, ap); va_end (ap); buffer[sizeof (buffer) - 1] = '\0'; const char* p = buffer; while (*p) { amd64_debug_serial_write (*p); p++; } } void amd64_debug_init (void) { amd64_io_outb (PORT_COM1 + 1, 0x00); amd64_io_outb (PORT_COM1 + 3, 0x80); amd64_io_outb (PORT_COM1 + 0, 0x03); amd64_io_outb (PORT_COM1 + 1, 0x00); amd64_io_outb (PORT_COM1 + 3, 0x03); amd64_io_outb (PORT_COM1 + 2, 0xC7); amd64_io_outb (PORT_COM1 + 4, 0x0B); }