From 531ba0c6f5f6f25098098e41856434316c1596c5 Mon Sep 17 00:00:00 2001 From: c0repwn3r Date: Tue, 17 May 2022 10:44:08 -0400 Subject: [PATCH 1/2] chore/feat: update include guards / start working on TTY functionality --- Makefile | 4 +- bin/shade.bin | Bin 36456 -> 36456 bytes bin/shade.iso | Bin 26617856 -> 26617856 bytes include/shade/cansid.h | 4 +- include/shade/kmsg.h | 22 ++- include/shade/platform/drivers/keyboard.h | 4 +- .../shade/platform/drivers/vga_text_mode.h | 9 +- include/shade/platform/gdt.h | 4 +- include/shade/platform/interrupts/idt.h | 4 +- include/shade/platform/interrupts/isr.h | 4 +- include/shade/platform/interrupts/pic.h | 4 +- include/shade/platform/ports.h | 4 +- include/shade/tty.h | 137 ++++++++++++++++++ include/shade/util.h | 19 ++- include/shade/version.h | 8 +- obj/kernel/kernel.o | Bin 3928 -> 4024 bytes src/kernel/platform/drivers/vga_text_mode.c | 34 +++-- src/kernel/tty.c | 82 +++++++++++ 18 files changed, 301 insertions(+), 42 deletions(-) create mode 100644 include/shade/tty.h create mode 100644 src/kernel/tty.c diff --git a/Makefile b/Makefile index ff90bb0..ee896a8 100644 --- a/Makefile +++ b/Makefile @@ -49,8 +49,8 @@ bin/shade.iso: bin/shade.bin rm src/iso/boot/shade.bin bin/shade.bin: $(sboot_object_files) $(kernel_object_files) $(libc_object_files) - echo "#ifndef VERSION_H" > include/shade/version.h - echo "#define VERSION_H" >> include/shade/version.h + echo "#ifndef SHADE_VERSION_H" > include/shade/version.h + echo "#define SHADE_VERSION_H" >> include/shade/version.h echo "// This file was autogenerated by the shadeOS build system. It should not be modified." >> include/shade/version.h echo "#define SHADE_OS_KERNEL_VERSION \"$(version)\"" >> include/shade/version.h echo "#define SHADE_OS_KERNEL \"$(stream)\"" >> include/shade/version.h diff --git a/bin/shade.bin b/bin/shade.bin index 612328a20db83d5b6e550993c57decb6f16f4fc3..a20093f646b33bb95c0e3ca2be48ba035f806f96 100755 GIT binary patch delta 3684 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 EKRDOO9smFU diff --git a/bin/shade.iso b/bin/shade.iso index a7b2e8502d1004811b845c6dcf9f874d876ebd1b..564e0885e260bf81c541fb1f37445beed9b735df 100644 GIT binary patch delta 67401 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 +/** + * @brief [ ok ] + * + * @param format + * @param ... + */ void kmsg_ok(char* format, ...); +/** + * @brief [ warn ] + * + * @param format + * @param ... + */ void kmsg_warn(char* format, ...); +/** + * @brief [ fail ] + * + * @param format + * @param ... + */ void kmsg_fail(char* format, ...); #endif \ No newline at end of file diff --git a/include/shade/platform/drivers/keyboard.h b/include/shade/platform/drivers/keyboard.h index 1b7cdec..3a3077c 100644 --- a/include/shade/platform/drivers/keyboard.h +++ b/include/shade/platform/drivers/keyboard.h @@ -1,5 +1,5 @@ -#ifndef KEYBOARD_H -#define KEYBOARD_H +#ifndef SHADE_KEYBOARD_H +#define SHADE_KEYBOARD_H void init_keyboard(); diff --git a/include/shade/platform/drivers/vga_text_mode.h b/include/shade/platform/drivers/vga_text_mode.h index abf8f2a..67da5a8 100644 --- a/include/shade/platform/drivers/vga_text_mode.h +++ b/include/shade/platform/drivers/vga_text_mode.h @@ -1,5 +1,8 @@ -#ifndef PRINT_H -#define PRINT_H +#ifndef SHADE_PRINT_H +#define SHADE_PRINT_H + +#include + #define REG_SCREEN_CTRL 0x3d4 #define REG_SCREEN_DATA 0x3d5 @@ -48,4 +51,6 @@ void kernel_msg_ok(char* msg); void init_state(); +tty_driver_t vga_text_mode_get_driver(); + #endif \ No newline at end of file diff --git a/include/shade/platform/gdt.h b/include/shade/platform/gdt.h index 4ad3f8a..664ab29 100644 --- a/include/shade/platform/gdt.h +++ b/include/shade/platform/gdt.h @@ -1,5 +1,5 @@ -#ifndef GDT_H -#define GDT_H +#ifndef SHADE_GDT_H +#define SHADE_GDT_H #define KERNEL_CODE 0x08 #define KERNEL_DATA 0x10 diff --git a/include/shade/platform/interrupts/idt.h b/include/shade/platform/interrupts/idt.h index b3b328e..4043214 100644 --- a/include/shade/platform/interrupts/idt.h +++ b/include/shade/platform/interrupts/idt.h @@ -1,5 +1,5 @@ -#ifndef IDT_H -#define IDT_H +#ifndef SHADE_IDT_H +#define SHADE_IDT_H #include #include diff --git a/include/shade/platform/interrupts/isr.h b/include/shade/platform/interrupts/isr.h index eb6ec96..af36ee2 100644 --- a/include/shade/platform/interrupts/isr.h +++ b/include/shade/platform/interrupts/isr.h @@ -1,5 +1,5 @@ -#ifndef ISR_H -#define ISR_H +#ifndef SHADE_ISR_H +#define SHADE_ISR_H #include diff --git a/include/shade/platform/interrupts/pic.h b/include/shade/platform/interrupts/pic.h index d83689e..d5e5532 100644 --- a/include/shade/platform/interrupts/pic.h +++ b/include/shade/platform/interrupts/pic.h @@ -1,5 +1,5 @@ -#ifndef PIC_H -#define PIC_H +#ifndef SHADE_PIC_H +#define SHADE_PIC_H #include diff --git a/include/shade/platform/ports.h b/include/shade/platform/ports.h index b5b0524..f406401 100644 --- a/include/shade/platform/ports.h +++ b/include/shade/platform/ports.h @@ -1,5 +1,5 @@ -#ifndef PORTS_H -#define PORTS_H +#ifndef SHADE_PORTS_H +#define SHADE_PORTS_H unsigned char inb(unsigned short port); void outb(unsigned short port, unsigned char data); diff --git a/include/shade/tty.h b/include/shade/tty.h new file mode 100644 index 0000000..ad39e3d --- /dev/null +++ b/include/shade/tty.h @@ -0,0 +1,137 @@ +#ifndef SHADE_TTY_H +#define SHADE_TTY_H + +#include +#include + +/** + * @brief A type to represent a tty driver + * + */ +typedef struct tty_driver_struct { + int max_rows; + int max_cols; + + void (*putchar) (char c, int x, int y, char style); + void (*setcurxy) (int x, int y); +} tty_driver_t; + +/** + * @brief A type to represent a tty + * + */ +typedef struct tty_struct { + // size information + int rows; + int cols; + + // cursor information + int cursor_row; + int cursor_col; + + // stateful information + cansid_state cansid; + + // buffers + tty_ochar_t output_buffer[65536]; + char input_buffer[1024]; + + // driver + tty_driver_t driver; + + // flags + bool active; +} tty_t; + +/** + * @brief A type to represent a printable char + * + */ +typedef struct tty_ochar_struct { + char character; + char style; +} tty_ochar_t; + +tty_t ttys[10]; +int active_tty; + +/** + * @brief Create a new tty_t with the provided driver + * + * @param driver + * @return tty_t + */ +tty_t tty_new(tty_driver_t driver); + +/** + * @brief Switch the screen to the provided tty - clear screen and flip to that tty + * + * @param index + */ +void tty_switch(int index); + +/** + * @brief Print the specified char c on the tty tty, at the current cursor location + * + * @param tty + * @param c + * @see tty_mvpchar + */ +void tty_pchar(int tty, char c); +/** + * @brief Print the specified char t to the tty tty, but move the cursor to x, y first. + * + * @param tty + * @param c + * @param x + * @param y + * @see tty_pchar + */ +void tty_mvpchar(int tty, char c, int x, int y); + +// tty_pnl family +/** + * @brief Print a newline at the current cursor location on the tty tty. + * + * @param tty + * @see tty_mvpnl + */ +void tty_pnl(int tty); +/** + * @brief Move to the specified cursor location and print a newline. + * + * @param tty + * @param c + * @param x + * @param y + * @see tty_pnl + */ +void tty_mvpnl(int tty, int x, int y); + +// tty_clr family +/** + * @brief Clear the entire screen of the specified tty. Uses tty_clrl internally. + * + * @param tty + * @see tty_clrl + */ +void tty_clr(int tty); +/** + * @brief Clear the specified line of the specified tty. + * + * @param tty + * @param line + * @see tty_clr + */ +void tty_clrl(int tty, int line); + +/** + * @brief Set the cursor position on the specified tty to the specified position. + * + * @param tty + * @param x + * @param y + */ +void tty_setcurxy(int tty, int x, int y); + +#endif \ No newline at end of file diff --git a/include/shade/util.h b/include/shade/util.h index 9985e39..fce4514 100644 --- a/include/shade/util.h +++ b/include/shade/util.h @@ -1,10 +1,25 @@ -#ifndef UTIL_H -#define UTIL_H +#ifndef SHADE_UTIL_H +#define SHADE_UTIL_H #define IS_DIGIT(x) (x == '0' || x == '1' || x == '2' || x == '3' || x == '4' || x == '5' || x == '6' || x == '7' || x == '8' || x == '9') #define IS_HEX(x) (IS_DIGIT(x) || x == 'a' || x == 'b' || x == 'c' || x == 'd' || x == 'e' || x == 'f') +/** + * @brief Copy nbytes bytes from source to dest + * + * @param source + * @param dest + * @param nbytes + */ void memcpy(char *source, char *dest, int nbytes); + +/** + * @brief Set len bytes from dest to val + * + * @param dest + * @param val + * @param len + */ void memset(char *dest, char val, int len); #endif \ No newline at end of file diff --git a/include/shade/version.h b/include/shade/version.h index d1f2ec2..00c3dc9 100644 --- a/include/shade/version.h +++ b/include/shade/version.h @@ -1,9 +1,9 @@ -#ifndef VERSION_H -#define VERSION_H +#ifndef SHADE_VERSION_H +#define SHADE_VERSION_H // This file was autogenerated by the shadeOS build system. It should not be modified. #define SHADE_OS_KERNEL_VERSION "0.1.1-alpha" #define SHADE_OS_KERNEL "shade-development" -#define SHADE_OS_BUILD "20b96b2" -#define SHADE_OS_COMPILE_DATE "Sun May 15 07:01:51 PM EDT 2022" +#define SHADE_OS_BUILD "02abf37" +#define SHADE_OS_COMPILE_DATE "Tue May 17 08:32:53 AM EDT 2022" #define SHADE_OS_CODENAME "willow" #endif diff --git a/obj/kernel/kernel.o b/obj/kernel/kernel.o index 300f5fc732a4a4424b367e8fb150c124f51a1b64..56ff0925bdcca54c817075934384d46348c52ed8 100644 GIT binary patch delta 283 zcmca1w?lq{24lrW%_>I0{R}{`14O(45wHJE-om(A!otebR3X4u!PO;1!N|bKh{3=p zF)7X1d~-QdDx)Jvp&^$Mmob+KmnoMSmpPXOmnD}07eWjs#K7S0>};i=;qDizsbFZN zXQ*cY(meSsb2+2L=2VtwMj&;Nbw8_Q3L{8@fq@H%nSoe=3B+Sy$eVnSOMG$z_YcOB z$(20joC+Ke@dJ~0@|ZJjnf#HbozZ=AC9gRrI}1cccyc3)@Z>YRDw7TPI41w#wO|aG lY{+NN_+WA&kX$i&BcDB!1pDMqe0H1yJP<7@U@bj7JOJtZJ*5Bu delta 195 zcmdlXe?xA92BXAA%_>Hw*Z(FjWRaeHfN{Qrp_QSTLV&M=t4oN2k%5sBgONd!rCE~E z=5nS~MnQLHXDbB_cfU|g1w$h}Lp_7ZvMl9{oSUbzL^A@ZkF5JyCqLl+!I(PvCXYGi z2X+Q9m@rwA*PL0 +#include + +// Initialize a new tty_t object with the specified driver +tty_t tty_new(tty_driver_t driver) { + tty_t tty; + tty.active = false; + tty.cansid = cansid_init(); + tty.cols = driver.max_cols; + tty.cursor_col = 0; + tty.cursor_row = 0; + tty.driver = driver; + tty.rows = driver.max_rows; + return tty; +} + +void tty_switch(int index); + +// private function: print the contents of a tty's output buffer to the screen +void _tty_flip(int tty, bool clear) { + // clear the screen if required (used in tty_switch) + if (clear) tty_clr(tty); + // iterate over every (known) character in the tty output buffer + for (int x = 0; x < ttys[tty].cols; x++) { + for (int y = 0; y < ttys[tty].rows; y++) { + // get the tty_ochar_t + tty_ochar_t cr = ttys[tty].output_buffer[x + ttys[tty].cols + y]; + // and print it with the driver + ttys[tty].driver.putchar(cr.character, x, y, cr.style); + } + } + // and update the real cursor position + ttys[tty].driver.setcurxy(ttys[tty].cursor_col, ttys[tty].cursor_row); +} + +// tty_pchar family +void tty_pchar(int tty, char c) { + if (c == 0) { + return; + } + + if (c == '\n') { + tty_pnl(tty); + return; + } + + if (ttys[tty].cursor_col > ttys[tty].cols) { + tty_pnl(tty); + } + + color_char ccr = cansid_process(&ttys[tty].cansid, c); + + tty_ochar_t cr; + cr.character = ccr.ascii; + cr.style = ccr.style; + ttys[tty].output_buffer[ttys[tty].cursor_col + ttys[tty].cols * ttys[tty].cursor_row] = cr; + + ttys[tty].cursor_col++; + tty_setcurxy(tty, ttys[tty].cursor_col, ttys[tty].cursor_row); + + // if tty is selected, flip + if (tty == active_tty) _tty_flip(tty, false); +} + +void tty_mvpchar(int tty, char c, int x, int y) { + tty_setcurxy(tty, x, y); + tty_pchar(tty, c); +} + +// tty_pnl family +void tty_pnl(int tty); +void tty_mvpnl(int tty, int x, int y); + +// tty_clr family +void tty_clr(int tty); // clear entire screen +void tty_clrl(int tty, int line); // clear a line + +void tty_setcurxy(int tty, int x, int y) { + ttys[tty].cursor_col = x; + ttys[tty].cursor_row = y; + ttys[tty].driver.setcurxy(x, y); +} \ No newline at end of file From f458b04ec63b4e08acf7aa808145e9708d96c2fd Mon Sep 17 00:00:00 2001 From: c0repwn3r Date: Tue, 17 May 2022 10:46:44 -0400 Subject: [PATCH 2/2] chore: fix compilation errors --- bin/shade.bin | Bin 36456 -> 41128 bytes bin/shade.iso | Bin 26617856 -> 26624000 bytes include/shade/tty.h | 22 +++++++++++----------- include/shade/version.h | 4 ++-- obj/kernel/kernel.o | Bin 4024 -> 3992 bytes src/kernel/tty.c | 16 ++++++++++++---- 6 files changed, 25 insertions(+), 17 deletions(-) diff --git a/bin/shade.bin b/bin/shade.bin index a20093f646b33bb95c0e3ca2be48ba035f806f96..e7a83fd1a68d5a136e8b5e706cb768ea8b4f72db 100755 GIT binary patch delta 11994 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 delta 10013 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 J%_(K>{|gh<5G4Qr diff --git a/bin/shade.iso b/bin/shade.iso index 564e0885e260bf81c541fb1f37445beed9b735df..17090859899b9d46595eff63a1597eb8ab3bfe70 100644 GIT binary patch delta 73229 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 MR!bwv`Ap;f4_YJn761SM delta 71262 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 diff --git a/include/shade/tty.h b/include/shade/tty.h index ad39e3d..1eacef7 100644 --- a/include/shade/tty.h +++ b/include/shade/tty.h @@ -4,6 +4,15 @@ #include #include +/** + * @brief A type to represent a printable char + * + */ +typedef struct tty_ochar_struct { + char character; + char style; +} tty_ochar_t; + /** * @brief A type to represent a tty driver * @@ -43,17 +52,8 @@ typedef struct tty_struct { bool active; } tty_t; -/** - * @brief A type to represent a printable char - * - */ -typedef struct tty_ochar_struct { - char character; - char style; -} tty_ochar_t; - -tty_t ttys[10]; -int active_tty; +static tty_t ttys[10]; +static int active_tty; /** * @brief Create a new tty_t with the provided driver diff --git a/include/shade/version.h b/include/shade/version.h index 00c3dc9..b0abfd5 100644 --- a/include/shade/version.h +++ b/include/shade/version.h @@ -3,7 +3,7 @@ // This file was autogenerated by the shadeOS build system. It should not be modified. #define SHADE_OS_KERNEL_VERSION "0.1.1-alpha" #define SHADE_OS_KERNEL "shade-development" -#define SHADE_OS_BUILD "02abf37" -#define SHADE_OS_COMPILE_DATE "Tue May 17 08:32:53 AM EDT 2022" +#define SHADE_OS_BUILD "531ba0c" +#define SHADE_OS_COMPILE_DATE "Tue May 17 10:46:28 AM EDT 2022" #define SHADE_OS_CODENAME "willow" #endif diff --git a/obj/kernel/kernel.o b/obj/kernel/kernel.o index 56ff0925bdcca54c817075934384d46348c52ed8..2f51074a786a3b727e8336f065219d0477143ee6 100644 GIT binary patch delta 1076 zcmZ8fOK1~O6n!t5shP|tO`AHVp=3h+G}6RLYDtY&TT%@O5kD;`HfoHs5UUGKtyRIU z#7!Y`5sD(%g$q|&vS>D9T?y`7_$ey5aUm*p=caz%Zy?Eqx%bXF_xs+fM;D^iK74#B zejR(h|Aj><0xP(>ZG76X3Z+>qm9bKGcIRL=y~`RcSo_Dut+bs^qrrjH*^*tZ&3GIf z%;$1ht1o|OB5tM9$yCyY9%%+Ea8EiJ_alTbl8EMFZx1miKs3eOe+j-x(Qr3IWgbej zo7W35*}T;+az;cA)XoEK7tiwAv?rAz^3fh=1WtaKjJWu29`ANJDDXLfBOeP#MPfP- zhGjX3ry$s7hNn4#CV2o-MCBWl#kZNR!f4wL{FM32OuuCMHPi2z{>t<^)iNeE+Q|ik zHeGNoUvj3BWmKumUO}aD<@{CWH1TV(4JyVmBz$JrAf4C$ap7AaME91VNLYG;bbBhj z+_1AWU|z7N1ey?*=RR+#yr+r%DRQ3)^gt8aqwu~j1UexsJzWC|imB7~IVFu8FOSdu!S z-`MO~^TJVMFB~>}uwV?~6?kLp>$*lqCi2L`txAjzTLJ^vgcE^`vPJz delta 1119 zcmZ8f&rcIU6y9OC(4Czvv<0_KG>p+`InZ>AbxQ*Q16nUNB*;lLL8%v{L8Ic&2!DXl zf@F(&y7W?W0F%fgYs+Ez*9PqyM=EWfvhQ%xHg)ftU~sdb$DFojfy4Y zhmkj;TCa#DVGwv3iIYi)w|eQSW{gR_!AN1{8L5)%3KtYUkO;%ADe^?+b%n1KZYuns za9iOwiMBCQy;7@Q%3fIU+Z;kn7>s&pCR+XatD_U!%0W$-6{;z|ipUmS)T0%-o?stsKATPSYPGUU{n(`5rJfr;*RN0)f3rpzY}?E= z@lxeHUGPa%lBfIw*+fW9fa`ef9-%hoIt1^j2PYktPKDUfkS7JRjt2t{bH|a@f4uB? zej?