summaryrefslogtreecommitdiff
path: root/firmware/drivers/lcd-2bit-vert.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers/lcd-2bit-vert.c')
-rw-r--r--firmware/drivers/lcd-2bit-vert.c27
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
39fb_data lcd_framebuffer[LCD_FBHEIGHT][LCD_FBWIDTH] IRAM_LCDFRAMEBUFFER; 39fb_data lcd_static_framebuffer[LCD_FBHEIGHT][LCD_FBWIDTH] IRAM_LCDFRAMEBUFFER;
40fb_data *lcd_framebuffer = &lcd_static_framebuffer[0][0];
40 41
41const unsigned char lcd_dibits[16] ICONST_ATTR = { 42const 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)
196static void setpixel(int x, int y) 197static 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)
205static void clearpixel(int x, int y) 206static 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)
214static void clearimgpixel(int x, int y) 215static 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)
223static void flippixel(int x, int y) 224static 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