#include #define COM1_BASE_PORT 0x3F8 static inline uint8_t inb(uint16_t port) { uint8_t data; __asm__ ("inb %%dx, %%al" : "=a"(data) : "d"(port)); return data; } static inline void outb(uint16_t port, uint8_t data) { __asm__ ("outb %%al, %%dx" :: "a"(data), "d"(port)); } void serial_write_char(char c) { while (1) { int line_status = inb(COM1_BASE_PORT + 5); if (line_status & 0x20) { break; } } outb(COM1_BASE_PORT, c); } void serial_write(const char *msg) { for (const char *c = msg; *c; c++) { outb(0xE9, *c); //serial_write_char(*c); } } extern void writechar(); void main() { serial_write("init\r\n"); writechar(); serial_write("foo\r\n"); for (;;) { //__asm__ ("hlt" :); } }