Add printf, gdb support, fix gdt
diff --git a/src/vga.c b/src/vga.c
index 1b10833..11fbc0c 100644
--- a/src/vga.c
+++ b/src/vga.c
@@ -1,5 +1,6 @@
#include "vga.h"
#include "mem.h"
+#include "log.h"
static uint cursor_x = 0;
static uint cursor_y = 0;
@@ -88,24 +89,44 @@
void vga_putd(uint d)
{
-
+ char str[48];
+ memset(str, 0, 48);
+ uint i = 0;
+
+ while (d > 0 && i < 48) // should never be more than 48 digits anyway
+ {
+ str[i++] = (d % 10) + '0';
+ d /= 10;
+ }
+
+ for (uint j = i; j; j--)
+ {
+ vga_put(str[j - 1]);
+ }
}
-static void vga_put_nibble(uchar n)
+static bool vga_put_nibble(uchar n, bool first)
{
+ if (first && n == 0)
+ return true;
+
if (n <= 9)
vga_put('0' + n);
else
vga_put('A' + n - 10);
+
+ return false;
}
void vga_putx(uint x)
{
+ bool first = true;
+
for (uint mask = 0xFF000000, shift = 24; mask; mask >>= 8, shift -= 8)
{
uchar byte = (x & mask) >> shift;
- vga_put_nibble((byte & 0xf0) >> 8);
- vga_put_nibble(byte & 0x0f);
+ first = vga_put_nibble((byte & 0xf0) >> 8, first);
+ first = vga_put_nibble(byte & 0x0f, first);
}
}