diff options
Diffstat (limited to 'firmware/drivers/lcd-2bit-horz.c')
-rw-r--r-- | firmware/drivers/lcd-2bit-horz.c | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/firmware/drivers/lcd-2bit-horz.c b/firmware/drivers/lcd-2bit-horz.c index b4805094ff..3870bac644 100644 --- a/firmware/drivers/lcd-2bit-horz.c +++ b/firmware/drivers/lcd-2bit-horz.c | |||
@@ -39,7 +39,8 @@ | |||
39 | 39 | ||
40 | /*** globals ***/ | 40 | /*** globals ***/ |
41 | 41 | ||
42 | unsigned char lcd_framebuffer[LCD_FBHEIGHT][LCD_FBWIDTH] IRAM_LCDFRAMEBUFFER; | 42 | unsigned char lcd_static_framebuffer[LCD_FBHEIGHT][LCD_FBWIDTH] IRAM_LCDFRAMEBUFFER; |
43 | unsigned char *lcd_framebuffer = &lcd_static_framebuffer[0][0]; | ||
43 | 44 | ||
44 | static const unsigned char pixmask[4] ICONST_ATTR = { | 45 | static const unsigned char pixmask[4] ICONST_ATTR = { |
45 | 0xC0, 0x30, 0x0C, 0x03 | 46 | 0xC0, 0x30, 0x0C, 0x03 |
@@ -193,7 +194,7 @@ int lcd_getstringsize(const unsigned char *str, int *w, int *h) | |||
193 | static void setpixel(int x, int y) | 194 | static void setpixel(int x, int y) |
194 | { | 195 | { |
195 | unsigned mask = pixmask[x & 3]; | 196 | unsigned mask = pixmask[x & 3]; |
196 | fb_data *address = &lcd_framebuffer[y][x>>2]; | 197 | fb_data *address = FBADDR(x>>2,y); |
197 | unsigned data = *address; | 198 | unsigned data = *address; |
198 | 199 | ||
199 | *address = data ^ ((data ^ fg_pattern) & mask); | 200 | *address = data ^ ((data ^ fg_pattern) & mask); |
@@ -202,7 +203,7 @@ static void setpixel(int x, int y) | |||
202 | static void clearpixel(int x, int y) | 203 | static void clearpixel(int x, int y) |
203 | { | 204 | { |
204 | unsigned mask = pixmask[x & 3]; | 205 | unsigned mask = pixmask[x & 3]; |
205 | fb_data *address = &lcd_framebuffer[y][x>>2]; | 206 | fb_data *address = FBADDR(x>>2,y); |
206 | unsigned data = *address; | 207 | unsigned data = *address; |
207 | 208 | ||
208 | *address = data ^ ((data ^ bg_pattern) & mask); | 209 | *address = data ^ ((data ^ bg_pattern) & mask); |
@@ -211,7 +212,7 @@ static void clearpixel(int x, int y) | |||
211 | static void clearimgpixel(int x, int y) | 212 | static void clearimgpixel(int x, int y) |
212 | { | 213 | { |
213 | unsigned mask = pixmask[x & 3]; | 214 | unsigned mask = pixmask[x & 3]; |
214 | fb_data *address = &lcd_framebuffer[y][x>>2]; | 215 | fb_data *address = FBADDR(x>>2,y); |
215 | unsigned data = *address; | 216 | unsigned data = *address; |
216 | 217 | ||
217 | *address = data ^ ((data ^ *(address + lcd_backdrop_offset)) & mask); | 218 | *address = data ^ ((data ^ *(address + lcd_backdrop_offset)) & mask); |
@@ -220,7 +221,7 @@ static void clearimgpixel(int x, int y) | |||
220 | static void flippixel(int x, int y) | 221 | static void flippixel(int x, int y) |
221 | { | 222 | { |
222 | unsigned mask = pixmask[x & 3]; | 223 | unsigned mask = pixmask[x & 3]; |
223 | fb_data *address = &lcd_framebuffer[y][x>>2]; | 224 | fb_data *address = FBADDR(x>>2,y); |
224 | 225 | ||
225 | *address ^= mask; | 226 | *address ^= mask; |
226 | } | 227 | } |
@@ -396,14 +397,14 @@ void lcd_clear_display(void) | |||
396 | { | 397 | { |
397 | if (current_vp->drawmode & DRMODE_INVERSEVID) | 398 | if (current_vp->drawmode & DRMODE_INVERSEVID) |
398 | { | 399 | { |
399 | memset(lcd_framebuffer, fg_pattern, sizeof lcd_framebuffer); | 400 | memset(lcd_framebuffer, fg_pattern, FRAMEBUFFER_SIZE); |
400 | } | 401 | } |
401 | else | 402 | else |
402 | { | 403 | { |
403 | if (lcd_backdrop) | 404 | if (lcd_backdrop) |
404 | memcpy(lcd_framebuffer, lcd_backdrop, sizeof lcd_framebuffer); | 405 | memcpy(lcd_framebuffer, lcd_backdrop, FRAMEBUFFER_SIZE); |
405 | else | 406 | else |
406 | memset(lcd_framebuffer, bg_pattern, sizeof lcd_framebuffer); | 407 | memset(lcd_framebuffer, bg_pattern, FRAMEBUFFER_SIZE); |
407 | } | 408 | } |
408 | 409 | ||
409 | lcd_scroll_info.lines = 0; | 410 | lcd_scroll_info.lines = 0; |
@@ -583,7 +584,7 @@ void lcd_hline(int x1, int x2, int y) | |||
583 | #endif | 584 | #endif |
584 | 585 | ||
585 | bfunc = lcd_blockfuncs[current_vp->drawmode]; | 586 | bfunc = lcd_blockfuncs[current_vp->drawmode]; |
586 | dst = &lcd_framebuffer[y][x1>>2]; | 587 | dst = FBADDR(x1>>2,y); |
587 | nx = x2 - (x1 & ~3); | 588 | nx = x2 - (x1 & ~3); |
588 | mask = 0xFFu >> (2 * (x1 & 3)); | 589 | mask = 0xFFu >> (2 * (x1 & 3)); |
589 | mask_right = 0xFFu << (2 * (~nx & 3)); | 590 | mask_right = 0xFFu << (2 * (~nx & 3)); |
@@ -644,7 +645,7 @@ void lcd_vline(int x, int y1, int y2) | |||
644 | #endif | 645 | #endif |
645 | 646 | ||
646 | bfunc = lcd_blockfuncs[current_vp->drawmode]; | 647 | bfunc = lcd_blockfuncs[current_vp->drawmode]; |
647 | dst = &lcd_framebuffer[y1][x>>2]; | 648 | dst = FBADDR(x>>2,y1); |
648 | mask = pixmask[x & 3]; | 649 | mask = pixmask[x & 3]; |
649 | 650 | ||
650 | dst_end = dst + (y2 - y1) * LCD_FBWIDTH; | 651 | dst_end = dst + (y2 - y1) * LCD_FBWIDTH; |
@@ -729,7 +730,7 @@ void lcd_fillrect(int x, int y, int width, int height) | |||
729 | #endif | 730 | #endif |
730 | 731 | ||
731 | bfunc = lcd_blockfuncs[current_vp->drawmode]; | 732 | bfunc = lcd_blockfuncs[current_vp->drawmode]; |
732 | dst = &lcd_framebuffer[y][x>>2]; | 733 | dst = FBADDR(x>>2,y); |
733 | nx = width - 1 + (x & 3); | 734 | nx = width - 1 + (x & 3); |
734 | mask = 0xFFu >> (2 * (x & 3)); | 735 | mask = 0xFFu >> (2 * (x & 3)); |
735 | mask_right = 0xFFu << (2 * (~nx & 3)); | 736 | mask_right = 0xFFu << (2 * (~nx & 3)); |
@@ -836,7 +837,7 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x, | |||
836 | src_y &= 7; | 837 | src_y &= 7; |
837 | src_end = src + width; | 838 | src_end = src + width; |
838 | 839 | ||
839 | dst = &lcd_framebuffer[y][x >> 2]; | 840 | dst = FBADDR(x >> 2,y); |
840 | dst_end = dst + height * LCD_FBWIDTH; | 841 | dst_end = dst + height * LCD_FBWIDTH; |
841 | dst_mask = pixmask[x & 3]; | 842 | dst_mask = pixmask[x & 3]; |
842 | 843 | ||
@@ -1050,7 +1051,7 @@ void ICODE_ATTR lcd_bitmap_part(const unsigned char *src, int src_x, | |||
1050 | src += stride * src_y + (src_x >> 2); /* move starting point */ | 1051 | src += stride * src_y + (src_x >> 2); /* move starting point */ |
1051 | src_x &= 3; | 1052 | src_x &= 3; |
1052 | x -= src_x; | 1053 | x -= src_x; |
1053 | dst = &lcd_framebuffer[y][x>>2]; | 1054 | dst = FBADDR(x>>2,y); |
1054 | shift = x & 3; | 1055 | shift = x & 3; |
1055 | nx = width - 1 + shift + src_x; | 1056 | nx = width - 1 + shift + src_x; |
1056 | 1057 | ||