From 685d747485d870293bb69b1d622a16026ec690cb Mon Sep 17 00:00:00 2001 From: Victor Cornille Date: Sat, 7 Sep 2024 00:23:16 +0200 Subject: [PATCH] + | Added some command to the CLI and a panic handler for ISR --- drivers/descriptor/descriptor.h | 1 + drivers/descriptor/isr.c | 25 ++++++++++- drivers/keyboard/keyboard.h | 1 + drivers/keyboard/kshell.c | 76 ++++++++++++++++++++++++++++++++ drivers/keyboard/tester.c | 12 +++++ lib/stdlib/stdlib.c | 12 ++--- screenshots/HELPER.png | Bin 26509 -> 13205 bytes 7 files changed, 120 insertions(+), 7 deletions(-) diff --git a/drivers/descriptor/descriptor.h b/drivers/descriptor/descriptor.h index fb1cf8e..f32eb53 100644 --- a/drivers/descriptor/descriptor.h +++ b/drivers/descriptor/descriptor.h @@ -5,6 +5,7 @@ #include "../../lib/stdlib/stdlib.h" #include "../../lib/stdio/stdio.h" #include "../../lib/string/string.h" +#include "../../memory/pmm/pmm.h" extern void isr0(); extern void isr1(); diff --git a/drivers/descriptor/isr.c b/drivers/descriptor/isr.c index 4e79951..797c491 100644 --- a/drivers/descriptor/isr.c +++ b/drivers/descriptor/isr.c @@ -40,8 +40,31 @@ static char* exception_msg[] = { "Reserved" }; -void isr_handler(registers_t* r) { +void panic(registers_t* r) { + asm volatile("cli"); + uint32_t stack = r->esp; printf("Number: %d | Message: %s\n", r->int_no, exception_msg[r->int_no]); + uint32_t* cp_stack = (uint32_t*)pmm_alloc_block(); + for (uint32_t* ptr = (uint32_t*)stack; *ptr && ptr < (uint32_t*)stack + 0x1000; ptr++) { + *cp_stack++ = *ptr; + } + asm volatile( + "xor %eax, %eax\n" + "xor %ebx, %ebx\n" + "xor %ecx, %ecx\n" + "xor %edx, %edx\n" + "xor %edi, %edi\n" + "xor %esi, %esi\n" + "xor %ebp, %ebp\n" + //"xor %eip, %eip\n" RD ONLY + "xor %esp, %esp\n" + ); + asm volatile("hlt"); + +} + +void isr_handler(registers_t* r) { + panic(r); } void isr_install() { diff --git a/drivers/keyboard/keyboard.h b/drivers/keyboard/keyboard.h index 13d422b..28d72e9 100644 --- a/drivers/keyboard/keyboard.h +++ b/drivers/keyboard/keyboard.h @@ -8,6 +8,7 @@ void init_keyboard(); void exec_command(); void cmd_add_char(uint8_t c); void tests_string(int* total, int* success, int* failure); +void tests_stdlib(int* total, int* success, int* failure); typedef enum { SHELL, diff --git a/drivers/keyboard/kshell.c b/drivers/keyboard/kshell.c index 036df7f..ed32cd6 100644 --- a/drivers/keyboard/kshell.c +++ b/drivers/keyboard/kshell.c @@ -64,6 +64,7 @@ void exec_tests() { printf("TEST SUITE FOR THE KERNEL\n"); //TODO: write test suite for functions that give an output tests_string(&total, &success, &failure); + tests_stdlib(&total, &success, &failure); printf("\nTEST SUITE DONE:\n TOTAL : %d\n SUCCESS : %d\n FAILURE : %d\n", total, success, failure); } @@ -97,6 +98,75 @@ void print_stack() { printf("\n"); } +void int_0x0() { asm volatile("int $0x0"); } +void int_0x1() { asm volatile("int $0x1"); } +void int_0x2() { asm volatile("int $0x2"); } +void int_0x3() { asm volatile("int $0x3"); } +void int_0x4() { asm volatile("int $0x4"); } +void int_0x5() { asm volatile("int $0x5"); } +void int_0x6() { asm volatile("int $0x6"); } +void int_0x7() { asm volatile("int $0x7"); } +void int_0x8() { asm volatile("int $0x8"); } +void int_0x9() { asm volatile("int $0x9"); } +void int_0xA() { asm volatile("int $0xA"); } +void int_0xB() { asm volatile("int $0xB"); } +void int_0xC() { asm volatile("int $0xC"); } +void int_0xD() { asm volatile("int $0xD"); } +void int_0xE() { asm volatile("int $0xE"); } +void int_0xF() { asm volatile("int $0xF"); } +void int_0x10() { asm volatile("int $0x10"); } +void int_0x11() { asm volatile("int $0x11"); } +void int_0x12() { asm volatile("int $0x12"); } +void int_0x13() { asm volatile("int $0x13"); } +void int_0x14() { asm volatile("int $0x14"); } +void int_0x15() { asm volatile("int $0x15"); } +void int_0x16() { asm volatile("int $0x16"); } +void int_0x17() { asm volatile("int $0x17"); } +void int_0x18() { asm volatile("int $0x18"); } +void int_0x19() { asm volatile("int $0x19"); } +void int_0x1A() { asm volatile("int $0x1A"); } +void int_0x1B() { asm volatile("int $0x1B"); } +void int_0x1C() { asm volatile("int $0x1C"); } +void int_0x1D() { asm volatile("int $0x1D"); } +void int_0x1E() { asm volatile("int $0x1E"); } +void int_0x1F() { asm volatile("int $0x1F"); } +void int_0x20() { asm volatile("int $0x20"); } +void int_0x21() { asm volatile("int $0x21"); } +void int_0x22() { asm volatile("int $0x22"); } +void int_0x23() { asm volatile("int $0x23"); } +void int_0x24() { asm volatile("int $0x24"); } +void int_0x25() { asm volatile("int $0x25"); } + +typedef void (*inter_func)(void); + +inter_func tab[] = { + int_0x0, int_0x1, int_0x2, int_0x3, + int_0x4, int_0x5, int_0x6, int_0x7, + int_0x8, int_0x9, int_0xA, int_0xB, + int_0xC, int_0xD, int_0xE, int_0xF, + int_0x10, int_0x11, int_0x12, int_0x13, + int_0x14, int_0x15, int_0x16, int_0x17, + int_0x18, int_0x19, int_0x1A, int_0x1B, + int_0x1C, int_0x1D, int_0x1E, int_0x1F, + int_0x20, int_0x21, int_0x22, int_0x23, + int_0x24, int_0x25 +}; + +void do_interrupt(char* nb) { + int n = atoi(nb); + if (n < 0 || n > 0x25) return; + tab[n](); +} + +void shut_down() { + asm volatile( + "movw $0x2000, %ax\n" + "movw $0x604, %dx\n" + "outw %ax, %dx\n" + "hlt" + ); +} + void exec_command() { char words[4][256]; size_t i = 0; @@ -118,10 +188,14 @@ void exec_command() { exec_tests(); } else if (!strcmp(words[0], "REBOOT")){ reboot(); + } else if (!strcmp(words[0], "EXIT")){ + shut_down(); } else if (!strcmp(words[0], "HALT")){ asm volatile("hlt\n\t"); } else if (!strcmp(words[0], "STACK")){ print_stack(); + } else if (!strcmp(words[0], "INT")){ + do_interrupt(words[1]); } else if (!strcmp(words[0], "HELP")) { printf("WELCOME TO THE KERNEL\n\ THE CLI IS STILL UNDER DEVELOPMENT.\n\ @@ -132,8 +206,10 @@ COMMANDS AVAILABLE:\n\ - KEYBOARD = TWO LAYOUT ARE AVAILABLE, FR AND US\n\ CLEAR : CLEARS THE CLI\n\ REBOOT : REBOOTS THE KERNEL\n\ + EXIT : SHUT DOWN THE KERNEL AND THE VM\n\ HALT : HALTS THE KERNEL\n\ STACK : PRINTS STACK\n\ + INT [NUM] : DOES INTERRUPTION [NUM]\n\ TEST : EXECUTES A TEST SUITE FOR THE KERNEL\n\ HELP : PRINTS THIS MESSAGE\n"); } diff --git a/drivers/keyboard/tester.c b/drivers/keyboard/tester.c index 57bce7a..5aef08a 100644 --- a/drivers/keyboard/tester.c +++ b/drivers/keyboard/tester.c @@ -79,3 +79,15 @@ void tests_string(int* total, int* success, int* failure) { printf("memset : failure\n"); } } + +void tests_stdlib(int* total, int* success, int* failure) { + printf("\ntests for stdlib.h\n"); + *total += 1; + if (atoi("5") == 5 && atoi("-5") == -5 && atoi("zda") == 0) { + *success += 1; + printf("atoi : success\n"); + } else { + *failure += 1; + printf("atoi : failure atoi(5) == %d | atoi(-5) == %d | atoi('zda') == %d\n", atoi("5"), atoi("-5"), atoi("zda")); + } +} diff --git a/lib/stdlib/stdlib.c b/lib/stdlib/stdlib.c index cb27796..0d81fc7 100644 --- a/lib/stdlib/stdlib.c +++ b/lib/stdlib/stdlib.c @@ -72,15 +72,15 @@ size_t itoxx(char *dest, unsigned int n) { } inline int atoi(const char *nptr) { - if (!nptr) return 0x0; - int sign = 0x0; - while (*nptr && !isnum(*nptr)) { + if (!nptr) return 0; + int sign = 1; + if (*nptr == '+' || *nptr == '-') { if (*(nptr) == '-') - sign = 0xFF; + sign = -1; nptr++; } - int res = 0x0; - while (*nptr) { + int res = 0; + while (*nptr && isnum(*nptr)) { res = res * 0xA + *nptr - 0x30; nptr++; } diff --git a/screenshots/HELPER.png b/screenshots/HELPER.png index d802b7e1cc65533c2a0fce3608660ba902b5742e..bfc465e29ced76c937068d783bb6e698b15ac258 100644 GIT binary patch literal 13205 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 literal 26509 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 BC@BB{