]> 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:03:19 +0000 (18:03 +0200)
Makefile
include/arch/x86/tty.h
kernel/arch/x86/tty/tty.c
kernel/kernel.c

index 2eedce2495997d6df2e6aa35a3d82f0a4ed74313..0e56c23ed6081d925a3a0299a6f32c6a6c0a7e92 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -19,6 +19,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/stage3/*.c boot/x86/fat32/*.s
@@ -54,4 +57,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 3ddd6b5c81c0dbc607bce4a3993c2f86027c50a4..e1410695fa881a5f6811a30c38047a64a92e1e5d 100644 (file)
@@ -27,4 +27,5 @@ extern void kprintb(const uint8_t byte);
 extern void kprintw(const uint16_t word);
 extern void kprintd(const uint32_t dword);
 extern void kprintq(const uint64_t qword);
+extern int kprintdec(uint32_t num);
 #endif
index 2110a7d003703dc3e0d2f89c483521889e2f33d7..861610dde3bc80b08231cc8cbe745abd96dfd615 100644 (file)
@@ -175,3 +175,38 @@ void kprintq(uint64_t qword)
        temp = qword & 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 9257a0e9cdedc7a251d84912414f5591c9c87976..16b2b404e9f009fbe4e0ed912612152c6b3aa3aa 100644 (file)
@@ -59,5 +59,9 @@ void kmain(struct e820_map *mmap, int mmap_size)
        pic_unmask(1);
        asm volatile ("sti");
        kprint("All done\n", 0);
+       kprintdec(12345);
+       kprintc('\n');
+       kprintdec(6789);
+       kprintc('\n');
        while(1);
 }