aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorFranklin Wei <frankhwei536@gmail.com>2015-02-07 11:03:48 -0500
committerFranklin Wei <frankhwei536@gmail.com>2015-02-07 11:03:48 -0500
commitc0df0ee6437aa2786b1a92bc6af1284958d104c7 (patch)
tree5c6392aa761ba5028387bee72cc73149893ea508 /drivers
parent873a103fb71d6b7b1993a64535a7fa150317ca3c (diff)
downloadkappa-c0df0ee6437aa2786b1a92bc6af1284958d104c7.zip
kappa-c0df0ee6437aa2786b1a92bc6af1284958d104c7.tar.gz
kappa-c0df0ee6437aa2786b1a92bc6af1284958d104c7.tar.bz2
kappa-c0df0ee6437aa2786b1a92bc6af1284958d104c7.tar.xz
new rng, some rework of I/O
Diffstat (limited to 'drivers')
-rw-r--r--drivers/include/vga.h10
-rw-r--r--drivers/vga.c28
2 files changed, 33 insertions, 5 deletions
diff --git a/drivers/include/vga.h b/drivers/include/vga.h
index b83ec95..8ea478b 100644
--- a/drivers/include/vga.h
+++ b/drivers/include/vga.h
@@ -33,6 +33,12 @@ enum vga_color_t {
#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))
-void vga_init();
+struct vbe_info_t;
-void vga_drawpixel(int x, int y, uint32_t pix);
+void vga_init(struct vbe_info_t *vbe_mode_info);
+
+void vga_drawpixel(int x, int y, uint32_t color);
+
+void vga_clear(uint32_t color);
+
+extern const uint16_t *vga_width, *vga_height;
diff --git a/drivers/vga.c b/drivers/vga.c
index cfcd287..ccf0949 100644
--- a/drivers/vga.c
+++ b/drivers/vga.c
@@ -1,20 +1,42 @@
#include <stddef.h>
#include <stdlib.h>
+#include "log.h"
#include "multiboot.h"
+#include "panic.h"
#include "vga.h"
static uint8_t *framebuffer = NULL;
static uint16_t fb_width;
static uint16_t fb_height;
+/* this is BYTES per pixel */
+static uint8_t fb_bpp;
-void vga_drawpixel(int x, int y, uint32_t pixel)
+const uint16_t *vga_width = &fb_width;
+const uint16_t *vga_height = &fb_height;
+
+void vga_drawpixel(int x, int y, uint32_t col)
+{
+ ((uint32_t*)framebuffer)[y * fb_width + x] = col;
+}
+
+void vga_clear(uint32_t col)
{
- ((uint32_t*)framebuffer)[y * fb_width + x] = pixel;
+ 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 vga_init(struct vbe_info_t *vbe_mode_info)
{
- framebuffer = vbe_mode_info->physbase;
+ framebuffer = (uint8_t*)vbe_mode_info->physbase;
fb_width = vbe_mode_info->Xres;
fb_height = vbe_mode_info->Yres;
+ fb_bpp = vbe_mode_info->bpp / 8;
+ if(fb_bpp != 4)
+ panic("BPP *MUST* be 32!!!\n");
+ vga_clear(VGA_RGBPACK(0, 0, 0));
}