#include "vga_character.h" __asm__(".code16gcc\n"); static short CURSOR_LOC = 0; static char* HEX_CHARS = "0123456789abcdef"; 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"); } void vga_graphics_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; }