diff --git a/kernel.c b/kernel.c index ff1b5d2..245bd08 100644 --- a/kernel.c +++ b/kernel.c @@ -1,9 +1,37 @@ #include "multiboot.h" #include "vga.h" -// static inline void outb(unsigned int port, unsigned char val) { -// asm volatile ("outb %0, %1" : : "a"(val), "Nd"(port) : "memory"); -// } +/* +static inline void outb(unsigned int port, unsigned char val) { + asm volatile ("outb %0, %1" : : "a"(val), "Nd"(port) : "memory"); +} +*/ + +char* itoa(int value, int base) { + char* result; + + // check that the base if valid + if (base < 2 || base > 36) { *result = '\0'; return result; } + + char* ptr = result, *ptr1 = result, tmp_char; + int tmp_value; + + do { + tmp_value = value; + value /= base; + *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)]; + } while ( value ); + + // Apply negative sign + if (tmp_value < 0) *ptr++ = '-'; + *ptr-- = '\0'; + while(ptr1 < ptr) { + tmp_char = *ptr; + *ptr--= *ptr1; + *ptr1++ = tmp_char; + } + return result; +} void kmain (unsigned int mbootmagick, multiboot_info_t* mbootinfo) { @@ -23,10 +51,12 @@ void kmain (unsigned int mbootmagick, multiboot_info_t* mbootinfo) { vga_write_color("INVALID MAGIC", VGA_COLOR_BLACK, VGA_COLOR_RED); return; } - vga_write(mbootinfo->boot_loader_name); + vga_write((char *)mbootinfo->boot_loader_name); // Check videomode - vga_write("\nVideomode: "); + vga_write("\nVideomode: 0x"); + vga_write(itoa(mbootinfo->vbe_mode, 16)); + vga_write(": "); switch (mbootinfo->vbe_mode) { case MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED: vga_write("Indexed");