]> git.dujemihanovic.xyz Git - nameless-os.git/commitdiff
Add ability to print numbers in decimal
authorDuje Mihanović <duje.mihanovic@skole.hr>
Fri, 13 May 2022 18:19:23 +0000 (20:19 +0200)
committerDuje Mihanović <duje.mihanovic@skole.hr>
Wed, 22 Jun 2022 16:06:27 +0000 (18:06 +0200)
Makefile
include/arch/x86/tty.h
kernel/arch/x86/tty/tty.c
kernel/kernel.c

index aee8cc187a36d118823f8b1e66abedbbd4a99d87..f5a33b6d70eec5a59eb84b17b34bf3dfd92b1dfe 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,7 @@ QEMU = qemu-system-i386 -monitor stdio
 
 export GIT_REV = $(shell git describe --long HEAD)
 
-CFLAGS = -std=gnu89 -g -Iinclude/arch/x86 -ffreestanding -DGIT_COMMIT=\"$(GIT_REV)\"
+CFLAGS = -std=gnu99 -g -Iinclude/arch/x86 -ffreestanding -DGIT_COMMIT=\"$(GIT_REV)\"
 
 KERNEL_OBJ = kernel/entry.o kernel/arch/x86/tty/tty.o kernel/drivers/irq/i8259a.o kernel/arch/x86/irq/idt.o kernel/arch/x86/irq/sample_handler.o kernel/kernel.o
 BOOTLOADER_OBJ = boot/x86/mbr boot/x86/vbr-fat32 boot/x86/stage3/LOADER.BIN
@@ -18,6 +18,9 @@ bootloader: $(BOOTLOADER_OBJ)
 run: all
        $(QEMU) boot/x86/disk.img
 
+debug: all
+       $(QEMU) -s -S boot/x86/disk.img
+
 boot/x86/mbr: boot/x86/mbr.s
 boot/x86/vbr-fat32: boot/x86/vbr-fat32.s boot/x86/fat32/*.s 
 boot/x86/stage3/LOADER.BIN: boot/x86/stage3/*.s boot/x86/fat32/*.s
@@ -52,4 +55,4 @@ clean:
        -rm kernel/kernel.{bin,dbg,elf} ${KERNEL_OBJ}
        cd boot/x86 && $(MAKE) clean
 
-.PHONY: default all clean run bootloader
+.PHONY: default all clean run debug bootloader
index 22247379ede32e1615192c1558f5bc05318991b0..42857acc4c68cbfd5cc5238c492c7688b100d26d 100644 (file)
@@ -25,4 +25,5 @@ extern void kprint(const char *string, uint8_t color);
 extern void kprintb(const uint8_t byte);
 extern void kprintw(const uint16_t word);
 extern void kprintd(const uint32_t dword);
+extern int kprintdec(uint32_t num);
 #endif
index 07d734e54fc00f1919e51e0efe624271158c2e01..51686a3c8901c3a4f56b2a8ead3e834624b048a4 100644 (file)
@@ -137,3 +137,38 @@ void kprintd(uint32_t dword)
        temp = dword & 0xF;
        kprintc(hex_chars[temp], VGA_COLOR_LIGHT_GRAY);
 }
+
+int kprintdec(uint32_t num)
+{
+       char buffer[11];
+       int digits = 10;
+       /* TODO: make an actual memset function to use instead of this */
+       for (int i=0; i<11; i++) {
+               buffer[i] = 0;
+       }
+
+       /* put the numbers in the buffer */
+       for (int i=9; i>0 && num>0; i--) {
+               uint8_t currdigit = num%10;
+               buffer[i] = currdigit+'0';
+               num /= 10;
+       }
+
+       /* shift the array as much as needed */
+       while (*buffer == '\0') {
+               digits--;
+               for (int i=0; i<9; i++) {
+                       buffer[i] = buffer[i+1];
+               }
+       }
+
+       /* zero out any leftovers */
+       if (digits < 10) {
+               for (int i=digits; i<10; i++) {
+                       buffer[i] = '\0';
+               }
+       }
+
+       kprint(buffer, 0);
+       return digits;
+}
index 4c6efd8692da90d7ab15cf782846b3194e9483f7..24deeb9cb9d474fb1e465e27b96ecb5ae0cd6a6a 100644 (file)
@@ -27,5 +27,9 @@ void kmain(void)
        pic_unmask(1);
        asm volatile ("sti");
        kprint("All done\n", 0);
+       kprintdec(12345);
+       kprintc('\n');
+       kprintdec(6789);
+       kprintc('\n');
        while(1);
 }