diff options
Diffstat (limited to '')
-rw-r--r-- | kernel/include/term.h (renamed from kernel/src/tty/term.h) | 13 | ||||
-rw-r--r-- | kernel/src/term.c (renamed from kernel/src/tty/term.c) | 25 | ||||
-rw-r--r-- | kernel/src/tty/color.c | 67 | ||||
-rw-r--r-- | kernel/src/tty/color.h | 62 | ||||
-rw-r--r-- | kernel/src/tty/cursor.c | 30 | ||||
-rw-r--r-- | kernel/src/tty/cursor.h | 9 |
6 files changed, 16 insertions, 190 deletions
diff --git a/kernel/src/tty/term.h b/kernel/include/term.h index ceda255..8a8f1ef 100644 --- a/kernel/src/tty/term.h +++ b/kernel/include/term.h @@ -2,18 +2,15 @@ #include <stdint.h> #include <stddef.h> +#include <drivers/vga.h> -#include "color.h" - -#define TERM_W 80 -#define TERM_H 25 +#define TERM_W VGA_TEXT_W +#define TERM_H VGA_TEXT_H void term_init(void); - void term_reset(void); -void term_setfg(enum VGAColor color); -void term_setbg(enum VGAColor color); - +void term_setfg(enum vga_color color); +void term_setbg(enum vga_color color); void term_clear(void); void term_scroll(int lines); void term_setpos(uint8_t x, uint8_t y); diff --git a/kernel/src/tty/term.c b/kernel/src/term.c index a7451d2..4b42a6a 100644 --- a/kernel/src/tty/term.c +++ b/kernel/src/term.c @@ -5,12 +5,10 @@ #include <sys.h> #include <print.h> +#include "drivers/vga.h" #include "term.h" -#include "color.h" -#include "cursor.h" uint16_t buffer[TERM_W * TERM_H * sizeof(uint16_t)]; -uint16_t *front; uint8_t x, y; uint8_t color; @@ -28,7 +26,6 @@ static void term_clear_line(int y) { void term_init (void) { x = 0; y = 0; - front = (uint16_t*) 0xC03FF000; term_setfg(VGA_WHITE); term_setbg(VGA_BLACK); term_clear(); @@ -37,11 +34,11 @@ void term_init (void) { void term_setpos(uint8_t xp, uint8_t yp) { x = xp; y = yp; - cursor_setpos(x, y); + vgatext_cur_mov(x, y); } void term_scroll (int lines) { - int_disable(); + arch_disable_int(); y -= lines; if (!lines) return; if(lines >= TERM_H || lines <= -TERM_H) { @@ -52,14 +49,14 @@ void term_scroll (int lines) { } else { memmove(buffer + lines * TERM_W, buffer + lines, (TERM_H + lines) * TERM_W); } - int_enable(); + arch_enable_int(); } -void term_setfg(enum VGAColor c) { +void term_setfg(enum vga_color c) { color = (color & 0xF0) | c; } -void term_setbg(enum VGAColor c) { +void term_setbg(enum vga_color c) { color = (color & 0x0F) | c << 4; } @@ -80,7 +77,7 @@ void term_load(uint32_t state) { x = (uint8_t) (state >> 16); y = (uint8_t) (state >> 8); color = (uint8_t) (state >> 0); - cursor_setpos(x, y); + vgatext_cur_mov(x, y); } uint16_t term_save_col(void) { @@ -124,7 +121,7 @@ void putchar(int c) { y = TERM_H - 1; } - cursor_setpos(x, y); + vgatext_cur_mov(x, y); } bool term_newline(void) { @@ -132,7 +129,7 @@ bool term_newline(void) { } void term_flush(void) { - int_disable(); - memcpy(front, buffer, TERM_W * TERM_H * sizeof(uint16_t)); - int_enable(); + arch_disable_int(); + vgatext_write_buf(buffer); + arch_enable_int(); } diff --git a/kernel/src/tty/color.c b/kernel/src/tty/color.c deleted file mode 100644 index c7258d9..0000000 --- a/kernel/src/tty/color.c +++ /dev/null @@ -1,67 +0,0 @@ -#include "color.h" -#include "panic.h" - -bool itoac(int i, enum AnsiiColor *color) { - if (i < 0 || i > 15) return false; - *color = i; - return true; -} - -bool itovc(int i, enum VGAColor *color) { - if ( - (i >= 30 && i <= 37) || - (i >= 40 && i <= 47) || - (i >= 90 && i <= 97) || - (i >= 100 && i <= 107) - ) { - *color = i; - return true; - } - return false; -} - -enum VGAColor atovc(enum AnsiiColor color) { - switch(color) { - case ANSII_FRONT_BLACK: - case ANSII_FRONT_BLACK_EMPH: - case ANSII_BACK_BLACK: - case ANSII_BACK_BLACK_EMPH: - return VGA_BLACK; - case ANSII_FRONT_RED: - case ANSII_FRONT_RED_EMPH: - case ANSII_BACK_RED: - case ANSII_BACK_RED_EMPH: - return VGA_LIGHT_RED; - case ANSII_FRONT_GREEN: - case ANSII_FRONT_GREEN_EMPH: - case ANSII_BACK_GREEN: - case ANSII_BACK_GREEN_EMPH: - return VGA_LIGHT_GREEN; - case ANSII_FRONT_YELLOW: - case ANSII_FRONT_YELLOW_EMPH: - case ANSII_BACK_YELLOW: - case ANSII_BACK_YELLOW_EMPH: - return VGA_LIGHT_BROWN; - case ANSII_FRONT_BLUE: - case ANSII_FRONT_BLUE_EMPH: - case ANSII_BACK_BLUE: - case ANSII_BACK_BLUE_EMPH: - return VGA_LIGHT_BLUE; - case ANSII_FRONT_PURPLE: - case ANSII_FRONT_PURPLE_EMPH: - case ANSII_BACK_PURPLE: - case ANSII_BACK_PURPLE_EMPH: - return VGA_LIGHT_MAGENTA; - case ANSII_FRONT_CYAN: - case ANSII_FRONT_CYAN_EMPH: - case ANSII_BACK_CYAN: - case ANSII_BACK_CYAN_EMPH: - return VGA_LIGHT_CYAN; - case ANSII_FRONT_WHITE: - case ANSII_FRONT_WHITE_EMPH: - case ANSII_BACK_WHITE: - case ANSII_BACK_WHITE_EMPH: - return VGA_WHITE; - } - panic("this should not be reached (make gcc quiet)"); -} diff --git a/kernel/src/tty/color.h b/kernel/src/tty/color.h deleted file mode 100644 index 0751353..0000000 --- a/kernel/src/tty/color.h +++ /dev/null @@ -1,62 +0,0 @@ -#pragma once - -#include <stdbool.h> -#include <stdint.h> - -enum VGAColor { - VGA_BLACK = 0, - VGA_BLUE = 1, - VGA_GREEN = 2, - VGA_CYAN = 3, - VGA_RED = 4, - VGA_MAGENTA = 5, - VGA_BROWN = 6, - VGA_LIGHT_GREY = 7, - VGA_DARK_GREY = 8, - VGA_LIGHT_BLUE = 9, - VGA_LIGHT_GREEN = 10, - VGA_LIGHT_CYAN = 11, - VGA_LIGHT_RED = 12, - VGA_LIGHT_MAGENTA = 13, - VGA_LIGHT_BROWN = 14, - VGA_WHITE = 15, -}; - -enum AnsiiColor { - ANSII_FRONT_BLACK = 30, - ANSII_FRONT_RED = 31, - ANSII_FRONT_GREEN = 32, - ANSII_FRONT_YELLOW = 33, - ANSII_FRONT_BLUE = 34, - ANSII_FRONT_PURPLE = 35, - ANSII_FRONT_CYAN = 36, - ANSII_FRONT_WHITE = 37, - ANSII_FRONT_BLACK_EMPH = 90, - ANSII_FRONT_RED_EMPH = 91, - ANSII_FRONT_GREEN_EMPH = 92, - ANSII_FRONT_YELLOW_EMPH = 93, - ANSII_FRONT_BLUE_EMPH = 94, - ANSII_FRONT_PURPLE_EMPH = 95, - ANSII_FRONT_CYAN_EMPH = 96, - ANSII_FRONT_WHITE_EMPH = 97, - ANSII_BACK_BLACK = 40, - ANSII_BACK_RED = 41, - ANSII_BACK_GREEN = 42, - ANSII_BACK_YELLOW = 43, - ANSII_BACK_BLUE = 44, - ANSII_BACK_PURPLE = 45, - ANSII_BACK_CYAN = 46, - ANSII_BACK_WHITE = 47, - ANSII_BACK_BLACK_EMPH = 100, - ANSII_BACK_RED_EMPH = 101, - ANSII_BACK_GREEN_EMPH = 102, - ANSII_BACK_YELLOW_EMPH = 103, - ANSII_BACK_BLUE_EMPH = 104, - ANSII_BACK_PURPLE_EMPH = 105, - ANSII_BACK_CYAN_EMPH = 106, - ANSII_BACK_WHITE_EMPH = 107, -}; - -bool itoac(int i, enum AnsiiColor *color); -bool itovc(int i, enum VGAColor *color); -enum VGAColor atovc(enum AnsiiColor color); diff --git a/kernel/src/tty/cursor.c b/kernel/src/tty/cursor.c deleted file mode 100644 index 3a3888b..0000000 --- a/kernel/src/tty/cursor.c +++ /dev/null @@ -1,30 +0,0 @@ -#include <sys.h> - -#include "cursor.h" -#include "term.h" - -void cursor_enable(void) { - cursor_setsize(13, 16); -} - -void cursor_disable(void) { - outb(0x3D4, 0x0A); - outb(0x3D5, 0x20); -} - -void cursor_setsize(uint8_t start, uint8_t end) { - outb(0x3D4, 0x0A); - outb(0x3D5, (inb(0x3D5) & 0xC0) | start); - - outb(0x3D4, 0x0B); - outb(0x3D5, (inb(0x3D5) & 0xE0) | end); -} - -void cursor_setpos(uint8_t x, uint8_t y) { -; uint16_t pos = y * TERM_W + x; - - outb(0x3D4, 0x0F); - outb(0x3D5, (uint8_t) (pos & 0xFF)); - outb(0x3D4, 0x0E); - outb(0x3D5, (uint8_t) ((pos >> 8) & 0xFF)); -} diff --git a/kernel/src/tty/cursor.h b/kernel/src/tty/cursor.h deleted file mode 100644 index 602d9cd..0000000 --- a/kernel/src/tty/cursor.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -#include <stdint.h> - -void cursor_enable(void); -void cursor_disable(void); -void cursor_setsize(uint8_t start, uint8_t end); -void cursor_setpos(uint8_t x, uint8_t y); - |