aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorFranklin Wei <frankhwei536@gmail.com>2015-02-12 17:42:55 -0500
committerFranklin Wei <frankhwei536@gmail.com>2015-02-12 17:42:55 -0500
commitca1c4f58224404d4361e8ca16837e48c88c0ee38 (patch)
tree6f1a213c00636ed0ec8cf747de9794f88f38735c /drivers
parent0beb5e7de27d13950b024620cdf5efe9c5155f3d (diff)
downloadkappa-ca1c4f58224404d4361e8ca16837e48c88c0ee38.zip
kappa-ca1c4f58224404d4361e8ca16837e48c88c0ee38.tar.gz
kappa-ca1c4f58224404d4361e8ca16837e48c88c0ee38.tar.bz2
kappa-ca1c4f58224404d4361e8ca16837e48c88c0ee38.tar.xz
make less 32bpp dependent
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gfx-as.S11
-rw-r--r--drivers/gfx.c12
-rw-r--r--drivers/include/gfx.h2
3 files changed, 21 insertions, 4 deletions
diff --git a/drivers/gfx-as.S b/drivers/gfx-as.S
index 81744d5..9daf53a 100644
--- a/drivers/gfx-as.S
+++ b/drivers/gfx-as.S
@@ -2,6 +2,7 @@
.extern fb_height
.extern fb_stride
.extern fb_bpp
+ .extern _gfx_fgcol
.extern _gfx_bgcol
.extern framebuffer
@@ -85,3 +86,13 @@ gfx_vline:
popl %ebx
popl %esi
ret
+
+ .global gfx_drawpixel_32bpp
+gfx_drawpixel_32bpp:
+ movzwl fb_stride, %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
index c27d61a..b781adc 100644
--- a/drivers/gfx.c
+++ b/drivers/gfx.c
@@ -25,6 +25,7 @@ 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_set_background(uint32_t col)
{
@@ -46,11 +47,11 @@ uint32_t gfx_get_foreground(void)
return _gfx_fgcol;
}
-void gfx_drawpixel(int x, int y)
+/* assembly */
+void gfx_drawpixel_test(int x, int y)
{
- ((uint32_t*)framebuffer)[y * fb_width + x] = _gfx_fgcol;
+ ((uint32_t*)framebuffer)[y * fb_stride + x] = _gfx_fgcol;
}
-
/* implemented in assembly now */
/*
void gfx_clear(uint32_t col)
@@ -281,6 +282,11 @@ bool gfx_init(struct vbe_info_t *vbe_mode_info)
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);
diff --git a/drivers/include/gfx.h b/drivers/include/gfx.h
index 81be70d..6f0f171 100644
--- a/drivers/include/gfx.h
+++ b/drivers/include/gfx.h
@@ -34,7 +34,7 @@ struct vbe_info_t;
bool gfx_init(struct vbe_info_t *vbe_mode_info);
-void gfx_drawpixel(int x, int y);
+extern void (*gfx_drawpixel)(int x, int y);
/* transparent background */
void gfx_drawchar(int x, int y, int ch);