/* needs to stay the first line */ asm(".code16gcc\njmp $0, $main"); /* space for additional code */ char WRITE_CHARACTER_TTY = 0x0E; void put(char c) { short command = WRITE_CHARACTER_TTY << 8 | c; // volatile because there is no output, so the function might get optimized away asm volatile("int $0x10;" :: "a"(command) ); } void main(void) { put('h'); put('e'); put('l'); put('l'); put('o'); }