diff options
| author | Franklin Wei <frankhwei536@gmail.com> | 2015-02-10 17:07:11 -0500 |
|---|---|---|
| committer | Franklin Wei <frankhwei536@gmail.com> | 2015-02-10 17:07:11 -0500 |
| commit | ac2cc17431c7481063557dc30fa70b807a93fb51 (patch) | |
| tree | 2dfd401f4272b954f192126bd4105010c7303d5e /drivers | |
| parent | ebd61461fc3f94785b6d7555c4f118b0f1e1cc99 (diff) | |
| download | kappa-ac2cc17431c7481063557dc30fa70b807a93fb51.zip kappa-ac2cc17431c7481063557dc30fa70b807a93fb51.tar.gz kappa-ac2cc17431c7481063557dc30fa70b807a93fb51.tar.bz2 kappa-ac2cc17431c7481063557dc30fa70b807a93fb51.tar.xz | |
optimize
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/gfx-as.S | 18 | ||||
| -rw-r--r-- | drivers/gfx.c | 14 | ||||
| -rw-r--r-- | drivers/ps2.c | 2 |
3 files changed, 19 insertions, 15 deletions
diff --git a/drivers/gfx-as.S b/drivers/gfx-as.S index 51c1db8..ed1c91b 100644 --- a/drivers/gfx-as.S +++ b/drivers/gfx-as.S @@ -1,25 +1,23 @@ .global gfx_clear .extern fb_width .extern fb_height + .extern fb_stride .extern fb_bpp .extern _gfx_bgcol .extern framebuffer # void gfx_clear(uint32_t color) gfx_clear: - movzwl fb_width, %ecx - movzwl fb_height, %edx movl framebuffer, %eax - pushl %ebx - movl _gfx_bgcol, %ebx - imull %ecx, %edx - movzbl fb_bpp, %ecx + movzwl fb_stride, %ecx + movzwl fb_height, %edx imull %ecx, %edx addl %eax, %edx - cmpl %edx, %eax - jnb .L2 + pushl %ebx + movzwl fb_bpp, %ebx + movl _gfx_bgcol, %ecx .L1: - movl %ebx, (%eax) - addl %ecx, %eax + movl %ecx, (%eax) + addl %ebx, %eax cmpl %eax, %edx ja .L1 .L2: diff --git a/drivers/gfx.c b/drivers/gfx.c index f2b2cac..435c2e0 100644 --- a/drivers/gfx.c +++ b/drivers/gfx.c @@ -77,12 +77,14 @@ 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 < FONT_HEIGHT; ++i) + 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 < 8; ++j) + for(int j = 0; j < stop_x; ++j) { if(gfx_font[c][i] & mask_table[j]) ((uint32_t*)line_addr)[j] = fg; @@ -96,12 +98,14 @@ 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 < FONT_HEIGHT; ++i) + 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 < 8; ++j) + for(int j = 0; j < stop_x; ++j) { if(gfx_font[c][i] & mask_table[j]) ((uint32_t*)line_addr)[j] = fg; @@ -235,7 +239,7 @@ bool gfx_init(struct vbe_info_t *vbe_mode_info) { framebuffer = (uint8_t*)vbe_mode_info->physbase; fb_width = vbe_mode_info->Xres; - fb_height = vbe_mode_info->Yres; + fb_height = vbe_mode_info->Yres - 100; fb_bpp = vbe_mode_info->bpp / 8; fb_stride = fb_bpp * fb_width; if(fb_bpp != 4) diff --git a/drivers/ps2.c b/drivers/ps2.c index 742b7ad..f9a48a4 100644 --- a/drivers/ps2.c +++ b/drivers/ps2.c @@ -23,6 +23,7 @@ static void key_handler(struct regs_t regs) { (void) regs; uint8_t scancode = inb(0x60); + (void) scancode; /* TODO: handle scancode */ /*printf("key %x\n", scancode);*/ } @@ -42,6 +43,7 @@ static void keyboard_init(void) static void mouse_handler(struct regs_t regs) { + (void) regs; printf("mouse action!\n"); } |