aboutsummaryrefslogtreecommitdiff
path: root/drivers/tty.c
diff options
context:
space:
mode:
authorFranklin Wei <frankhwei536@gmail.com>2015-03-01 13:22:21 -0500
committerFranklin Wei <frankhwei536@gmail.com>2015-03-01 13:22:21 -0500
commitb8f54e63d2b8f8007c580adf2a6034c98a0f2eaa (patch)
tree9e22526dd25bff3be2f78a5d29e62f7f677d4c09 /drivers/tty.c
parent6e86a3abee2d9b2c03452cd62997c2152a3332aa (diff)
downloadkappa-b8f54e63d2b8f8007c580adf2a6034c98a0f2eaa.zip
kappa-b8f54e63d2b8f8007c580adf2a6034c98a0f2eaa.tar.gz
kappa-b8f54e63d2b8f8007c580adf2a6034c98a0f2eaa.tar.bz2
kappa-b8f54e63d2b8f8007c580adf2a6034c98a0f2eaa.tar.xz
rename TTY driver to vgatext
Diffstat (limited to 'drivers/tty.c')
-rw-r--r--drivers/tty.c124
1 files changed, 0 insertions, 124 deletions
diff --git a/drivers/tty.c b/drivers/tty.c
deleted file mode 100644
index a77071b..0000000
--- a/drivers/tty.c
+++ /dev/null
@@ -1,124 +0,0 @@
-#include <stdint.h>
-#include <stdio.h>
-#include "gfx.h"
-#include "io.h"
-#include "panic.h"
-#include "tty.h"
-
-static int term_x, term_y;
-static uint8_t term_col;
-/* VGA buffer starts at 0xB8000 on color or 0xB0000 on monochrome */
-static uint16_t *term_buf;
-
-static uint16_t video_detect_hardware(void)
-{
- const uint16_t *ptr = (const uint16_t*)0x410;
- return *ptr;
-}
-
-void tty_init(void)
-{
- uint16_t vid_type = video_detect_hardware() & 0x30;
- if(vid_type == 0x20)
- {
- /* color */
- term_buf = (uint16_t*)0xB8000;
- }
- else if(vid_type == 0x30)
- {
- term_buf = (uint16_t*)0xB0000;
- }
- else
- {
- /* none */
- panic("TTY init failed!");
- }
- tty_set_color(VGA_MAKE_COLOR(VGA_LIGHT_GRAY, VGA_BLACK));
- tty_clear();
- set_putchar(tty_putchar);
- set_puts(tty_puts);
-}
-
-static void move_cursor(uint16_t cursor_idx)
-{
- outb(0x3D4, 14);
- outb(0x3D5, cursor_idx >> 8); // high byte
- outb(0x3D4, 15);
- outb(0x3D5, cursor_idx); // low byte
-}
-
-static void update_cursor(void)
-{
- move_cursor(term_y * VGA_WIDTH + term_x);
-}
-
-void tty_clear(void)
-{
- term_x = 0;
- term_y = 0;
- for(int y = 0; y < VGA_HEIGHT; ++y)
- {
- for(int x = 0; x < VGA_WIDTH; ++x)
- {
- term_buf[y * VGA_WIDTH + x] = VGA_MAKE_ENTRY(' ', term_col);
- }
- }
-}
-
-void tty_set_color(uint8_t color)
-{
- term_col = color;
-}
-
-uint8_t tty_get_color(void)
-{
- return term_col;
-}
-
-void tty_putchar_at(int ch, uint8_t col, int x, int y)
-{
- term_buf[y * VGA_WIDTH + x] = VGA_MAKE_ENTRY((char)ch, col);
-}
-
-void tty_putchar(int ch)
-{
- if(ch != '\n' && ch != '\b')
- {
- tty_putchar_at(ch, term_col, term_x, term_y);
- if(++term_x == VGA_WIDTH)
- {
- term_x = 0;
- if(++term_y == VGA_HEIGHT)
- {
- tty_clear();
- term_y = 0;
- }
- }
- }
- else if(ch == '\n')
- {
- term_x = 0;
- if(++term_y == VGA_HEIGHT)
- {
- tty_clear();
- term_y = 0;
- }
- }
- else if(ch == '\b')
- {
- int temp_x = term_x - 1;
- if(temp_x >= 0)
- term_x = temp_x;
- tty_putchar_at(' ', term_col, term_x, term_y);
- }
-
- update_cursor();
-}
-
-void tty_puts(const char *str)
-{
- while(*str)
- {
- tty_putchar(*str++);
- }
-}