From 32f6426583e571b5fac66c4e6addb72ee0e1056e Mon Sep 17 00:00:00 2001 From: lucic71 Date: Tue, 28 Jun 2022 19:40:51 +0300 Subject: [PATCH] Printed some nice text on the screen and serial --- bochs/bochsrc.txt | 1 + kernel/arch/i386/irq/irq.c | 13 +++++++++++-- kernel/arch/i386/isr/isr.c | 7 ++++++- kernel/kernel/kernel.c | 20 +++++++++++++++++++- kernel/log/asm/dump.S | 6 ++++++ 5 files changed, 43 insertions(+), 4 deletions(-) diff --git a/bochs/bochsrc.txt b/bochs/bochsrc.txt index 54771e4..61e58e1 100644 --- a/bochs/bochsrc.txt +++ b/bochs/bochsrc.txt @@ -9,3 +9,4 @@ clock: sync=realtime, time0=local cpu: count=1, ips=1000000 magic_break: enabled=1 debug_symbols: file=./kernel/os.kernel.sym +com1: enabled=1, mode=file, dev=bochs/serial.txt diff --git a/kernel/arch/i386/irq/irq.c b/kernel/arch/i386/irq/irq.c index 7ba41d8..1893f37 100644 --- a/kernel/arch/i386/irq/irq.c +++ b/kernel/arch/i386/irq/irq.c @@ -4,7 +4,10 @@ #include "i386/idt.h" #include "i386/context.h" +#include "kernel/serial.h" + #include +#include /* Extern symbol defined in idt.c */ @@ -92,7 +95,13 @@ void irq_handler(context_t context) { irq_t handler = intrpt_handlers[context.int_no]; if (handler) handler(context); - else - puts("Unhandled interrupt"); + + else { + + char unhandled_intrpt[] = "Unhandled interrupt request\n"; + serial_write(COM1, unhandled_intrpt, strlen(unhandled_intrpt)); + + } + } diff --git a/kernel/arch/i386/isr/isr.c b/kernel/arch/i386/isr/isr.c index bf61663..b594afc 100644 --- a/kernel/arch/i386/isr/isr.c +++ b/kernel/arch/i386/isr/isr.c @@ -3,7 +3,10 @@ #include "i386/idt.h" #include "i386/context.h" +#include "kernel/serial.h" + #include +#include #include /* Extern symbol defined in idt.c */ @@ -137,7 +140,9 @@ char *exception_messages[] = { void isr_handler(context_t context) { - printf("Unhandled exception: %s\n", exception_messages[context.int_no]); + serial_write(COM1, "Unhandled exception: ", strlen("Unhandled exception: ")); + serial_write(COM1, exception_messages[context.int_no], strlen(exception_messages[context.int_no])); + serial_write(COM1, "\n", 1); } diff --git a/kernel/kernel/kernel.c b/kernel/kernel/kernel.c index f3df303..2f28a54 100644 --- a/kernel/kernel/kernel.c +++ b/kernel/kernel/kernel.c @@ -1,8 +1,26 @@ +#include + #include "kernel/screen.h" +#include "kernel/serial.h" +#include "kernel/kb.h" +#include "i386/isr.h" +#include "i386/irq.h" +#include "i386/idt.h" void kmain(void) { + idt_init(); + irq_init(); + isr_init(); + + serial_init(COM1); + screen_init(); - screen_write("aa", 2); + kb_init(); + + printf("Welcome to lucicOS\n\n"); + printf("If you are using bochs as emulator, check bochs/serial.txt" + " to see info about the interrupts\n"); + printf("Press CTRL + Backspace to dump registers:"); } diff --git a/kernel/log/asm/dump.S b/kernel/log/asm/dump.S index 77ddd8d..a220446 100644 --- a/kernel/log/asm/dump.S +++ b/kernel/log/asm/dump.S @@ -37,6 +37,11 @@ reg_dump: push %ebp mov %esp, %ebp + push $NL_STR + call printf + + add $0x04, %esp + push prev_eax push $EAX_FMT call printf @@ -98,6 +103,7 @@ reg_dump: .data + NL_STR: .string "\n" EAX_FMT: .string "eax: 0x%x\n" ECX_FMT: .string "ecx: 0x%x\n" EDX_FMT: .string "edx: 0x%x\n"