From c020b7270f561f7500b6627bdd040904a7695b0a Mon Sep 17 00:00:00 2001 From: ice-bit Date: Sat, 14 Sep 2019 00:38:11 +0200 Subject: [PATCH] Fixed some bugs and changed ASCII logo --- imgs/example.png | Bin 37034 -> 12975 bytes kernel/drivers/Makefile | 2 +- kernel/drivers/fs.c | 8 ++------ kernel/drivers/fs.h | 2 +- kernel/drivers/timer.h | 2 +- kernel/kernel_main.c | 1 - kernel/shell/shell.c | 26 ++++++++++++++++---------- 7 files changed, 21 insertions(+), 20 deletions(-) diff --git a/imgs/example.png b/imgs/example.png index b0901b6a13464f1375d7f3d27b66a21bc00ea08a..10f845512543691fffbdfed58c39af19bb971b96 100644 GIT binary patch literal 12975 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 Qk^uxfUHx3vIVCg!0Cp2LHvj+t diff --git a/kernel/drivers/Makefile b/kernel/drivers/Makefile index 49d4ba9..fd21c5f 100644 --- a/kernel/drivers/Makefile +++ b/kernel/drivers/Makefile @@ -1,4 +1,4 @@ -OBJS = tty.o gdt.o idt.o isr.o timer.o keyboard.o +OBJS = tty.o gdt.o idt.o isr.o timer.o keyboard.o fs.o CC = i686-elf-gcc # cross-compiler CFLAGS = -m32 -fno-stack-protector -ffreestanding -Wall -Wextra -Werror -g -c diff --git a/kernel/drivers/fs.c b/kernel/drivers/fs.c index 622d857..7a49a6a 100644 --- a/kernel/drivers/fs.c +++ b/kernel/drivers/fs.c @@ -18,20 +18,16 @@ uint32_t write_fs(fs_node_t *node, uint32_t offset, uint32_t size, uint8_t *buff return 0; } -void open_fs(fs_node_t *node, uint8_t read, uint8_t write) { +void open_fs(fs_node_t *node) { // Check if inode got a open callback from the kernel if(node->open != 0) return node->open(node); - else - return 0; } void close_fs(fs_node_t *node) { // Check if inode got a close callback from the kernel - if(node->close =! 0) + if(node->close != 0) return node->close(node); - else - return 0; } struct dirent *readdir_fs(fs_node_t *node, uint32_t index) { diff --git a/kernel/drivers/fs.h b/kernel/drivers/fs.h index 03e5b11..c2e4a37 100644 --- a/kernel/drivers/fs.h +++ b/kernel/drivers/fs.h @@ -76,7 +76,7 @@ extern fs_node_t *fs_root; * the second one deals with file descriptors. */ uint32_t read_fs(fs_node_t *node, uint32_t offset, uint32_t size, uint8_t *buffer); uint32_t write_fs(fs_node_t *node, uint32_t offset, uint32_t size, uint8_t *buffer); -void open_fs(fs_node_t *node, uint8_t read, uint8_t write); +void open_fs(fs_node_t *node); void close_fs(fs_node_t *node); struct dirent *readdir_fs(fs_node_t *node, uint32_t index); fs_node_t *finddir_fs(fs_node_t *node, char *name); diff --git a/kernel/drivers/timer.h b/kernel/drivers/timer.h index a8c0de9..9c1c056 100644 --- a/kernel/drivers/timer.h +++ b/kernel/drivers/timer.h @@ -33,7 +33,7 @@ void init_timer(uint32_t frequency); uint32_t tick; /* Since regs parameter(from timer_callback) will be unused - * GCC(with -Werror flag) will dump an error, so we avoid this + * GCC(with -Werror flag) will throw an error, so we can avoid this * using the following macro */ #define UNUSED_PAR(x) (void)(x) diff --git a/kernel/kernel_main.c b/kernel/kernel_main.c index 8373436..f10adc0 100644 --- a/kernel/kernel_main.c +++ b/kernel/kernel_main.c @@ -35,5 +35,4 @@ void kernel_main() { iceos_ascii_logo(); init_prompt(); // Initialize frame buffer - } \ No newline at end of file diff --git a/kernel/shell/shell.c b/kernel/shell/shell.c index d433a31..8cd7af7 100644 --- a/kernel/shell/shell.c +++ b/kernel/shell/shell.c @@ -119,14 +119,20 @@ void processCommand(uint8_t *cmd) { } void iceos_ascii_logo() { - printf_color( -"\n\n### ##### ####### ####### #####\n" -" # # # # # # # #\n" -" # # # # # # \n" -" # # ##### # # ##### \n" -" # # # # # # \n" -" # # # # # # # # \n" -"### ##### ####### ####### ##### \n" -"\n (c) Marco Cetica 2019\n", - LIGHT_MAGENTA, BLACK); +printf_color( + "\n\n" + " MMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\n" + " MMMMMMMMMMMM...?MMM.. MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\n" + " MMMMMMMMM ........M .MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\n" + " MMMMMMMM...........M .MMMMMMMM..MMO ........MMM....MM..MMMMM\n" + " MMMMM ..............M..MMMMMMM..M...........M.....,.M.. MMMM\n" + " MMMM................MM,.. .MMM....MMMM......M..MMMM..M,..MMM\n" + " MMM ................... MMMMMM....MMMM......M..MMMM..MMN..MM\n" + " M ......................,MMMMM..M.. ........M.......M... .~M\n" + " ........................MMMMM..MMM.........MMM...MMM....MMMM\n" + " .........................MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\n" + " M .....................DMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\n" + " MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\n", + LIGHT_MAGENTA, BLACK); + printf_color(" (c) Marco Cetica 2019\n", LIGHT_GREEN, BLACK); } \ No newline at end of file