From e3f1871f611494792b129e0166007674c262230a Mon Sep 17 00:00:00 2001 From: c0repwn3r Date: Sat, 21 May 2022 15:18:41 -0400 Subject: [PATCH] rip out garbage --- bin/shade.bin | Bin 41128 -> 36448 bytes bin/shade.iso | Bin 26624000 -> 26617856 bytes .../shade/platform/drivers/vga_text_mode.h | 3 +- include/shade/tty.h | 137 ------------------ include/shade/version.h | 4 +- obj/kernel/kernel.o | Bin 3992 -> 3928 bytes src/kernel/platform/drivers/vga_text_mode.c | 9 -- src/kernel/tty.c | 90 ------------ 8 files changed, 3 insertions(+), 240 deletions(-) delete mode 100644 include/shade/tty.h delete mode 100644 src/kernel/tty.c diff --git a/bin/shade.bin b/bin/shade.bin index e7a83fd1a68d5a136e8b5e706cb768ea8b4f72db..b3eafbfc5844f686865f7b108c4ec696d59bc3ff 100755 GIT binary patch delta 9561 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 delta 11565 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 delta 75830 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 + #define REG_SCREEN_CTRL 0x3d4 #define REG_SCREEN_DATA 0x3d5 @@ -51,6 +51,5 @@ 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/tty.h b/include/shade/tty.h deleted file mode 100644 index 1eacef7..0000000 --- a/include/shade/tty.h +++ /dev/null @@ -1,137 +0,0 @@ -#ifndef SHADE_TTY_H -#define SHADE_TTY_H - -#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 - * - */ -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; - -static tty_t ttys[10]; -static 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/version.h b/include/shade/version.h index b0abfd5..5dc84c3 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 "531ba0c" -#define SHADE_OS_COMPILE_DATE "Tue May 17 10:46:28 AM EDT 2022" +#define SHADE_OS_BUILD "09c487e" +#define SHADE_OS_COMPILE_DATE "Sat May 21 03:18:24 PM EDT 2022" #define SHADE_OS_CODENAME "willow" #endif diff --git a/obj/kernel/kernel.o b/obj/kernel/kernel.o index 2f51074a786a3b727e8336f065219d0477143ee6..ffd573fc9d7165e83ba6df87e2524a299332d3d0 100644 GIT binary patch delta 876 zcmbOse?xA92BXAAO(P~517j;wODhv&g#cd#SC06->SXlOI7OCqs5>QC@0}Uh-x`c5X&S=E=4k;*vZ-EC2k5 z01=2Q7(m`)o}3GmWd^b=prXo98srI{$#bEyaZpiRC=Jnj7R_WE6xqK}y&IsSZYZ+4 zoDh5WLq$WOG{oLmPVvceICyw#kVN?>_i~E!g2Eo=lUb7+f$C0h@_>Et0IGH+k{+SS zZ-Mr3Bk9=zm4)~~mJ2m(j-$x>qRC!Ek*(zt=S2?J_mejQU9*FWXYw0P9$sc>;sE(a zbn;!GNuW^v4iyzbk`1bs8}7H)m8-+TLg?{8-J^Ts=)OI!Ht@_1sb zFUI9vrE;=2f8coj(A0E3iIaqtb{5an;(Ggvanu-h7-O87h}z<4y0@GuZ4W+j#%bd5McHJ^S9E?l&2R`D~1Zxp^)_(|b+g)0&*j=Ky%(+r2t zH7;Ig%x$l;R_p2|R;#zpUT&PixZUY>Ik#Z7PecK3u<}=%-kC9ZN(%}(5y|_KXO%Xl zow~UIs-&JIwm@Fj-bS^%^S+Gwl4_q2dpM*1AoUfoGvwu62C%^vzWg}p&ex%73z)S% zcxZe4F4PXo$St^#f*1xSqeMi;Z9v=g9v#?KIV;jzGZ`(Yh}6 z1gZLbRafw^J?~by5$E8kx7f3AFl<-+66dd>865HN8CZ+v;^V{HV4FSMrwAtCPq3T+ If@1&Xf4PpvE&u=k diff --git a/src/kernel/platform/drivers/vga_text_mode.c b/src/kernel/platform/drivers/vga_text_mode.c index 5f79c50..07f78d6 100644 --- a/src/kernel/platform/drivers/vga_text_mode.c +++ b/src/kernel/platform/drivers/vga_text_mode.c @@ -119,12 +119,3 @@ void putchar(char c, int x, int y, char style) { }; buffer[x + 25 * y] = cr; } - -tty_driver_t vga_text_mode_get_driver() { - tty_driver_t ttyd; - ttyd.max_cols = 25; - ttyd.max_rows = 80; - ttyd.putchar = putchar; - ttyd.setcurxy = set_cursor_pos; - return ttyd; -} \ No newline at end of file diff --git a/src/kernel/tty.c b/src/kernel/tty.c deleted file mode 100644 index 154f999..0000000 --- a/src/kernel/tty.c +++ /dev/null @@ -1,90 +0,0 @@ -#include -#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) { - return; -} -void tty_mvpnl(int tty, int x, int y) { - return; -} - -// tty_clr family -void tty_clr(int tty) { - return; -} -void tty_clrl(int tty, int line) { - return; -} - -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