__asm__(".code16gcc\n"); void vga_graphics_write_at_offset(char, short); void vga_graphics_write(char); void vga_graphics_write_with_attr(char, char); void vga_graphics_write_str(char*); void vga_graphics_byte_hex(char); //void vga_graphics_short_hex(short); //void vga_graphics_int_hex(int); //void vga_graphics_long_hex(long); void clear(); static short CURSOR_LOC = 0; static char* HEX_CHARS = "0123456789abcdef"; char foo[] = "hello how are you"; void _start() { clear(); vga_graphics_write_with_attr('a', 1); vga_graphics_write_with_attr('/', 2); vga_graphics_write_with_attr('b', 3); vga_graphics_write_str(foo); vga_graphics_write(':'); vga_graphics_write(' '); vga_graphics_byte_hex(0x40); while(1) { } } void clear() { int TERM_WIDTH = 80; int TERM_HEIGHT = 25; int i = 0; while(i < TERM_WIDTH * TERM_HEIGHT) { vga_graphics_write_with_attr(' ', 7); i++; } CURSOR_LOC = 0; } void vga_graphics_write_str(char* str) { while(*str) { vga_graphics_write_with_attr(*str++, 7); } } void vga_graphics_write_with_attr(char value, char attr) { vga_graphics_write_at_offset(value, CURSOR_LOC++); vga_graphics_write_at_offset(attr, CURSOR_LOC++); } void vga_graphics_write(char value) { vga_graphics_write_at_offset(value, CURSOR_LOC); CURSOR_LOC += 2; } void vga_graphics_byte_hex(char value) { char low = value & 0x0f; char high = (value & 0xf0) >> 4; vga_graphics_write(HEX_CHARS[high]); vga_graphics_write(HEX_CHARS[low]); } void vga_graphics_write_at_offset(char value, short offset) { __asm__( "mov %0, %%al \n" "mov %1, %%di \n" "mov %%al, %%gs:(%%di) \n" : :"r"(value), "r"(offset) : "%ax", "%di"); }