diff options
author | iximeow <me@iximeow.net> | 2015-09-28 02:39:47 -0700 |
---|---|---|
committer | iximeow <me@iximeow.net> | 2015-09-28 03:36:28 -0700 |
commit | 00d5836c010e82463fff1db14e588be881cdac4e (patch) | |
tree | 40bca3ce8cd2c74a2b4d604020512f0b85d6c8d1 /src/output | |
parent | afeac47a0192e0124006e13d6a098668903589fb (diff) |
refactor to multi-file build
Diffstat (limited to 'src/output')
-rw-r--r-- | src/output/vga_character.c | 49 | ||||
-rw-r--r-- | src/output/vga_character.h | 16 |
2 files changed, 65 insertions, 0 deletions
diff --git a/src/output/vga_character.c b/src/output/vga_character.c new file mode 100644 index 0000000..bd59a97 --- /dev/null +++ b/src/output/vga_character.c @@ -0,0 +1,49 @@ +#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; +} diff --git a/src/output/vga_character.h b/src/output/vga_character.h new file mode 100644 index 0000000..0d067f3 --- /dev/null +++ b/src/output/vga_character.h @@ -0,0 +1,16 @@ +#ifndef vga_character +#define vga_character + +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 vga_graphics_clear(void); + +#endif |