From 61f66209c5c19aef3849a945a411d465fe188908 Mon Sep 17 00:00:00 2001 From: iximeow Date: Sat, 27 Sep 2014 12:36:45 -0700 Subject: Basic vga write functions currently has bug in pointers contained in bss, unsure why. Build, load, or segments are wrong. leaning towards segments. --- src/kernel/main.c | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/kernel/main.c b/src/kernel/main.c index f8e6c6a..d7965e2 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -1,17 +1,35 @@ __asm__(".code16gcc\n"); -int func() { - __asm__( - "mov $0x10, %%cx \n" - "mov $0x0A, %%ah \n" - "mov $0x74, %%al \n" - "int $0x10 \n" - "mov $42, %%eax \n" - "ret \n" - : : - ); +void vga_graphics_write_at_offset(char, short); +void vga_graphics_write(char); +void vga_graphics_write_str(char*); + +static short CURSOR_LOC = 0; + +void _start() { + vga_graphics_write('a'); + vga_graphics_write('/'); + vga_graphics_write('b'); + char foo[] = "hello how are you"; + vga_graphics_write_str(foo); + while(1) { } +} + +void vga_graphics_write_str(char* str) { + while(*str) { + vga_graphics_write(*str++); + } +} + +void vga_graphics_write(char value) { + vga_graphics_write_at_offset(value, CURSOR_LOC); + CURSOR_LOC += 2; } -int _start() { - return 1; +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"); } -- cgit v1.1