diff options
| author | Franklin Wei <frankhwei536@gmail.com> | 2015-03-01 13:22:21 -0500 |
|---|---|---|
| committer | Franklin Wei <frankhwei536@gmail.com> | 2015-03-01 13:22:21 -0500 |
| commit | b8f54e63d2b8f8007c580adf2a6034c98a0f2eaa (patch) | |
| tree | 9e22526dd25bff3be2f78a5d29e62f7f677d4c09 /drivers/tty.c | |
| parent | 6e86a3abee2d9b2c03452cd62997c2152a3332aa (diff) | |
| download | kappa-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.c | 124 |
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++); - } -} |