diff options
Diffstat (limited to 'firmware/drivers/lcd-2bit-vi.c')
-rw-r--r-- | firmware/drivers/lcd-2bit-vi.c | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/firmware/drivers/lcd-2bit-vi.c b/firmware/drivers/lcd-2bit-vi.c index 697d1a7783..8dc746f521 100644 --- a/firmware/drivers/lcd-2bit-vi.c +++ b/firmware/drivers/lcd-2bit-vi.c | |||
@@ -40,13 +40,17 @@ | |||
40 | #define LCDFN(fn) lcd_ ## fn | 40 | #define LCDFN(fn) lcd_ ## fn |
41 | #define FBFN(fn) fb_ ## fn | 41 | #define FBFN(fn) fb_ ## fn |
42 | #define LCDM(ma) LCD_ ## ma | 42 | #define LCDM(ma) LCD_ ## ma |
43 | #define FBSIZE FRAMEBUFFER_SIZE | ||
43 | #define LCDNAME "lcd_" | 44 | #define LCDNAME "lcd_" |
45 | #define LCDFB(x,y) FBADDR(x, y) | ||
44 | #define MAIN_LCD | 46 | #define MAIN_LCD |
45 | #endif | 47 | #endif |
46 | 48 | ||
47 | /*** globals ***/ | 49 | /*** globals ***/ |
48 | 50 | ||
49 | FBFN(data) LCDFN(framebuffer)[LCDM(FBHEIGHT)][LCDM(FBWIDTH)] IRAM_LCDFRAMEBUFFER; | 51 | FBFN(data) LCDFN(static_framebuffer)[LCDM(FBHEIGHT)][LCDM(FBWIDTH)] IRAM_LCDFRAMEBUFFER; |
52 | FBFN(data) *LCDFN(framebuffer) = &LCDFN(static_framebuffer)[0][0]; | ||
53 | |||
50 | 54 | ||
51 | static const FBFN(data) patterns[4] = {0xFFFF, 0xFF00, 0x00FF, 0x0000}; | 55 | static const FBFN(data) patterns[4] = {0xFFFF, 0xFF00, 0x00FF, 0x0000}; |
52 | 56 | ||
@@ -214,7 +218,7 @@ int LCDFN(getstringsize)(const unsigned char *str, int *w, int *h) | |||
214 | static void setpixel(int x, int y) | 218 | static void setpixel(int x, int y) |
215 | { | 219 | { |
216 | unsigned mask = 0x0101 << (y & 7); | 220 | unsigned mask = 0x0101 << (y & 7); |
217 | FBFN(data) *address = &LCDFN(framebuffer)[y>>3][x]; | 221 | FBFN(data) *address = LCDFB(x,y>>3); |
218 | unsigned data = *address; | 222 | unsigned data = *address; |
219 | 223 | ||
220 | *address = data ^ ((data ^ fg_pattern) & mask); | 224 | *address = data ^ ((data ^ fg_pattern) & mask); |
@@ -223,7 +227,7 @@ static void setpixel(int x, int y) | |||
223 | static void clearpixel(int x, int y) | 227 | static void clearpixel(int x, int y) |
224 | { | 228 | { |
225 | unsigned mask = 0x0101 << (y & 7); | 229 | unsigned mask = 0x0101 << (y & 7); |
226 | FBFN(data) *address = &LCDFN(framebuffer)[y>>3][x]; | 230 | FBFN(data) *address = LCDFB(x,y>>3); |
227 | unsigned data = *address; | 231 | unsigned data = *address; |
228 | 232 | ||
229 | *address = data ^ ((data ^ bg_pattern) & mask); | 233 | *address = data ^ ((data ^ bg_pattern) & mask); |
@@ -232,7 +236,7 @@ static void clearpixel(int x, int y) | |||
232 | static void clearimgpixel(int x, int y) | 236 | static void clearimgpixel(int x, int y) |
233 | { | 237 | { |
234 | unsigned mask = 0x0101 << (y & 7); | 238 | unsigned mask = 0x0101 << (y & 7); |
235 | FBFN(data) *address = &LCDFN(framebuffer)[y>>3][x]; | 239 | FBFN(data) *address = LCDFB(x,y>>3); |
236 | unsigned data = *address; | 240 | unsigned data = *address; |
237 | 241 | ||
238 | *address = data ^ ((data ^ *(FBFN(data) *)((long)address | 242 | *address = data ^ ((data ^ *(FBFN(data) *)((long)address |
@@ -242,7 +246,7 @@ static void clearimgpixel(int x, int y) | |||
242 | static void flippixel(int x, int y) | 246 | static void flippixel(int x, int y) |
243 | { | 247 | { |
244 | unsigned mask = 0x0101 << (y & 7); | 248 | unsigned mask = 0x0101 << (y & 7); |
245 | FBFN(data) *address = &LCDFN(framebuffer)[y>>3][x]; | 249 | FBFN(data) *address = LCDFB(x,y>>3); |
246 | 250 | ||
247 | *address ^= mask; | 251 | *address ^= mask; |
248 | } | 252 | } |
@@ -420,15 +424,15 @@ void LCDFN(clear_display)(void) | |||
420 | if (default_vp.drawmode & DRMODE_INVERSEVID) | 424 | if (default_vp.drawmode & DRMODE_INVERSEVID) |
421 | { | 425 | { |
422 | memset(LCDFN(framebuffer), patterns[default_vp.fg_pattern & 3], | 426 | memset(LCDFN(framebuffer), patterns[default_vp.fg_pattern & 3], |
423 | sizeof LCDFN(framebuffer)); | 427 | FBSIZE); |
424 | } | 428 | } |
425 | else | 429 | else |
426 | { | 430 | { |
427 | if (backdrop) | 431 | if (backdrop) |
428 | memcpy(LCDFN(framebuffer), backdrop, sizeof LCDFN(framebuffer)); | 432 | memcpy(LCDFN(framebuffer), backdrop, FBSIZE); |
429 | else | 433 | else |
430 | memset(LCDFN(framebuffer), patterns[default_vp.bg_pattern & 3], | 434 | memset(LCDFN(framebuffer), patterns[default_vp.bg_pattern & 3], |
431 | sizeof LCDFN(framebuffer)); | 435 | FBSIZE); |
432 | } | 436 | } |
433 | 437 | ||
434 | LCDFN(scroll_info).lines = 0; | 438 | LCDFN(scroll_info).lines = 0; |
@@ -611,7 +615,7 @@ void LCDFN(hline)(int x1, int x2, int y) | |||
611 | width = x2 - x1 + 1; | 615 | width = x2 - x1 + 1; |
612 | 616 | ||
613 | bfunc = LCDFN(blockfuncs)[current_vp->drawmode]; | 617 | bfunc = LCDFN(blockfuncs)[current_vp->drawmode]; |
614 | dst = &LCDFN(framebuffer)[y>>3][x1]; | 618 | dst = LCDFB(x1,y>>3); |
615 | mask = 0x0101 << (y & 7); | 619 | mask = 0x0101 << (y & 7); |
616 | 620 | ||
617 | dst_end = dst + width; | 621 | dst_end = dst + width; |
@@ -667,7 +671,7 @@ void LCDFN(vline)(int x, int y1, int y2) | |||
667 | #endif | 671 | #endif |
668 | 672 | ||
669 | bfunc = LCDFN(blockfuncs)[current_vp->drawmode]; | 673 | bfunc = LCDFN(blockfuncs)[current_vp->drawmode]; |
670 | dst = &LCDFN(framebuffer)[y1>>3][x]; | 674 | dst = LCDFB(x,y1>>3); |
671 | ny = y2 - (y1 & ~7); | 675 | ny = y2 - (y1 & ~7); |
672 | mask = (0xFFu << (y1 & 7)) & 0xFFu; | 676 | mask = (0xFFu << (y1 & 7)) & 0xFFu; |
673 | mask |= mask << 8; | 677 | mask |= mask << 8; |
@@ -776,7 +780,7 @@ void LCDFN(fillrect)(int x, int y, int width, int height) | |||
776 | } | 780 | } |
777 | } | 781 | } |
778 | bfunc = LCDFN(blockfuncs)[current_vp->drawmode]; | 782 | bfunc = LCDFN(blockfuncs)[current_vp->drawmode]; |
779 | dst = &LCDFN(framebuffer)[y>>3][x]; | 783 | dst = LCDFB(x,y>>3); |
780 | ny = height - 1 + (y & 7); | 784 | ny = height - 1 + (y & 7); |
781 | mask = (0xFFu << (y & 7)) & 0xFFu; | 785 | mask = (0xFFu << (y & 7)) & 0xFFu; |
782 | mask |= mask << 8; | 786 | mask |= mask << 8; |
@@ -890,7 +894,7 @@ void ICODE_ATTR LCDFN(mono_bitmap_part)(const unsigned char *src, int src_x, | |||
890 | src += stride * (src_y >> 3) + src_x; /* move starting point */ | 894 | src += stride * (src_y >> 3) + src_x; /* move starting point */ |
891 | src_y &= 7; | 895 | src_y &= 7; |
892 | y -= src_y; | 896 | y -= src_y; |
893 | dst = &LCDFN(framebuffer)[y>>3][x]; | 897 | dst = LCDFB(x,y>>3); |
894 | shift = y & 7; | 898 | shift = y & 7; |
895 | ny = height - 1 + shift + src_y; | 899 | ny = height - 1 + shift + src_y; |
896 | 900 | ||
@@ -1058,7 +1062,7 @@ void ICODE_ATTR LCDFN(bitmap_part)(const FBFN(data) *src, int src_x, | |||
1058 | src += stride * (src_y >> 3) + src_x; /* move starting point */ | 1062 | src += stride * (src_y >> 3) + src_x; /* move starting point */ |
1059 | src_y &= 7; | 1063 | src_y &= 7; |
1060 | y -= src_y; | 1064 | y -= src_y; |
1061 | dst = &LCDFN(framebuffer)[y>>3][x]; | 1065 | dst = LCDFB(x,y>>3); |
1062 | shift = y & 7; | 1066 | shift = y & 7; |
1063 | ny = height - 1 + shift + src_y; | 1067 | ny = height - 1 + shift + src_y; |
1064 | 1068 | ||