diff options
Diffstat (limited to 'firmware/drivers/lcd-2bit-vert.c')
-rw-r--r-- | firmware/drivers/lcd-2bit-vert.c | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/firmware/drivers/lcd-2bit-vert.c b/firmware/drivers/lcd-2bit-vert.c index 02699099d7..89c2dc365b 100644 --- a/firmware/drivers/lcd-2bit-vert.c +++ b/firmware/drivers/lcd-2bit-vert.c | |||
@@ -36,7 +36,8 @@ | |||
36 | 36 | ||
37 | /*** globals ***/ | 37 | /*** globals ***/ |
38 | 38 | ||
39 | fb_data lcd_framebuffer[LCD_FBHEIGHT][LCD_FBWIDTH] IRAM_LCDFRAMEBUFFER; | 39 | fb_data lcd_static_framebuffer[LCD_FBHEIGHT][LCD_FBWIDTH] IRAM_LCDFRAMEBUFFER; |
40 | fb_data *lcd_framebuffer = &lcd_static_framebuffer[0][0]; | ||
40 | 41 | ||
41 | const unsigned char lcd_dibits[16] ICONST_ATTR = { | 42 | const unsigned char lcd_dibits[16] ICONST_ATTR = { |
42 | 0x00, 0x03, 0x0C, 0x0F, 0x30, 0x33, 0x3C, 0x3F, | 43 | 0x00, 0x03, 0x0C, 0x0F, 0x30, 0x33, 0x3C, 0x3F, |
@@ -196,7 +197,7 @@ int lcd_getstringsize(const unsigned char *str, int *w, int *h) | |||
196 | static void setpixel(int x, int y) | 197 | static void setpixel(int x, int y) |
197 | { | 198 | { |
198 | unsigned mask = pixmask[y & 3]; | 199 | unsigned mask = pixmask[y & 3]; |
199 | fb_data *address = &lcd_framebuffer[y>>2][x]; | 200 | fb_data *address = FBADDR(x,y>>2); |
200 | unsigned data = *address; | 201 | unsigned data = *address; |
201 | 202 | ||
202 | *address = data ^ ((data ^ fg_pattern) & mask); | 203 | *address = data ^ ((data ^ fg_pattern) & mask); |
@@ -205,7 +206,7 @@ static void setpixel(int x, int y) | |||
205 | static void clearpixel(int x, int y) | 206 | static void clearpixel(int x, int y) |
206 | { | 207 | { |
207 | unsigned mask = pixmask[y & 3]; | 208 | unsigned mask = pixmask[y & 3]; |
208 | fb_data *address = &lcd_framebuffer[y>>2][x]; | 209 | fb_data *address = FBADDR(x,y>>2); |
209 | unsigned data = *address; | 210 | unsigned data = *address; |
210 | 211 | ||
211 | *address = data ^ ((data ^ bg_pattern) & mask); | 212 | *address = data ^ ((data ^ bg_pattern) & mask); |
@@ -214,7 +215,7 @@ static void clearpixel(int x, int y) | |||
214 | static void clearimgpixel(int x, int y) | 215 | static void clearimgpixel(int x, int y) |
215 | { | 216 | { |
216 | unsigned mask = pixmask[y & 3]; | 217 | unsigned mask = pixmask[y & 3]; |
217 | fb_data *address = &lcd_framebuffer[y>>2][x]; | 218 | fb_data *address = FBADDR(x,y>>2); |
218 | unsigned data = *address; | 219 | unsigned data = *address; |
219 | 220 | ||
220 | *address = data ^ ((data ^ *(address + lcd_backdrop_offset)) & mask); | 221 | *address = data ^ ((data ^ *(address + lcd_backdrop_offset)) & mask); |
@@ -223,7 +224,7 @@ static void clearimgpixel(int x, int y) | |||
223 | static void flippixel(int x, int y) | 224 | static void flippixel(int x, int y) |
224 | { | 225 | { |
225 | unsigned mask = pixmask[y & 3]; | 226 | unsigned mask = pixmask[y & 3]; |
226 | fb_data *address = &lcd_framebuffer[y>>2][x]; | 227 | fb_data *address = FBADDR(x,y>>2); |
227 | 228 | ||
228 | *address ^= mask; | 229 | *address ^= mask; |
229 | } | 230 | } |
@@ -399,14 +400,14 @@ void lcd_clear_display(void) | |||
399 | { | 400 | { |
400 | if (current_vp->drawmode & DRMODE_INVERSEVID) | 401 | if (current_vp->drawmode & DRMODE_INVERSEVID) |
401 | { | 402 | { |
402 | memset(lcd_framebuffer, fg_pattern, sizeof lcd_framebuffer); | 403 | memset(lcd_framebuffer, fg_pattern, FRAMEBUFFER_SIZE); |
403 | } | 404 | } |
404 | else | 405 | else |
405 | { | 406 | { |
406 | if (lcd_backdrop) | 407 | if (lcd_backdrop) |
407 | memcpy(lcd_framebuffer, lcd_backdrop, sizeof lcd_framebuffer); | 408 | memcpy(lcd_framebuffer, lcd_backdrop, FRAMEBUFFER_SIZE); |
408 | else | 409 | else |
409 | memset(lcd_framebuffer, bg_pattern, sizeof lcd_framebuffer); | 410 | memset(lcd_framebuffer, bg_pattern, FRAMEBUFFER_SIZE); |
410 | } | 411 | } |
411 | 412 | ||
412 | lcd_scroll_info.lines = 0; | 413 | lcd_scroll_info.lines = 0; |
@@ -589,7 +590,7 @@ void lcd_hline(int x1, int x2, int y) | |||
589 | width = x2 - x1 + 1; | 590 | width = x2 - x1 + 1; |
590 | 591 | ||
591 | bfunc = lcd_blockfuncs[current_vp->drawmode]; | 592 | bfunc = lcd_blockfuncs[current_vp->drawmode]; |
592 | dst = &lcd_framebuffer[y>>2][x1]; | 593 | dst = FBADDR(x1,y>>2); |
593 | mask = pixmask[y & 3]; | 594 | mask = pixmask[y & 3]; |
594 | 595 | ||
595 | dst_end = dst + width; | 596 | dst_end = dst + width; |
@@ -645,7 +646,7 @@ void lcd_vline(int x, int y1, int y2) | |||
645 | #endif | 646 | #endif |
646 | 647 | ||
647 | bfunc = lcd_blockfuncs[current_vp->drawmode]; | 648 | bfunc = lcd_blockfuncs[current_vp->drawmode]; |
648 | dst = &lcd_framebuffer[y1>>2][x]; | 649 | dst = FBADDR(x,y1>>2); |
649 | ny = y2 - (y1 & ~3); | 650 | ny = y2 - (y1 & ~3); |
650 | mask = 0xFFu << (2 * (y1 & 3)); | 651 | mask = 0xFFu << (2 * (y1 & 3)); |
651 | mask_bottom = 0xFFu >> (2 * (~ny & 3)); | 652 | mask_bottom = 0xFFu >> (2 * (~ny & 3)); |
@@ -751,7 +752,7 @@ void lcd_fillrect(int x, int y, int width, int height) | |||
751 | } | 752 | } |
752 | } | 753 | } |
753 | bfunc = lcd_blockfuncs[current_vp->drawmode]; | 754 | bfunc = lcd_blockfuncs[current_vp->drawmode]; |
754 | dst = &lcd_framebuffer[y>>2][x]; | 755 | dst = FBADDR(x,y>>2); |
755 | ny = height - 1 + (y & 3); | 756 | ny = height - 1 + (y & 3); |
756 | mask = 0xFFu << (2 * (y & 3)); | 757 | mask = 0xFFu << (2 * (y & 3)); |
757 | mask_bottom = 0xFFu >> (2 * (~ny & 3)); | 758 | mask_bottom = 0xFFu >> (2 * (~ny & 3)); |
@@ -863,7 +864,7 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x, | |||
863 | src += stride * (src_y >> 3) + src_x; /* move starting point */ | 864 | src += stride * (src_y >> 3) + src_x; /* move starting point */ |
864 | src_y &= 7; | 865 | src_y &= 7; |
865 | y -= src_y; | 866 | y -= src_y; |
866 | dst = &lcd_framebuffer[y>>2][x]; | 867 | dst = FBADDR(x,y>>2); |
867 | shift = y & 3; | 868 | shift = y & 3; |
868 | ny = height - 1 + shift + src_y; | 869 | ny = height - 1 + shift + src_y; |
869 | mask = 0xFFFFu << (2 * (shift + src_y)); | 870 | mask = 0xFFFFu << (2 * (shift + src_y)); |
@@ -1060,7 +1061,7 @@ void ICODE_ATTR lcd_bitmap_part(const fb_data *src, int src_x, int src_y, | |||
1060 | src += stride * (src_y >> 2) + src_x; /* move starting point */ | 1061 | src += stride * (src_y >> 2) + src_x; /* move starting point */ |
1061 | src_y &= 3; | 1062 | src_y &= 3; |
1062 | y -= src_y; | 1063 | y -= src_y; |
1063 | dst = &lcd_framebuffer[y>>2][x]; | 1064 | dst = FBADDR(x,y>>2); |
1064 | shift = y & 3; | 1065 | shift = y & 3; |
1065 | ny = height - 1 + shift + src_y; | 1066 | ny = height - 1 + shift + src_y; |
1066 | 1067 | ||