summaryrefslogtreecommitdiff
path: root/src/kernel/main.c
blob: d7965e24b2dc8d2f153537609b053a80a1023910 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
__asm__(".code16gcc\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;
}

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");
}