summaryrefslogtreecommitdiff
path: root/kernel/src/tty
diff options
context:
space:
mode:
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.c67
-rw-r--r--kernel/src/tty/color.h62
-rw-r--r--kernel/src/tty/cursor.c30
-rw-r--r--kernel/src/tty/cursor.h9
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);
-