aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorFranklin Wei <frankhwei536@gmail.com>2015-03-01 14:20:47 -0500
committerFranklin Wei <frankhwei536@gmail.com>2015-03-01 14:20:47 -0500
commitc7252588ebb95f97631e9470778c69afa00c35b5 (patch)
tree06d760878e18f6cddbe4305cddd4d5dfa74529f8 /drivers
parentb8f54e63d2b8f8007c580adf2a6034c98a0f2eaa (diff)
downloadkappa-c7252588ebb95f97631e9470778c69afa00c35b5.zip
kappa-c7252588ebb95f97631e9470778c69afa00c35b5.tar.gz
kappa-c7252588ebb95f97631e9470778c69afa00c35b5.tar.bz2
kappa-c7252588ebb95f97631e9470778c69afa00c35b5.tar.xz
Huge restructure
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gfx-as.S101
-rw-r--r--drivers/gfx.c540
-rw-r--r--drivers/include/gfx.h105
-rw-r--r--drivers/include/gfx_font.h4
-rw-r--r--drivers/include/pcspkr.h3
-rw-r--r--drivers/include/ps2_keymaps.h39
-rw-r--r--drivers/include/ps2kbd.h66
-rw-r--r--drivers/include/vgatext.h9
-rw-r--r--drivers/pcspkr.c19
-rw-r--r--drivers/ps2kbd.c212
-rw-r--r--drivers/vgatext.c124
11 files changed, 0 insertions, 1222 deletions
diff --git a/drivers/gfx-as.S b/drivers/gfx-as.S
deleted file mode 100644
index a58fa12..0000000
--- a/drivers/gfx-as.S
+++ /dev/null
@@ -1,101 +0,0 @@
- .extern fb_width
- .extern fb_height
- .extern fb_stride
- .extern fb_bpp
- .extern _gfx_fgcol
- .extern _gfx_bgcol
- .extern framebuffer
-
- .global gfx_clear_packed
-gfx_clear_packed:
- movl framebuffer, %eax
- movzwl fb_stride, %ecx
- movzwl fb_height, %edx
- imull %ecx, %edx
- addl %eax, %edx
- pushl %ebx
- movzwl fb_bpp, %ebx
- movl _gfx_bgcol, %ecx
-.L1:
- movl %ecx, (%eax)
- addl %ebx, %eax
- cmpl %eax, %edx
- ja .L1
-.L2:
- popl %ebx
- ret
-
- .global gfx_hline_fast
-
-gfx_hline_fast:
- int $0x80
- pushl %ebx
- movl 8(%esp), %eax
- movl 12(%esp), %ecx
- cmpl %eax, %ecx
- jge .L3
- xchgl %eax, %ecx
-.L3:
- movzwl fb_stride, %edx
- movzbl fb_bpp, %ebx
- imull 16(%esp), %edx
- addl framebuffer, %edx
- imull %ebx, %ecx
- imull %ebx, %eax
- addl %edx, %eax
- addl %ecx, %edx
- movl _gfx_fgcol, %ecx
- cmpl %edx, %eax
- jnb .L5
-.L4:
- movl %ecx, (%eax)
- addl %ebx, %eax
- cmpl %eax, %edx
- ja .L4
-.L5:
- popl %ebx
- ret
-
- .global gfx_vline_fast
-
-gfx_vline_fast:
- pushl %esi
- pushl %ebx
- movl 12(%esp), %eax
- movl 16(%esp), %edx
- cmpl %eax, %edx
- jge .L6
- xchgl %eax, %edx
-.L6:
- movzwl fb_stride, %ebx
- movzbl fb_bpp, %ecx
- imull 20(%esp), %ecx
- movl framebuffer, %esi
- imull %ebx, %edx
- imull %ebx, %eax
- addl %ecx, %eax
- addl %edx, %ecx
- leal (%esi,%ecx), %edx
- addl %esi, %eax
- movl _gfx_fgcol, %ecx
- cmpl %edx, %eax
- jnb .L8
-.L7:
- movl %ecx, (%eax)
- addl %ebx, %eax
- cmpl %eax, %edx
- ja .L7
-.L8:
- popl %ebx
- popl %esi
- ret
-
- .global gfx_drawpixel_32bpp
-gfx_drawpixel_32bpp:
- movzwl fb_stride32, %eax
- movl framebuffer, %edx
- imull 8(%esp), %eax
- movl _gfx_fgcol, %ecx
- addl 4(%esp), %eax
- movl %ecx, (%edx,%eax,4)
- ret
diff --git a/drivers/gfx.c b/drivers/gfx.c
deleted file mode 100644
index 2f4864b..0000000
--- a/drivers/gfx.c
+++ /dev/null
@@ -1,540 +0,0 @@
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "gfx_font.h"
-#include "log.h"
-#include "multiboot.h"
-#include "paging.h"
-#include "panic.h"
-#include "gfx.h"
-
-uint8_t *real_framebuffer = NULL;
-uint8_t *temp_framebuffer = NULL;
-uint8_t *framebuffer = NULL;
-bool double_buffer = false;
-uint16_t fb_width;
-uint16_t fb_height;
-
-/* this is BYTES per pixel */
-uint8_t fb_bpp;
-uint16_t fb_stride;
-/* fb_stride / 4 */
-uint16_t fb_stride32;
-const uint8_t *gfx_bpp = &fb_bpp;
-
-const uint16_t *gfx_width = &fb_width;
-const uint16_t *gfx_height = &fb_height;
-
-static int cursor_x, cursor_y;
-uint32_t _gfx_fgcol, _gfx_bgcol;
-
-void (*gfx_clear)(void);
-void (*gfx_drawpixel)(int x, int y);
-void (*gfx_hline)(int x1, int x2, int y);
-void (*gfx_vline)(int y1, int y2, int x);
-
-void gfx_set_background(uint32_t col)
-{
- _gfx_bgcol = col;
-}
-
-uint32_t gfx_get_background(void)
-{
- return _gfx_bgcol;
-}
-
-void gfx_set_foreground(uint32_t col)
-{
- _gfx_fgcol = col;
-}
-
-uint32_t gfx_get_foreground(void)
-{
- return _gfx_fgcol;
-}
-
-/* assembly */
-void gfx_drawpixel_32bpp_checked(int x, int y)
-{
- if(0 <= x && x < fb_width &&
- 0 <= y && y < fb_height)
- ((uint32_t*)framebuffer)[y * fb_stride32 + x] = _gfx_fgcol;
- else
- panic("pixel OOB!\n");
-}
-
-/* implemented in assembly now */
-/*
-void gfx_clear(uint32_t col)
-{
- uint8_t *p = framebuffer;
- uint8_t *stop = framebuffer + fb_width * fb_height * fb_bpp;
- while(p < stop)
- {
- *(uint32_t*)p = col;
- p += fb_bpp;
- }
-}
-*/
-
-void gfx_clear_unpacked(void)
-{
- uint8_t *fb = framebuffer;
- const uint32_t bg = _gfx_bgcol;
-
- const uint16_t padding = fb_stride - (fb_bpp * fb_width);
-
- for(int y = 0; y < fb_height; ++y)
- {
- for(int x = 0; x < fb_width; ++x)
- {
- *(uint32_t*)fb++ = bg;
- }
- fb += padding;
- }
-}
-
-void gfx_reset(void)
-{
- _gfx_fgcol = VGA_RGBPACK(0xff, 0xff, 0xff);
- _gfx_bgcol = VGA_RGBPACK(0, 0, 0);
- gfx_clear();
- cursor_y = 0;
- cursor_x = 0;
-}
-
-void gfx_drawchar(int x, int y, int c)
-{
- uint8_t *line_addr = framebuffer + (x * fb_bpp) + (y * fb_stride);
- const uint32_t fg = _gfx_fgcol;
- const uint16_t stride = fb_stride;
- const uint8_t stop_y = MIN(FONT_HEIGHT, fb_height - y);
- const uint8_t stop_x = MIN(FONT_WIDTH, fb_width - x);
- if(c < 0 || c > 132)
- return;
- for(int i = 0; i < stop_y; ++i)
- {
- uint8_t mask_table[8] = {128, 64, 32, 16, 8, 4, 2, 1};
- for(int j = 0; j < stop_x; ++j)
- {
- if(gfx_font[c][i] & mask_table[j])
- ((uint32_t*)line_addr)[j] = fg;
- }
- line_addr += stride;
- }
-}
-
-void gfx_drawchar_bg(int x, int y, int c)
-{
- uint8_t *line_addr = framebuffer + (x * fb_bpp) + (y * fb_stride);
- const uint32_t fg = _gfx_fgcol;
- const uint16_t stride = fb_stride;
- const uint8_t stop_y = MIN(FONT_HEIGHT, fb_height - y);
- const uint8_t stop_x = MIN(FONT_WIDTH, fb_width - x);
- if(c < 0 || c > 132)
- return;
- for(int i = 0; i < stop_y; ++i)
- {
- uint8_t mask_table[8] = {128, 64, 32, 16, 8, 4, 2, 1};
- for(int j = 0; j < stop_x; ++j)
- {
- if(gfx_font[c][i] & mask_table[j])
- ((uint32_t*)line_addr)[j] = fg;
- else
- ((uint32_t*)line_addr)[j] = _gfx_bgcol;
- }
- line_addr += stride;
- }
-}
-
-void gfx_putchar(int ch)
-{
- if(ch != '\n' && ch != '\b')
- {
- gfx_drawchar(cursor_x, cursor_y, ch);
- cursor_x += FONT_WIDTH;
- if(cursor_x >= fb_width)
- {
- cursor_x = 0;
- cursor_y += FONT_HEIGHT;
- if(cursor_y >= fb_height)
- {
- gfx_clear();
- cursor_y = 0;
- }
- }
- }
- else if(ch == '\n')
- {
- cursor_x = 0;
- cursor_y += FONT_HEIGHT;
- if(cursor_y >= fb_height)
- {
- gfx_clear();
- cursor_y = 0;
- }
- }
- else if(ch == '\b')
- {
- int temp_x = cursor_x - FONT_WIDTH;
- if(temp_x >= 0)
- cursor_x = temp_x;
- gfx_drawchar_bg(cursor_x, cursor_y, ' ');
- }
-}
-
-void gfx_puts(const char* str)
-{
- while(*str)
- {
- gfx_putchar(*str++);
- }
-}
-
-/* implemented in assembly now */
-void gfx_hline_checked(int x1, int x2, int y)
-{
- /* make sure x1 is to the left of x2 */
- if(x2 < x1)
- {
- int temp = x1;
- x1 = x2;
- x2 = temp;
- }
-
- x1 = MAX(0, x1);
- x2 = MIN(x2, fb_width);
-
- if(0 <= y && y < fb_height)
- {
-
- uint8_t *base = framebuffer + y * fb_stride;
-
- uint8_t *dest = base + x1 * fb_bpp;
- uint8_t *stop = base + x2 * fb_bpp;
- const uint32_t col = _gfx_fgcol;
- while(dest < stop)
- {
- *(uint32_t*)dest = col;
- dest += fb_bpp;
- }
- }
-}
-
-void gfx_vline_checked(int y1, int y2, int x)
-{
- /* make sure y1 is above y2 */
- if(y2 < y1)
- {
- int temp = y1;
- y1 = y2;
- y2 = temp;
- }
-
- y1 = MAX(0, y1);
- y2 = MIN(y2, fb_height);
-
- if(0 <= x && x < fb_width)
- {
- uint8_t *dest = framebuffer + y1 * fb_stride + x * fb_bpp;
- uint8_t *stop = framebuffer + y2 * fb_stride + x * fb_bpp;
- const uint32_t col = _gfx_fgcol;
- const uint16_t stride = fb_stride;
- while(dest < stop)
- {
- *(uint32_t*)dest = col;
- dest += stride;
- }
- }
-}
-
-void gfx_fillrect(int x, int y, int w, int h)
-{
- for(int i = 0; i < h; ++i)
- {
- gfx_hline(x, x + w, y + i);
- }
-}
-
-void gfx_drawline(int x1, int y1, int x2, int y2)
-{
- int dx = abs(x2 - x1);
- int sx = x1 < x2 ? 1 : -1;
- int dy = -abs(y2 - y1);
- int sy = y1 < y2 ? 1 : -1;
- int err = dx + dy;
- int e2; /* error value e_xy */
-
- while(1)
- {
- gfx_drawpixel(x1, y1);
- if (x1 == x2 && y1 == y2)
- break;
- e2 = err << 1;
- if (e2 >= dy)
- {
- err += dy;
- x1 += sx;
- }
- if (e2 <= dx)
- {
- err += dx;
- y1 += sy;
- }
- }
-}
-
-void gfx_drawcircle(int cx, int cy, int r)
-{
- int d = 3 - (r * 2);
- int x = 0;
- int y = r;
- while(x <= y)
- {
- gfx_drawpixel(cx + x, cy + y);
- gfx_drawpixel(cx - x, cy + y);
- gfx_drawpixel(cx + x, cy - y);
- gfx_drawpixel(cx - x, cy - y);
- gfx_drawpixel(cx + y, cy + x);
- gfx_drawpixel(cx - y, cy + x);
- gfx_drawpixel(cx + y, cy - x);
- gfx_drawpixel(cx - y, cy - x);
- if(d < 0)
- {
- d += (x * 4) + 6;
- }
- else
- {
- d += ((x - y) * 4) + 10;
- --y;
- }
- ++x;
- }
-}
-
-void gfx_fillcircle(int cx, int cy, int r)
-{
- int d = 3 - (r * 2);
- int x = 0;
- int y = r;
- while(x <= y)
- {
- gfx_hline(cx - x, cx + x, cy + y);
- gfx_hline(cx - x, cx + x, cy - y);
- gfx_hline(cx - y, cx + y, cy + x);
- gfx_hline(cx - y, cx + y, cy - x);
- if(d < 0)
- {
- d += (x * 4) + 6;
- }
- else
- {
- d += ((x - y) * 4) + 10;
- --y;
- }
- ++x;
- }
-}
-
-/* these next two functions were taken directly from the Rockbox project's XLCD
- * library.
- * Copyright (C) 2005 Jens Arnold */
-
-/* sort the given coordinates by increasing x value */
-static void sort_points_by_increasing_y(int* y1, int* x1,
- int* y2, int* x2,
- int* y3, int* x3)
-{
- int x, y;
- if (*x1 > *x3)
- {
- if (*x2 < *x3) /* x2 < x3 < x1 */
- {
- x = *x1; *x1 = *x2; *x2 = *x3; *x3 = x;
- y = *y1; *y1 = *y2; *y2 = *y3; *y3 = y;
- }
- else if (*x2 > *x1) /* x3 < x1 < x2 */
- {
- x = *x1; *x1 = *x3; *x3 = *x2; *x2 = x;
- y = *y1; *y1 = *y3; *y3 = *y2; *y2 = y;
- }
- else /* x3 <= x2 <= x1 */
- {
- x = *x1; *x1 = *x3; *x3 = x;
- y = *y1; *y1 = *y3; *y3 = y;
- }
- }
- else
- {
- if (*x2 < *x1) /* x2 < x1 <= x3 */
- {
- x = *x1; *x1 = *x2; *x2 = x;
- y = *y1; *y1 = *y2; *y2 = y;
- }
- else if (*x2 > *x3) /* x1 <= x3 < x2 */
- {
- x = *x2; *x2 = *x3; *x3 = x;
- y = *y2; *y2 = *y3; *y3 = y;
- }
- /* else already sorted */
- }
-}
-
-/* draw a filled triangle, using horizontal lines for speed */
-void gfx_filltriangle(int x1, int y1,
- int x2, int y2,
- int x3, int y3)
-{
- long fp_x1, fp_x2, fp_dx1, fp_dx2;
- int y;
- sort_points_by_increasing_y(&x1, &y1, &x2, &y2, &x3, &y3);
-
- if (y1 < y3) /* draw */
- {
- fp_dx1 = ((x3 - x1) << 16) / (y3 - y1);
- fp_x1 = (x1 << 16) + (1<<15) + (fp_dx1 >> 1);
-
- if (y1 < y2) /* first part */
- {
- fp_dx2 = ((x2 - x1) << 16) / (y2 - y1);
- fp_x2 = (x1 << 16) + (1<<15) + (fp_dx2 >> 1);
- for (y = y1; y < y2; y++)
- {
- gfx_hline(fp_x1 >> 16, fp_x2 >> 16, y);
- fp_x1 += fp_dx1;
- fp_x2 += fp_dx2;
- }
- }
- if (y2 < y3) /* second part */
- {
- fp_dx2 = ((x3 - x2) << 16) / (y3 - y2);
- fp_x2 = (x2 << 16) + (1<<15) + (fp_dx2 >> 1);
- for (y = y2; y < y3; y++)
- {
- gfx_hline(fp_x1 >> 16, fp_x2 >> 16, y);
- fp_x1 += fp_dx1;
- fp_x2 += fp_dx2;
- }
- }
- }
-}
-
-static void gfx_bitmap32(int x, int y, const struct bitmap_t *bmp)
-{
- /* SLOOW */
- uint8_t *data = bmp->data;
- for(unsigned int i = y; i < y + bmp->h && i < fb_height; ++i)
- {
- for(unsigned int j = x; j < x + bmp->w && j < fb_width; ++j)
- {
- uint8_t r = *data++;
- uint8_t g = *data++;
- uint8_t b = *data++;
- gfx_set_foreground(VGA_RGBPACK(r, g, b));
- gfx_drawpixel(j, i);
- }
- }
-}
-
-void gfx_bitmap(int x, int y, const struct bitmap_t *bmp)
-{
- gfx_bitmap32(x, y, bmp);
-}
-
-void gfx_drawrect(int x, int y, int w, int h)
-{
- gfx_hline(MAX(0, x), MIN(x + w, fb_width), MAX(0, y));
- gfx_hline(MAX(0, x), MIN(x + w, fb_width), MIN(y + h, fb_height));
- gfx_vline(MAX(0, y), MIN(y + h, fb_height),MAX(0, x));
- gfx_vline(MAX(0, y), MIN(y + h, fb_height),MIN(x + w, fb_width));
-}
-
-void gfx_update(void)
-{
- memcpy(real_framebuffer, framebuffer, fb_height * fb_stride);
-}
-
-void gfx_set_doublebuffer(bool yesno)
-{
- if(yesno)
- framebuffer = temp_framebuffer;
- else
- framebuffer = real_framebuffer;
-}
-
-bool gfx_get_doublebuffer(void)
-{
- if(framebuffer == temp_framebuffer)
- return true;
- else
- return false;
-}
-
-void gfx_putsxy(int x, int y, const char* str)
-{
- while(*str)
- {
- gfx_drawchar(x, y, *str);
- x += FONT_WIDTH;
- str++;
- }
-}
-
-void gfx_putsxy_bg(int x, int y, const char* str)
-{
- while(*str)
- {
- gfx_drawchar_bg(x, y, *str);
- x += FONT_WIDTH;
- str++;
- }
-}
-
-bool gfx_init(struct vbe_info_t *vbe_mode_info)
-{
- real_framebuffer = (uint8_t*)vbe_mode_info->physbase;
- gfx_set_doublebuffer(false);
- fb_width = vbe_mode_info->Xres;
- fb_height = vbe_mode_info->Yres;
- fb_bpp = vbe_mode_info->bpp / 8;
- fb_stride = vbe_mode_info->pitch;
- fb_stride32 = fb_stride / sizeof(uint32_t);
- gfx_hline = gfx_hline_checked;
- gfx_vline = gfx_vline_checked;
- temp_framebuffer = malloc(fb_height * fb_stride);
- if(fb_bpp != 4)
- {
- printf("WARNING: BPP != 32, falling back to text mode...\n");
- return false;
- }
- else
- {
- extern void gfx_drawpixel_32bpp(int, int);
- gfx_drawpixel = &gfx_drawpixel_32bpp;
- }
-
- set_putchar(gfx_putchar);
- set_puts(gfx_puts);
-
- /* A bit of fragile code here... don't call gfx_reset() before setting gfx_clear! */
-
- if(fb_stride != fb_bpp * fb_width)
- {
- gfx_clear = &gfx_clear_unpacked;
- gfx_reset();
- printf("WARNING: Internal framebuffer padding detected, support is experimental.\n");
- }
- else
- {
- /* assembly */
- extern void gfx_clear_packed(void);
- gfx_clear = &gfx_clear_packed;
- gfx_reset();
- }
-
- printf("Real FB addr: 0x%x\n", (uint32_t)real_framebuffer);
-
- return true;
-}
diff --git a/drivers/include/gfx.h b/drivers/include/gfx.h
deleted file mode 100644
index 5e97100..0000000
--- a/drivers/include/gfx.h
+++ /dev/null
@@ -1,105 +0,0 @@
-#ifndef _GFX_H_
-#define _GFX_H_
-
-#include <stdbool.h>
-#include <stdint.h>
-
-enum vga_color_t {
- VGA_BLACK = 0,
- VGA_BLUE = 1,
- VGA_GREEN = 2,
- VGA_CYAN = 3,
- VGA_RED = 4,
- VGA_MAGENTA = 5,
- VGA_BROWN = 6,
- VGA_LIGHT_GRAY = 7,
- VGA_DARK_GRAY = 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
-};
-
-#define VGA_WIDTH 80
-#define VGA_HEIGHT 25
-
-#define VGA_MAKE_COLOR(fg, bg) (fg | bg << 4)
-#define VGA_MAKE_ENTRY(ch, col) (((uint16_t)ch)|((uint16_t)col<<8))
-#define VGA_RGBPACK(r, g, b) ((r << 16)|(g << 8)|(b << 0))
-
-#define GFX_WHITE 0xFFFFFF
-#define GFX_BLACK 0x000000
-
-struct vbe_info_t;
-
-bool gfx_init(struct vbe_info_t *vbe_mode_info);
-
-extern void (*gfx_drawpixel)(int x, int y);
-
-/* transparent background */
-void gfx_drawchar(int x, int y, int ch);
-
-/* fills the background with bgcolor */
-void gfx_drawchar_bg(int x, int y, int ch);
-
-void gfx_putchar(int ch);
-
-void gfx_puts(const char* str);
-
-/* this function can be different from resolution to resolution */
-extern void (*gfx_clear)(void);
-
-void gfx_reset(void);
-
-void gfx_set_foreground(uint32_t);
-
-uint32_t gfx_get_foreground(void);
-
-void gfx_set_background(uint32_t);
-
-uint32_t gfx_get_background(void);
-
-void (*gfx_hline)(int x1, int x2, int y);
-
-void (*gfx_vline)(int y1, int y2, int x);
-
-void gfx_fillrect(int x1, int y1, int w, int h);
-
-void gfx_drawline(int x1, int y1, int x2, int y2);
-
-/* these circle algorithms are very fast */
-void gfx_drawcircle(int cx, int cy, int rad);
-
-void gfx_fillcircle(int cx, int cy, int rad);
-
-void gfx_filltriangle(int x1, int y1, int x2, int y2, int x3, int y3);
-
-extern const uint16_t *gfx_width, *gfx_height;
-
-/* this is _BYTES_ per pixel, NOT BITS per pixel! */
-extern const uint8_t *gfx_bpp;
-
-struct bitmap_t {
- unsigned int w, h;
- unsigned int bpp;
- uint8_t *data;
-};
-
-void gfx_bitmap(int x, int y, const struct bitmap_t*);
-
-void gfx_drawrect(int x, int y, int w, int h);
-
-void gfx_set_doublebuffer(bool);
-
-bool gfx_get_doublebuffer(void);
-
-/* don't call this wo/ double buffering! */
-void gfx_update(void);
-
-void gfx_putsxy(int, int, const char*);
-
-void gfx_putsxy_bg(int, int, const char*);
-#endif
diff --git a/drivers/include/gfx_font.h b/drivers/include/gfx_font.h
deleted file mode 100644
index f7db9d7..0000000
--- a/drivers/include/gfx_font.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <stdint.h>
-#define FONT_WIDTH 8
-#define FONT_HEIGHT 12
-extern const uint8_t gfx_font[][FONT_HEIGHT];
diff --git a/drivers/include/pcspkr.h b/drivers/include/pcspkr.h
deleted file mode 100644
index 84e640f..0000000
--- a/drivers/include/pcspkr.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#include <stdint.h>
-
-void pcspkr_play(uint32_t freq);
diff --git a/drivers/include/ps2_keymaps.h b/drivers/include/ps2_keymaps.h
deleted file mode 100644
index 0e8ae26..0000000
--- a/drivers/include/ps2_keymaps.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <stdint.h>
-
-#define EXTENDED_SCANCODE 0xE0
-
-#define ERROR_KEY 0
-#define PRINTING_KEY 1
-#define SPECIAL_KEY 2
-
-#define SPECIAL_NONE 0
-#define SPECIAL_SHIFT 1
-#define SPECIAL_CTRL 2
-#define SPECIAL_BKSP 3
-#define SPECIAL_ALT 4
-#define SPECIAL_GUI 5
-#define SPECIAL_NUMLOCK 6
-#define SPECIAL_CAPLOCK 7
-#define SPECIAL_SCRLLOCK 8
-#define SPECIAL_UPARROW 9
-#define SPECIAL_DNARROW 10
-#define SPECIAL_LFTARROW 11
-#define SPECIAL_RTARROW 12
-#define SPECIAL_ESC 13
-#define SPECIAL_F1 21
-#define SPECIAL_F2 22
-#define SPECIAL_F3 23
-#define SPECIAL_F4 24
-#define SPECIAL_F5 25
-#define SPECIAL_F6 26
-#define SPECIAL_F7 27
-#define SPECIAL_F8 28
-#define SPECIAL_F9 29
-#define SPECIAL_F10 30
-#define SPECIAL_F11 31
-#define SPECIAL_F12 32
-
-extern uint8_t ps2_set1_scancodes[128];
-extern char ps2_set1_ascii[128];
-extern char ps2_set1_shift[128];
-extern uint8_t ps2_set1_special[128];
diff --git a/drivers/include/ps2kbd.h b/drivers/include/ps2kbd.h
deleted file mode 100644
index 9e353ee..0000000
--- a/drivers/include/ps2kbd.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* this is both a PS/2 keyboard AND a PS/2 MOUSE driver */
-#ifndef _PS2KBD_H_
-#define _PS2KBD_H_
-
-#include <stdbool.h>
-#include <stdint.h>
-
-#define PS2_SCROLL_LOCK (1 << 0)
-#define PS2_NUM_LOCK (1 << 1)
-#define PS2_CAPS_LOCK (1 << 2)
-
-#define BUTTON_UP (1 << 0)
-#define BUTTON_LEFT (1 << 1)
-#define BUTTON_DOWN (1 << 2)
-#define BUTTON_RIGHT (1 << 3)
-
-#define MODIFIER_NONE 0
-#define MODIFIER_SHIFT (1 << 0)
-#define MODIFIER_CTRL (1 << 1)
-#define MODIFIER_ALT (1 << 2)
-
-struct ps2_specialkeys_t {
- int shift :1;
- int ctrl :1;
- int bksp :1;
- int alt :1;
- int gui :1;
- int numlock :1;
- int capslock :1;
- int scrllock :1;
- int uparrow :1;
- int downarrow :1;
- int leftarrow :1;
- int rightarrow :1;
- int esc :1;
- int f1 :1;
- int f2 :1;
- int f3 :1;
- int f4 :1;
- int f5 :1;
- int f6 :1;
- int f7 :1;
- int f8 :1;
- int f9 :1;
- int f10 :1;
- int f11 :1;
- int f12 :1;
-};
-
-struct ps2_keyevent {
- const struct ps2_specialkeys_t *special_keys;
- char ascii;
-};
-
-/* returns which arrow keys are down */
-uint8_t ps2kbd_button_get(void);
-
-uint8_t ps2kbd_modifier_get(void);
-
-void ps2kbd_set_leds(uint8_t status);
-
-void ps2kbd_set_handler(void (*h)(const struct ps2_keyevent*));
-
-void ps2kbd_init(void);
-
-#endif
diff --git a/drivers/include/vgatext.h b/drivers/include/vgatext.h
deleted file mode 100644
index 1cfe4c4..0000000
--- a/drivers/include/vgatext.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <stdint.h>
-
-void vgatext_init(void);
-void vgatext_clear(void);
-void vgatext_set_color(uint8_t);
-uint8_t vgatext_get_color(void);
-void vgatext_putchar_at(int ch, uint8_t color, int x, int y);
-void vgatext_putchar(int ch);
-void vgatext_puts(const char*);
diff --git a/drivers/pcspkr.c b/drivers/pcspkr.c
deleted file mode 100644
index 33c0540..0000000
--- a/drivers/pcspkr.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <stdint.h>
-#include "io.h"
-#include "pcspkr.h"
-
-void pcspkr_play(uint32_t freq)
-{
- uint32_t div;
- uint8_t tmp;
-
- div = 1193180 / freq;
- outb(0x43, 0xb6);
- outb(0x42, (uint8_t)(div));
- outb(0x42, (uint8_t)(div >> 8));
-
- tmp = inb(0x61);
- if (tmp != (tmp | 3)) {
- outb(0x61, tmp | 3);
- }
-}
diff --git a/drivers/ps2kbd.c b/drivers/ps2kbd.c
deleted file mode 100644
index 29d02dc..0000000
--- a/drivers/ps2kbd.c
+++ /dev/null
@@ -1,212 +0,0 @@
-/* this is a PS/2 keyboard driver */
-#include <stdint.h>
-#include <stdio.h>
-#include <string.h>
-#include "io.h"
-#include "isr.h"
-#include "ps2kbd.h"
-#include "ps2_keymaps.h"
-
-static void ps2_wait(void)
-{
- /* wait for the keyboard */
- while(1)
- if ((inb(0x64) & 2) == 0) break;
-}
-
-void ps2kbd_set_leds(uint8_t status)
-{
- ps2_wait();
- outb(0x60, 0xED);
- outb(0x60, status);
-}
-
-#define IDX_UP 0
-#define IDX_LEFT 1
-#define IDX_DOWN 2
-#define IDX_RIGHT 3
-
-static uint8_t ps2_arrowkeys[4];
-
-uint8_t ps2kbd_button_get(void)
-{
- uint8_t ret = 0;
- if(ps2_arrowkeys[IDX_UP])
- ret |= BUTTON_UP;
- if(ps2_arrowkeys[IDX_LEFT])
- ret |= BUTTON_LEFT;
- if(ps2_arrowkeys[IDX_DOWN])
- ret |= BUTTON_DOWN;
- if(ps2_arrowkeys[IDX_RIGHT])
- ret |= BUTTON_RIGHT;
- return ret;
-}
-
-static uint8_t ps2_ctrl;
-static uint8_t ps2_shift;
-static uint8_t ps2_alt;
-
-uint8_t ps2kbd_modifier_get(void)
-{
- uint8_t ret = 0;
- if(ps2_ctrl)
- ret |= MODIFIER_CTRL;
- if(ps2_shift)
- ret |= MODIFIER_SHIFT;
- if(ps2_alt)
- ret |= MODIFIER_ALT;
- return ret;
-}
-
-static struct ps2_specialkeys_t special_keys;
-
-static void handle_special_key(uint8_t scancode, int release)
-{
- int press = ~release;
- switch(ps2_set1_special[scancode])
- {
- case SPECIAL_SHIFT:
- special_keys.shift = press;
- break;
- case SPECIAL_CTRL:
- special_keys.ctrl = press;
- break;
- case SPECIAL_BKSP:
- special_keys.bksp = press;
- break;
- case SPECIAL_ALT:
- special_keys.alt = press;
- break;
- case SPECIAL_NUMLOCK:
- special_keys.numlock = ~special_keys.numlock;
- ps2kbd_set_leds((special_keys.capslock << 2) | (special_keys.numlock << 1) | special_keys.scrllock);
- break;
- case SPECIAL_CAPLOCK:
- special_keys.capslock = ~special_keys.capslock;
- ps2kbd_set_leds((special_keys.capslock << 2) | (special_keys.numlock << 1) | special_keys.scrllock);
- break;
- case SPECIAL_SCRLLOCK:
- special_keys.scrllock = ~special_keys.scrllock;
- ps2kbd_set_leds((special_keys.capslock << 2) | (special_keys.numlock << 1) | special_keys.scrllock);
- break;
- case SPECIAL_ESC:
- special_keys.esc = press;
- break;
- case SPECIAL_F1:
- special_keys.f1 = press;
- break;
- case SPECIAL_F2:
- special_keys.f2 = press;
- break;
- case SPECIAL_F3:
- special_keys.f3 = press;
- break;
- case SPECIAL_F4:
- special_keys.f4 = press;
- break;
- case SPECIAL_F5:
- special_keys.f5 = press;
- break;
- case SPECIAL_F6:
- special_keys.f6 = press;
- break;
- case SPECIAL_F7:
- special_keys.f7 = press;
- break;
- case SPECIAL_F8:
- special_keys.f8 = press;
- break;
- case SPECIAL_F9:
- special_keys.f9 = press;
- break;
- case SPECIAL_F10:
- special_keys.f10 = press;
- break;
- case SPECIAL_F11:
- special_keys.f11 = press;
- break;
- case SPECIAL_F12:
- special_keys.f12 = press;
- break;
- }
-}
-
-static void handle_extended_scancode(void)
-{
- uint8_t temp = inb(0x60);
- (void) temp;
- //printf("Extended scancode: 0x%x\n", temp);
-}
-
-void (*keyevent_handler)(const struct ps2_keyevent*);
-
-static void key_handler(struct regs_t *regs)
-{
- (void) regs;
- uint8_t scancode = inb(0x60);
- //printf("INTR SCAN: 0x%x\n", scancode);
- if(scancode == EXTENDED_SCANCODE)
- {
- handle_extended_scancode();
- return;
- }
-
- /* AND by 0x7F to get in the range of [0,128) */
-
- int type = ps2_set1_scancodes[scancode & 0x7F];
- int release = (scancode & (1<<7)) >> 7;
- char ascii = '\0';
- switch(type)
- {
- case PRINTING_KEY:
- {
- if(!release)
- {
- int capitals = special_keys.capslock;
- if(special_keys.shift)
- capitals = ~capitals;
- if(capitals)
- ascii = ps2_set1_shift[scancode];
- else
- ascii = ps2_set1_ascii[scancode];
- }
- break;
- }
- case SPECIAL_KEY:
- handle_special_key(scancode & 0x7F, release);
- break;
- }
- if(special_keys.bksp)
- ascii = '\b';
- if(keyevent_handler)
- {
- struct ps2_keyevent ev;
- ev.special_keys = &special_keys;
- ev.ascii = ascii;
- keyevent_handler(&ev);
- }
-}
-
-static void ps2_set_scancode_set(uint8_t set)
-{
- ps2_wait();
- outb(0x60, 0xF0);
- outb(0x60, set);
-}
-
-static void keyboard_init(void)
-{
- set_interrupt_handler(IRQ(1), key_handler);
- ps2_set_scancode_set(1);
- memset(&special_keys, 0, sizeof(special_keys));
-}
-
-void ps2kbd_set_handler(void (*handler)(const struct ps2_keyevent*))
-{
- keyevent_handler = handler;
-}
-
-void ps2kbd_init(void)
-{
- keyboard_init();
-}
diff --git a/drivers/vgatext.c b/drivers/vgatext.c
deleted file mode 100644
index d0633af..0000000
--- a/drivers/vgatext.c
+++ /dev/null
@@ -1,124 +0,0 @@
-#include <stdint.h>
-#include <stdio.h>
-#include "gfx.h"
-#include "io.h"
-#include "panic.h"
-#include "vgatext.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 vgatext_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("VGATEXT init failed!");
- }
- vgatext_set_color(VGA_MAKE_COLOR(VGA_LIGHT_GRAY, VGA_BLACK));
- vgatext_clear();
- set_putchar(vgatext_putchar);
- set_puts(vgatext_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 vgatext_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 vgatext_set_color(uint8_t color)
-{
- term_col = color;
-}
-
-uint8_t vgatext_get_color(void)
-{
- return term_col;
-}
-
-void vgatext_putchar_at(int ch, uint8_t col, int x, int y)
-{
- term_buf[y * VGA_WIDTH + x] = VGA_MAKE_ENTRY((char)ch, col);
-}
-
-void vgatext_putchar(int ch)
-{
- if(ch != '\n' && ch != '\b')
- {
- vgatext_putchar_at(ch, term_col, term_x, term_y);
- if(++term_x == VGA_WIDTH)
- {
- term_x = 0;
- if(++term_y == VGA_HEIGHT)
- {
- vgatext_clear();
- term_y = 0;
- }
- }
- }
- else if(ch == '\n')
- {
- term_x = 0;
- if(++term_y == VGA_HEIGHT)
- {
- vgatext_clear();
- term_y = 0;
- }
- }
- else if(ch == '\b')
- {
- int temp_x = term_x - 1;
- if(temp_x >= 0)
- term_x = temp_x;
- vgatext_putchar_at(' ', term_col, term_x, term_y);
- }
-
- update_cursor();
-}
-
-void vgatext_puts(const char *str)
-{
- while(*str)
- {
- vgatext_putchar(*str++);
- }
-}