From a029218acd191521a46a2ef3c945f21c7710d7cf Mon Sep 17 00:00:00 2001 From: xamidev <121681048+xamidev@users.noreply.github.com> Date: Fri, 23 Aug 2024 15:22:19 +0200 Subject: [PATCH] Add: cursor & verbose output --- src/drivers/kb.c | 1 + src/drivers/serial.c | 1 + src/drivers/timer.c | 1 + src/kernel/gdt.c | 2 ++ src/kernel/idt.c | 2 ++ src/kernel/irq.c | 2 ++ src/kernel/isr.c | 1 + src/kernel/kmain.c | 27 ++++----------------------- src/kernel/shell.c | 22 ++++++++++++++++++++-- src/libc/stdio.h | 11 ++++++----- 10 files changed, 40 insertions(+), 30 deletions(-) diff --git a/src/drivers/kb.c b/src/drivers/kb.c index 11fa132..d5c7986 100644 --- a/src/drivers/kb.c +++ b/src/drivers/kb.c @@ -130,6 +130,7 @@ void keyboard_handler() void keyboard_install() { irq_install_handler(1, keyboard_handler); + printf("[keyboard] installed irq handler\n"); } char keyboard_getchar() diff --git a/src/drivers/serial.c b/src/drivers/serial.c index b4c28bb..7b08c3f 100644 --- a/src/drivers/serial.c +++ b/src/drivers/serial.c @@ -20,6 +20,7 @@ int init_serial() } outb(PORT+4, 0x0F); + puts("[serial] initialized i/o on port COM1\n"); return 0; } diff --git a/src/drivers/timer.c b/src/drivers/timer.c index 8c8c419..acccb19 100644 --- a/src/drivers/timer.c +++ b/src/drivers/timer.c @@ -17,6 +17,7 @@ void timer_handler() void timer_install() { irq_install_handler(0, timer_handler); + printf("[timer] initialized, starting g_ticks...\n"); } void delay(int ticks) diff --git a/src/kernel/gdt.c b/src/kernel/gdt.c index d29743a..4ba0952 100644 --- a/src/kernel/gdt.c +++ b/src/kernel/gdt.c @@ -1,4 +1,5 @@ #include "gdt.h" +#include "../libc/stdio.h" struct gdt_entry { @@ -50,4 +51,5 @@ void gdt_install() gdt_set_gate(4, 0, 0xFFFFFFFF, 0xF2, 0xCF); gdt_flush(); + printf("[kernel] GDT gates set (ring 0 and 3), gdt=0x%x\n", &gdt); } diff --git a/src/kernel/idt.c b/src/kernel/idt.c index 02f13fe..f892f03 100644 --- a/src/kernel/idt.c +++ b/src/kernel/idt.c @@ -1,5 +1,6 @@ #include "idt.h" #include "system.h" +#include "../libc/stdio.h" struct idt_entry { @@ -39,4 +40,5 @@ void idt_install() memset(&idt, 0, sizeof(struct idt_entry)*256); idt_load(); + printf("[kernel] loaded IDT at idt=0x%x\n", &idt); } diff --git a/src/kernel/irq.c b/src/kernel/irq.c index 253d8d8..89b9adc 100644 --- a/src/kernel/irq.c +++ b/src/kernel/irq.c @@ -1,6 +1,7 @@ #include "system.h" #include "io.h" #include "idt.h" +#include "../libc/stdio.h" extern void irq0(); extern void irq1(); @@ -69,6 +70,7 @@ void irq_install() idt_set_gate(45, (unsigned)irq13, 0x08, 0x8E); idt_set_gate(46, (unsigned)irq14, 0x08, 0x8E); idt_set_gate(47, (unsigned)irq15, 0x08, 0x8E); + printf("[kernel] installed irq 0-15\n"); } void irq_handler(struct regs *r) diff --git a/src/kernel/isr.c b/src/kernel/isr.c index 049d722..fa17ce9 100644 --- a/src/kernel/isr.c +++ b/src/kernel/isr.c @@ -70,6 +70,7 @@ void isr_install() idt_set_gate(29, (unsigned)isr29, 0x08, 0x8E); idt_set_gate(30, (unsigned)isr30, 0x08, 0x8E); idt_set_gate(31, (unsigned)isr31, 0x08, 0x8E); + printf("[kernel] set ISRs 0-31\n"); } char *exception_messages[] = diff --git a/src/kernel/kmain.c b/src/kernel/kmain.c index bc3dde1..5f1a11d 100644 --- a/src/kernel/kmain.c +++ b/src/kernel/kmain.c @@ -26,13 +26,6 @@ typedef struct { uint8_t tags[0]; } multiboot2_info; -char* ascii_title = -"\n" -"*******************************\n" -"| Blank OS version 0.3.68-dev |\n" -"*******************************\n" -"\n"; - unsigned int g_multiboot_info_address; uint32_t* framebuffer; @@ -73,7 +66,7 @@ uint8_t *tags = mb_info->tags; uint32_t width = fb_info->framebuffer_width; uint32_t height = fb_info->framebuffer_height; - uint32_t pitch = fb_info->framebuffer_pitch; + //uint32_t pitch = fb_info->framebuffer_pitch; uint32_t bpp = fb_info->framebuffer_bpp; @@ -94,28 +87,18 @@ uint8_t *tags = mb_info->tags; */ } - + printf("[kernel] multiboot2 info at 0x%x, size=%u\n", mb_info, mb_info->total_size); printf("[kernel] framebuffer discovered at 0x%x\n", fb_info->framebuffer_addr); printf("[kernel] fb0: width=%u, height=%u, pitch=%u, bpp=%u\n", fb_info->framebuffer_width, fb_info->framebuffer_height, fb_info->framebuffer_pitch, fb_info->framebuffer_bpp); - colorputs(ascii_title, green, black); init_serial(); - log("serial connection established\n", 3); gdt_install(); - log("initialized GDT entries\n", 2); idt_install(); - log("initialized IDT\n", 2); isr_install(); - log("initialized ISRs\n", 2); irq_install(); __asm__ __volatile__("sti"); - log("initialized IRQs\n", 2), - //clear(); - //colorputs(ascii_title, 10); - //colorputs(" by @xamidev - star the repo for a cookie!\n\n", ); - //init_paging(); //test_read_sector(); @@ -124,10 +107,8 @@ uint8_t *tags = mb_info->tags; //uint32_t do_page_fault = *ptr; timer_install(); - serial_printf(2, "%d\tinitialized timer handler", global_ticks); - keyboard_install(); - serial_printf(2, "%d\tinitialized keyboard handler", global_ticks); + keyboard_install(); + printf("[kernel] spawning shell...\n"); shell_install(); - serial_printf(2, "%d\tstarted system shell", global_ticks); } diff --git a/src/kernel/shell.c b/src/kernel/shell.c index 1bef02e..fe3973e 100644 --- a/src/kernel/shell.c +++ b/src/kernel/shell.c @@ -8,6 +8,16 @@ #define MAX_COMMANDS 16 #define MAX_ARGS 64 + +char* ascii_title = +"\n" +"----------------------------------------------\n" +"Blank OS version 0.3.71-dev\n" +"Author: @xamidev - star the repo for a cookie!\n" +"----------------------------------------------\n" +"\n"; + + typedef void (*command_func_t)(int argc, char *argv[]); typedef struct @@ -53,7 +63,9 @@ int parse_input(char* input, char* argv[], int max_args) } void shell_install() -{ +{ + colorputs(ascii_title, yellow, black); + register_command("help", program_help); register_command("panic", program_panic); register_command("words", program_words); @@ -73,7 +85,13 @@ void shell_install() { char input_buffer[BUFFER_SIZE]; char* argv[MAX_ARGS]; - //colorputs("blankos> ", 9); + + // Prompt + colorputs("root", blue, black); + colorputs("@", white, black); + colorputs("blankos", green, black); + colorputs("~$ ", white, black); + get_input(input_buffer, BUFFER_SIZE); puts("\n"); diff --git a/src/libc/stdio.h b/src/libc/stdio.h index ca81d43..731eb87 100644 --- a/src/libc/stdio.h +++ b/src/libc/stdio.h @@ -49,11 +49,12 @@ void dtostrf(double val, char *buffer, int precision); enum Colors { // AARRGGBB? - white = 0xFFFFFFFF, - black = 0x00000000, - red = 0x00FF0000, - green = 0x0000FF00, - blue = 0x000000FF, + white = 0xFFFFFFFF, + black = 0x00000000, + red = 0x00FF0000, + green = 0x0000FF00, + blue = 0x000000FF, + yellow = 0x00FFFF00, }; #endif