#include #include #include #define COM1_PORT 0x3F8 void serial_init(void) { outb(COM1_PORT + 1, 0x00); // Disable interrupts outb(COM1_PORT + 3, 0x80); // Enable DLAB (set baud rate divisor) outb(COM1_PORT + 0, 0x01); // Set divisor to 1 (lo byte) -> 115200 baud outb(COM1_PORT + 1, 0x00); // (hi byte) outb(COM1_PORT + 3, 0x03); // 8 bits, no parity, one stop bit outb(COM1_PORT + 2, 0xC7); // Enable FIFO, clear them, with 14-byte threshold outb(COM1_PORT + 4, 0x0B); // IRQs enabled, RTS/DSR set } static int serial_tx_ready(void) { return inb(COM1_PORT + 5) & 0x20; } void serial_putchar(char c) { while (serial_tx_ready() == 0); outb(COM1_PORT, c); } void kernel_main(void) { serial_init(); register_console_callback(serial_putchar); printk("wkern version %s (Compiler %s, Linker %s) on %s\n", VERSION, COMPILER_NAME, LINKER_NAME, ARCH_NAME); }