diff options
| author | Franklin Wei <frankhwei536@gmail.com> | 2015-02-07 11:03:48 -0500 |
|---|---|---|
| committer | Franklin Wei <frankhwei536@gmail.com> | 2015-02-07 11:03:48 -0500 |
| commit | c0df0ee6437aa2786b1a92bc6af1284958d104c7 (patch) | |
| tree | 5c6392aa761ba5028387bee72cc73149893ea508 /drivers | |
| parent | 873a103fb71d6b7b1993a64535a7fa150317ca3c (diff) | |
| download | kappa-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.h | 10 | ||||
| -rw-r--r-- | drivers/vga.c | 28 |
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)); } |