From 5b9651299e5d0b10ff0a20c4dab0808f3d82a694 Mon Sep 17 00:00:00 2001 From: josh Date: Mon, 13 Jul 2009 21:54:27 +0000 Subject: [PATCH] fixed a few formatting and string bugs, kprintf() working when called during bootstrapping! git-svn-id: svn://anubis/hos/trunk@47 5b3e749e-e535-0410-8002-a9bb6afbdfca --- kernel/boot/k_bootstrap.cc | 1 + kernel/lang/kio.cc | 15 ++++++++++----- kernel/lang/string.cc | 1 + 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/kernel/boot/k_bootstrap.cc b/kernel/boot/k_bootstrap.cc index a33344a..949e7b0 100644 --- a/kernel/boot/k_bootstrap.cc +++ b/kernel/boot/k_bootstrap.cc @@ -48,6 +48,7 @@ u32_t k_bootstrap(mb_info_t * mb_info, u32_t mb_magic) mm_bootstrap(); kio_bootstrap(); + kprintf("Hello from kprintf()! %d, %x, %u, %l\n", 42, 0xabcd0123, 0xFFFFFFFF, -1234567891234ll); return 0; } diff --git a/kernel/lang/kio.cc b/kernel/lang/kio.cc index d1d0292..e558c96 100644 --- a/kernel/lang/kio.cc +++ b/kernel/lang/kio.cc @@ -21,7 +21,7 @@ extern "C" { void kio_bootstrap() { cursor_x = 0; - cursor_y = 8; + cursor_y = 9; } void kprintf(char * fmt, ...) @@ -91,7 +91,7 @@ void kvprintf(char * fmt, va_list args) void kputc(char c) { - u16_t * console_memory = (u16_t *) CONSOLE_MEMORY; + u16_t * console_memory = (u16_t *) (CONSOLE_MEMORY + KERNEL_OFFSET); console_memory += 80 * cursor_y + cursor_x; switch (c) { @@ -110,6 +110,7 @@ void kputc(char c) break; default: *console_memory = 0x0700 | (c & 0xFF); + cursor_x++; break; } if (cursor_x >= 80) @@ -166,10 +167,11 @@ static void fmt_u2a(char * buf, unsigned int val) } if (printing) { - *buf++ = '0' + (val % div); + *buf++ = '0' + n; } val -= n * div; } + *buf = '\0'; } static void fmt_ll2a(char * buf, long long val) @@ -201,10 +203,11 @@ static void fmt_ull2a(char * buf, unsigned long long val) } if (printing) { - *buf++ = '0' + (val % div); + *buf++ = '0' + n; } val -= n * div; } + *buf = '\0'; } static void fmt_x2a(char * buf, unsigned int val) @@ -219,9 +222,10 @@ static void fmt_x2a(char * buf, unsigned int val) } if (printing) { - *buf++ = "0123456789ABCDEF"[n]; + *buf++ = "0123456789abcdef"[n]; } } + *buf = '\0'; } static void fmt_o2a(char * buf, unsigned int val) @@ -239,4 +243,5 @@ static void fmt_o2a(char * buf, unsigned int val) *buf++ = "01234567"[n]; } } + *buf = '\0'; } diff --git a/kernel/lang/string.cc b/kernel/lang/string.cc index f8e8e5d..273b80e 100644 --- a/kernel/lang/string.cc +++ b/kernel/lang/string.cc @@ -9,6 +9,7 @@ void strcpy(char * dst, const char * src) { *dst++ = *src++; } + *dst = '\0'; } void memcpy(u8_t * dst, u8_t * src, u32_t size)