add linker and vga driver, working hello, world
[tigris.git] / stage1 / vga.c
blob439af062cf176e5d1d066b4cc44eda9a78d9cbd1
1 #include "kernel.h"
3 u16 vrow, vcol, vtone;
4 uc *vscr;
6 // v terminal drivers
7 uc
8 vcolour (fg, bg)
10 return (uc)fg | ((uc)bg << 4);
13 u16
14 vind (x, y)
16 return 2 * (y * WIDTH + x);
19 u16
20 vcind (x, y)
22 return 2 * (y * WIDTH + x) + 1;
25 vputat (c, colour, x, y)
27 vscr[vind (x, y)] = c;
28 vscr[vcind (x,y)] = colour;
31 vini ()
33 int fg, bg, i, j;
35 vrow = vcol = 0;
37 fg = GRAY;
38 bg = BLACK;
39 vtone = vcolour (fg, bg);
41 vscr = (uc *)0x0B8000;
43 for (i = 0; i < HEIGHT; ++i)
44 for (j = 0; j < WIDTH; ++j)
45 vputat (' ', vtone, j, i);
48 vputc (c)
49 uc c;
51 if (c == '\n')
52 vcol = WIDTH;
53 else
54 vputat (c, vtone, vcol++, vrow);
56 if (vcol == WIDTH) {
57 vcol = 0;
58 ++vrow;
61 if (vrow == HEIGHT)
62 vrow = 0;
65 vput (s)
66 uc *s;
68 while (*s)
69 vputc (*s++);