diff options
Diffstat (limited to 'firmware/drivers')
-rw-r--r-- | firmware/drivers/lcd-16bit-common.c | 18 | ||||
-rw-r--r-- | firmware/drivers/lcd-16bit-vert.c | 15 | ||||
-rw-r--r-- | firmware/drivers/lcd-16bit.c | 15 | ||||
-rw-r--r-- | firmware/drivers/lcd-1bit-vert.c | 22 | ||||
-rw-r--r-- | firmware/drivers/lcd-2bit-horz.c | 27 | ||||
-rw-r--r-- | firmware/drivers/lcd-2bit-vert.c | 27 | ||||
-rw-r--r-- | firmware/drivers/lcd-2bit-vi.c | 30 | ||||
-rw-r--r-- | firmware/drivers/lcd-memframe.c | 4 | ||||
-rw-r--r-- | firmware/drivers/lcd-remote-1bit-v.c | 2 | ||||
-rw-r--r-- | firmware/drivers/lcd-remote-2bit-vi.c | 2 |
10 files changed, 84 insertions, 78 deletions
diff --git a/firmware/drivers/lcd-16bit-common.c b/firmware/drivers/lcd-16bit-common.c index 1a845675ad..c9e88b2137 100644 --- a/firmware/drivers/lcd-16bit-common.c +++ b/firmware/drivers/lcd-16bit-common.c | |||
@@ -35,9 +35,9 @@ enum fill_opt { | |||
35 | }; | 35 | }; |
36 | 36 | ||
37 | /*** globals ***/ | 37 | /*** globals ***/ |
38 | fb_data lcd_framebuffer[LCD_FBHEIGHT][LCD_FBWIDTH] | 38 | fb_data lcd_static_framebuffer[LCD_FBHEIGHT][LCD_FBWIDTH] |
39 | IRAM_LCDFRAMEBUFFER CACHEALIGN_AT_LEAST_ATTR(16); | 39 | IRAM_LCDFRAMEBUFFER CACHEALIGN_AT_LEAST_ATTR(16); |
40 | 40 | fb_data *lcd_framebuffer = &lcd_static_framebuffer[0][0]; | |
41 | 41 | ||
42 | static fb_data* lcd_backdrop = NULL; | 42 | static fb_data* lcd_backdrop = NULL; |
43 | static long lcd_backdrop_offset IDATA_ATTR = 0; | 43 | static long lcd_backdrop_offset IDATA_ATTR = 0; |
@@ -234,7 +234,7 @@ void lcd_set_backdrop(fb_data* backdrop) | |||
234 | lcd_backdrop = backdrop; | 234 | lcd_backdrop = backdrop; |
235 | if (backdrop) | 235 | if (backdrop) |
236 | { | 236 | { |
237 | lcd_backdrop_offset = (long)backdrop - (long)&lcd_framebuffer[0][0]; | 237 | lcd_backdrop_offset = (long)backdrop - (long)lcd_framebuffer; |
238 | lcd_fastpixelfuncs = lcd_fastpixelfuncs_backdrop; | 238 | lcd_fastpixelfuncs = lcd_fastpixelfuncs_backdrop; |
239 | } | 239 | } |
240 | else | 240 | else |
@@ -271,7 +271,7 @@ void lcd_drawpixel(int x, int y) | |||
271 | && ((unsigned)y < (unsigned)LCD_HEIGHT) | 271 | && ((unsigned)y < (unsigned)LCD_HEIGHT) |
272 | #endif | 272 | #endif |
273 | ) | 273 | ) |
274 | lcd_fastpixelfuncs[current_vp->drawmode](LCDADDR(current_vp->x+x, current_vp->y+y)); | 274 | lcd_fastpixelfuncs[current_vp->drawmode](FBADDR(current_vp->x+x, current_vp->y+y)); |
275 | } | 275 | } |
276 | 276 | ||
277 | /* Draw a line */ | 277 | /* Draw a line */ |
@@ -346,7 +346,7 @@ void lcd_drawline(int x1, int y1, int x2, int y2) | |||
346 | && ((unsigned)y < (unsigned)LCD_HEIGHT) | 346 | && ((unsigned)y < (unsigned)LCD_HEIGHT) |
347 | #endif | 347 | #endif |
348 | ) | 348 | ) |
349 | pfunc(LCDADDR(x + current_vp->x, y + current_vp->y)); | 349 | pfunc(FBADDR(x + current_vp->x, y + current_vp->y)); |
350 | 350 | ||
351 | if (d < 0) | 351 | if (d < 0) |
352 | { | 352 | { |
@@ -459,7 +459,7 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x, | |||
459 | src += stride * (src_y >> 3) + src_x; /* move starting point */ | 459 | src += stride * (src_y >> 3) + src_x; /* move starting point */ |
460 | src_y &= 7; | 460 | src_y &= 7; |
461 | src_end = src + width; | 461 | src_end = src + width; |
462 | dst_col = LCDADDR(x, y); | 462 | dst_col = FBADDR(x, y); |
463 | 463 | ||
464 | 464 | ||
465 | if (drmode & DRMODE_INVERSEVID) | 465 | if (drmode & DRMODE_INVERSEVID) |
@@ -747,7 +747,7 @@ static void ICODE_ATTR lcd_alpha_bitmap_part_mix(const fb_data* image, | |||
747 | dmask = ~dmask; | 747 | dmask = ~dmask; |
748 | } | 748 | } |
749 | 749 | ||
750 | dst_row = LCDADDR(x, y); | 750 | dst_row = FBADDR(x, y); |
751 | 751 | ||
752 | int col, row = height; | 752 | int col, row = height; |
753 | unsigned data, pixels; | 753 | unsigned data, pixels; |
@@ -1020,10 +1020,10 @@ void lcd_blit_yuv(unsigned char * const src[3], | |||
1020 | linecounter = height >> 1; | 1020 | linecounter = height >> 1; |
1021 | 1021 | ||
1022 | #if LCD_WIDTH >= LCD_HEIGHT | 1022 | #if LCD_WIDTH >= LCD_HEIGHT |
1023 | dst = &lcd_framebuffer[y][x]; | 1023 | dst = FBADDR(x, y); |
1024 | row_end = dst + width; | 1024 | row_end = dst + width; |
1025 | #else | 1025 | #else |
1026 | dst = &lcd_framebuffer[x][LCD_WIDTH - y - 1]; | 1026 | dst = FBADDR(LCD_WIDTH - y - 1, x); |
1027 | row_end = dst + LCD_WIDTH * width; | 1027 | row_end = dst + LCD_WIDTH * width; |
1028 | #endif | 1028 | #endif |
1029 | 1029 | ||
diff --git a/firmware/drivers/lcd-16bit-vert.c b/firmware/drivers/lcd-16bit-vert.c index f020d74757..6f59af9f70 100644 --- a/firmware/drivers/lcd-16bit-vert.c +++ b/firmware/drivers/lcd-16bit-vert.c | |||
@@ -41,10 +41,7 @@ | |||
41 | #define ROW_INC 1 | 41 | #define ROW_INC 1 |
42 | #define COL_INC LCD_HEIGHT | 42 | #define COL_INC LCD_HEIGHT |
43 | 43 | ||
44 | #define LCDADDR(x, y) (&lcd_framebuffer[0][0] + LCD_HEIGHT*(x) + (y)) | ||
45 | |||
46 | #include "lcd-16bit-common.c" | 44 | #include "lcd-16bit-common.c" |
47 | |||
48 | #include "lcd-bitmap-common.c" | 45 | #include "lcd-bitmap-common.c" |
49 | 46 | ||
50 | /*** drawing functions ***/ | 47 | /*** drawing functions ***/ |
@@ -54,7 +51,7 @@ void lcd_clear_viewport(void) | |||
54 | { | 51 | { |
55 | fb_data *dst, *dst_end; | 52 | fb_data *dst, *dst_end; |
56 | 53 | ||
57 | dst = LCDADDR(current_vp->x, current_vp->y); | 54 | dst = FBADDR(current_vp->x, current_vp->y); |
58 | dst_end = dst + current_vp->width * LCD_HEIGHT; | 55 | dst_end = dst + current_vp->width * LCD_HEIGHT; |
59 | 56 | ||
60 | if (current_vp->drawmode & DRMODE_INVERSEVID) | 57 | if (current_vp->drawmode & DRMODE_INVERSEVID) |
@@ -145,7 +142,7 @@ void lcd_hline(int x1, int x2, int y) | |||
145 | x2 = LCD_WIDTH-1; | 142 | x2 = LCD_WIDTH-1; |
146 | #endif | 143 | #endif |
147 | 144 | ||
148 | dst = LCDADDR(x1 , y ); | 145 | dst = FBADDR(x1 , y ); |
149 | dst_end = dst + (x2 - x1) * LCD_HEIGHT; | 146 | dst_end = dst + (x2 - x1) * LCD_HEIGHT; |
150 | 147 | ||
151 | do | 148 | do |
@@ -230,7 +227,7 @@ void lcd_vline(int x, int y1, int y2) | |||
230 | if (fillopt == OPT_NONE && current_vp->drawmode != DRMODE_COMPLEMENT) | 227 | if (fillopt == OPT_NONE && current_vp->drawmode != DRMODE_COMPLEMENT) |
231 | return; | 228 | return; |
232 | 229 | ||
233 | dst = LCDADDR(x, y1); | 230 | dst = FBADDR(x, y1); |
234 | 231 | ||
235 | switch (fillopt) | 232 | switch (fillopt) |
236 | { | 233 | { |
@@ -333,7 +330,7 @@ void lcd_fillrect(int x, int y, int width, int height) | |||
333 | if (fillopt == OPT_NONE && current_vp->drawmode != DRMODE_COMPLEMENT) | 330 | if (fillopt == OPT_NONE && current_vp->drawmode != DRMODE_COMPLEMENT) |
334 | return; | 331 | return; |
335 | 332 | ||
336 | dst = LCDADDR(x, y); | 333 | dst = FBADDR(x, y); |
337 | dst_end = dst + width * LCD_HEIGHT; | 334 | dst_end = dst + width * LCD_HEIGHT; |
338 | 335 | ||
339 | do | 336 | do |
@@ -426,7 +423,7 @@ void ICODE_ATTR lcd_bitmap_part(const fb_data *src, int src_x, int src_y, | |||
426 | #endif | 423 | #endif |
427 | 424 | ||
428 | src += stride * src_x + src_y; /* move starting point */ | 425 | src += stride * src_x + src_y; /* move starting point */ |
429 | dst = LCDADDR(x, y); | 426 | dst = FBADDR(x, y); |
430 | fb_data *dst_end = dst + width * LCD_HEIGHT; | 427 | fb_data *dst_end = dst + width * LCD_HEIGHT; |
431 | 428 | ||
432 | do | 429 | do |
@@ -500,7 +497,7 @@ void ICODE_ATTR lcd_bitmap_transparent_part(const fb_data *src, int src_x, | |||
500 | #endif | 497 | #endif |
501 | 498 | ||
502 | src += stride * src_x + src_y; /* move starting point */ | 499 | src += stride * src_x + src_y; /* move starting point */ |
503 | dst = LCDADDR(x, y); | 500 | dst = FBADDR(x, y); |
504 | dst_end = dst + width * LCD_HEIGHT; | 501 | dst_end = dst + width * LCD_HEIGHT; |
505 | 502 | ||
506 | do | 503 | do |
diff --git a/firmware/drivers/lcd-16bit.c b/firmware/drivers/lcd-16bit.c index f7d3cf22d4..71768b6744 100644 --- a/firmware/drivers/lcd-16bit.c +++ b/firmware/drivers/lcd-16bit.c | |||
@@ -41,10 +41,7 @@ | |||
41 | #define ROW_INC LCD_WIDTH | 41 | #define ROW_INC LCD_WIDTH |
42 | #define COL_INC 1 | 42 | #define COL_INC 1 |
43 | 43 | ||
44 | #define LCDADDR(x, y) (&lcd_framebuffer[(y)][(x)]) | ||
45 | |||
46 | #include "lcd-16bit-common.c" | 44 | #include "lcd-16bit-common.c" |
47 | |||
48 | #include "lcd-bitmap-common.c" | 45 | #include "lcd-bitmap-common.c" |
49 | 46 | ||
50 | /*** drawing functions ***/ | 47 | /*** drawing functions ***/ |
@@ -54,7 +51,7 @@ void lcd_clear_viewport(void) | |||
54 | { | 51 | { |
55 | fb_data *dst, *dst_end; | 52 | fb_data *dst, *dst_end; |
56 | 53 | ||
57 | dst = LCDADDR(current_vp->x, current_vp->y); | 54 | dst = FBADDR(current_vp->x, current_vp->y); |
58 | dst_end = dst + current_vp->height * LCD_WIDTH; | 55 | dst_end = dst + current_vp->height * LCD_WIDTH; |
59 | 56 | ||
60 | if (current_vp->drawmode & DRMODE_INVERSEVID) | 57 | if (current_vp->drawmode & DRMODE_INVERSEVID) |
@@ -173,7 +170,7 @@ void lcd_hline(int x1, int x2, int y) | |||
173 | if (fillopt == OPT_NONE && current_vp->drawmode != DRMODE_COMPLEMENT) | 170 | if (fillopt == OPT_NONE && current_vp->drawmode != DRMODE_COMPLEMENT) |
174 | return; | 171 | return; |
175 | 172 | ||
176 | dst = LCDADDR(x1, y); | 173 | dst = FBADDR(x1, y); |
177 | 174 | ||
178 | switch (fillopt) | 175 | switch (fillopt) |
179 | { | 176 | { |
@@ -241,7 +238,7 @@ void lcd_vline(int x, int y1, int y2) | |||
241 | y2 = LCD_HEIGHT-1; | 238 | y2 = LCD_HEIGHT-1; |
242 | #endif | 239 | #endif |
243 | 240 | ||
244 | dst = LCDADDR(x , y1); | 241 | dst = FBADDR(x , y1); |
245 | dst_end = dst + (y2 - y1) * LCD_WIDTH; | 242 | dst_end = dst + (y2 - y1) * LCD_WIDTH; |
246 | 243 | ||
247 | do | 244 | do |
@@ -333,7 +330,7 @@ void lcd_fillrect(int x, int y, int width, int height) | |||
333 | if (fillopt == OPT_NONE && current_vp->drawmode != DRMODE_COMPLEMENT) | 330 | if (fillopt == OPT_NONE && current_vp->drawmode != DRMODE_COMPLEMENT) |
334 | return; | 331 | return; |
335 | 332 | ||
336 | dst = LCDADDR(x, y); | 333 | dst = FBADDR(x, y); |
337 | dst_end = dst + height * LCD_WIDTH; | 334 | dst_end = dst + height * LCD_WIDTH; |
338 | 335 | ||
339 | do | 336 | do |
@@ -426,7 +423,7 @@ void ICODE_ATTR lcd_bitmap_part(const fb_data *src, int src_x, int src_y, | |||
426 | #endif | 423 | #endif |
427 | 424 | ||
428 | src += stride * src_y + src_x; /* move starting point */ | 425 | src += stride * src_y + src_x; /* move starting point */ |
429 | dst = LCDADDR(x, y); | 426 | dst = FBADDR(x, y); |
430 | 427 | ||
431 | do | 428 | do |
432 | { | 429 | { |
@@ -500,7 +497,7 @@ void ICODE_ATTR lcd_bitmap_transparent_part(const fb_data *src, int src_x, | |||
500 | #endif | 497 | #endif |
501 | 498 | ||
502 | src += stride * src_y + src_x; /* move starting point */ | 499 | src += stride * src_y + src_x; /* move starting point */ |
503 | dst = LCDADDR(x, y); | 500 | dst = FBADDR(x, y); |
504 | 501 | ||
505 | #ifdef CPU_ARM | 502 | #ifdef CPU_ARM |
506 | { | 503 | { |
diff --git a/firmware/drivers/lcd-1bit-vert.c b/firmware/drivers/lcd-1bit-vert.c index fd77ba7578..3a90856819 100644 --- a/firmware/drivers/lcd-1bit-vert.c +++ b/firmware/drivers/lcd-1bit-vert.c | |||
@@ -37,14 +37,16 @@ | |||
37 | #ifndef LCDFN /* Not compiling for remote - define macros for main LCD. */ | 37 | #ifndef LCDFN /* Not compiling for remote - define macros for main LCD. */ |
38 | #define LCDFN(fn) lcd_ ## fn | 38 | #define LCDFN(fn) lcd_ ## fn |
39 | #define FBFN(fn) fb_ ## fn | 39 | #define FBFN(fn) fb_ ## fn |
40 | #define FBSIZE FRAMEBUFFER_SIZE | ||
40 | #define LCDM(ma) LCD_ ## ma | 41 | #define LCDM(ma) LCD_ ## ma |
41 | #define LCDNAME "lcd_" | 42 | #define LCDNAME "lcd_" |
43 | #define LCDFB(x,y) FBADDR(x, y) | ||
42 | #define MAIN_LCD | 44 | #define MAIN_LCD |
43 | #endif | 45 | #endif |
44 | 46 | ||
45 | /*** globals ***/ | 47 | /*** globals ***/ |
46 | 48 | FBFN(data) LCDFN(static_framebuffer)[LCDM(FBHEIGHT)][LCDM(FBWIDTH)] IRAM_LCDFRAMEBUFFER; | |
47 | FBFN(data) LCDFN(framebuffer)[LCDM(FBHEIGHT)][LCDM(FBWIDTH)] IRAM_LCDFRAMEBUFFER; | 49 | FBFN(data) *LCDFN(framebuffer) = &LCDFN(static_framebuffer)[0][0]; |
48 | 50 | ||
49 | static struct viewport default_vp = | 51 | static struct viewport default_vp = |
50 | { | 52 | { |
@@ -152,17 +154,17 @@ int LCDFN(getstringsize)(const unsigned char *str, int *w, int *h) | |||
152 | 154 | ||
153 | static void setpixel(int x, int y) | 155 | static void setpixel(int x, int y) |
154 | { | 156 | { |
155 | LCDFN(framebuffer)[y>>3][x] |= BIT_N(y & 7); | 157 | *LCDFB(x,y>>3) |= BIT_N(y & 7); |
156 | } | 158 | } |
157 | 159 | ||
158 | static void clearpixel(int x, int y) | 160 | static void clearpixel(int x, int y) |
159 | { | 161 | { |
160 | LCDFN(framebuffer)[y>>3][x] &= ~BIT_N(y & 7); | 162 | *LCDFB(x,y>>3) &= ~BIT_N(y & 7); |
161 | } | 163 | } |
162 | 164 | ||
163 | static void flippixel(int x, int y) | 165 | static void flippixel(int x, int y) |
164 | { | 166 | { |
165 | LCDFN(framebuffer)[y>>3][x] ^= BIT_N(y & 7); | 167 | *LCDFB(x,y>>3) ^= BIT_N(y & 7); |
166 | } | 168 | } |
167 | 169 | ||
168 | static void nopixel(int x, int y) | 170 | static void nopixel(int x, int y) |
@@ -242,7 +244,7 @@ void LCDFN(clear_display)(void) | |||
242 | { | 244 | { |
243 | unsigned bits = (current_vp->drawmode & DRMODE_INVERSEVID) ? 0xFFu : 0; | 245 | unsigned bits = (current_vp->drawmode & DRMODE_INVERSEVID) ? 0xFFu : 0; |
244 | 246 | ||
245 | memset(LCDFN(framebuffer), bits, sizeof LCDFN(framebuffer)); | 247 | memset(LCDFN(framebuffer), bits, FBSIZE); |
246 | LCDFN(scroll_info).lines = 0; | 248 | LCDFN(scroll_info).lines = 0; |
247 | } | 249 | } |
248 | 250 | ||
@@ -422,7 +424,7 @@ void LCDFN(hline)(int x1, int x2, int y) | |||
422 | width = x2 - x1 + 1; | 424 | width = x2 - x1 + 1; |
423 | 425 | ||
424 | bfunc = LCDFN(blockfuncs)[current_vp->drawmode]; | 426 | bfunc = LCDFN(blockfuncs)[current_vp->drawmode]; |
425 | dst = &LCDFN(framebuffer)[y>>3][x1]; | 427 | dst = LCDFB(x1,y>>3); |
426 | mask = BIT_N(y & 7); | 428 | mask = BIT_N(y & 7); |
427 | 429 | ||
428 | dst_end = dst + width; | 430 | dst_end = dst + width; |
@@ -478,7 +480,7 @@ void LCDFN(vline)(int x, int y1, int y2) | |||
478 | #endif | 480 | #endif |
479 | 481 | ||
480 | bfunc = LCDFN(blockfuncs)[current_vp->drawmode]; | 482 | bfunc = LCDFN(blockfuncs)[current_vp->drawmode]; |
481 | dst = &LCDFN(framebuffer)[y1>>3][x]; | 483 | dst = LCDFB(x,y1>>3); |
482 | ny = y2 - (y1 & ~7); | 484 | ny = y2 - (y1 & ~7); |
483 | mask = 0xFFu << (y1 & 7); | 485 | mask = 0xFFu << (y1 & 7); |
484 | mask_bottom = 0xFFu >> (~ny & 7); | 486 | mask_bottom = 0xFFu >> (~ny & 7); |
@@ -583,7 +585,7 @@ void LCDFN(fillrect)(int x, int y, int width, int height) | |||
583 | } | 585 | } |
584 | } | 586 | } |
585 | bfunc = LCDFN(blockfuncs)[current_vp->drawmode]; | 587 | bfunc = LCDFN(blockfuncs)[current_vp->drawmode]; |
586 | dst = &LCDFN(framebuffer)[y>>3][x]; | 588 | dst = LCDFB(x,y>>3); |
587 | ny = height - 1 + (y & 7); | 589 | ny = height - 1 + (y & 7); |
588 | mask = 0xFFu << (y & 7); | 590 | mask = 0xFFu << (y & 7); |
589 | mask_bottom = 0xFFu >> (~ny & 7); | 591 | mask_bottom = 0xFFu >> (~ny & 7); |
@@ -696,7 +698,7 @@ void ICODE_ATTR LCDFN(bitmap_part)(const unsigned char *src, int src_x, | |||
696 | src += stride * (src_y >> 3) + src_x; /* move starting point */ | 698 | src += stride * (src_y >> 3) + src_x; /* move starting point */ |
697 | src_y &= 7; | 699 | src_y &= 7; |
698 | y -= src_y; | 700 | y -= src_y; |
699 | dst = &LCDFN(framebuffer)[y>>3][x]; | 701 | dst = LCDFB(x,y>>3); |
700 | shift = y & 7; | 702 | shift = y & 7; |
701 | ny = height - 1 + shift + src_y; | 703 | ny = height - 1 + shift + src_y; |
702 | 704 | ||
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 | ||
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 | ||
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 | ||
diff --git a/firmware/drivers/lcd-memframe.c b/firmware/drivers/lcd-memframe.c index dd878876bf..bb1682b074 100644 --- a/firmware/drivers/lcd-memframe.c +++ b/firmware/drivers/lcd-memframe.c | |||
@@ -66,7 +66,7 @@ void lcd_update(void) | |||
66 | return; | 66 | return; |
67 | 67 | ||
68 | /* Copy the Rockbox framebuffer to the second framebuffer */ | 68 | /* Copy the Rockbox framebuffer to the second framebuffer */ |
69 | lcd_copy_buffer_rect(LCD_FRAMEBUF_ADDR(0, 0), &lcd_framebuffer[0][0], | 69 | lcd_copy_buffer_rect(LCD_FRAMEBUF_ADDR(0, 0), FBADDR(0,0), |
70 | LCD_WIDTH*LCD_HEIGHT, 1); | 70 | LCD_WIDTH*LCD_HEIGHT, 1); |
71 | } | 71 | } |
72 | #endif /* LCD_OPTIMIZED_UPDATE */ | 72 | #endif /* LCD_OPTIMIZED_UPDATE */ |
@@ -95,7 +95,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
95 | return; /* nothing left to do */ | 95 | return; /* nothing left to do */ |
96 | 96 | ||
97 | dst = LCD_FRAMEBUF_ADDR(x, y); | 97 | dst = LCD_FRAMEBUF_ADDR(x, y); |
98 | src = &lcd_framebuffer[y][x]; | 98 | src = FBADDR(x,y); |
99 | 99 | ||
100 | /* Copy part of the Rockbox framebuffer to the second framebuffer */ | 100 | /* Copy part of the Rockbox framebuffer to the second framebuffer */ |
101 | if (width < LCD_WIDTH) | 101 | if (width < LCD_WIDTH) |
diff --git a/firmware/drivers/lcd-remote-1bit-v.c b/firmware/drivers/lcd-remote-1bit-v.c index f2588323e7..24b91509c7 100644 --- a/firmware/drivers/lcd-remote-1bit-v.c +++ b/firmware/drivers/lcd-remote-1bit-v.c | |||
@@ -24,7 +24,9 @@ | |||
24 | /* Compile 1 bit vertical packing LCD driver for remote LCD */ | 24 | /* Compile 1 bit vertical packing LCD driver for remote LCD */ |
25 | #define LCDFN(fn) lcd_remote_ ## fn | 25 | #define LCDFN(fn) lcd_remote_ ## fn |
26 | #define FBFN(fn) fb_remote_ ## fn | 26 | #define FBFN(fn) fb_remote_ ## fn |
27 | #define FBSIZE FRAMEBUFFER_REMOTE_SIZE | ||
27 | #define LCDM(ma) LCD_REMOTE_ ## ma | 28 | #define LCDM(ma) LCD_REMOTE_ ## ma |
29 | #define LCDFB(x,y) FBREMOTEADDR(x, y) | ||
28 | #define LCDNAME "lcd_remote_" | 30 | #define LCDNAME "lcd_remote_" |
29 | 31 | ||
30 | #include "lcd-1bit-vert.c" | 32 | #include "lcd-1bit-vert.c" |
diff --git a/firmware/drivers/lcd-remote-2bit-vi.c b/firmware/drivers/lcd-remote-2bit-vi.c index 34af8dde6f..fd4de6f6af 100644 --- a/firmware/drivers/lcd-remote-2bit-vi.c +++ b/firmware/drivers/lcd-remote-2bit-vi.c | |||
@@ -26,7 +26,9 @@ | |||
26 | /* Compile 2 bit vertical interleaved LCD driver for remote LCD */ | 26 | /* Compile 2 bit vertical interleaved LCD driver for remote LCD */ |
27 | #define LCDFN(fn) lcd_remote_ ## fn | 27 | #define LCDFN(fn) lcd_remote_ ## fn |
28 | #define FBFN(fn) fb_remote_ ## fn | 28 | #define FBFN(fn) fb_remote_ ## fn |
29 | #define FBSIZE FRAMEBUFFER_REMOTE_SIZE | ||
29 | #define LCDM(ma) LCD_REMOTE_ ## ma | 30 | #define LCDM(ma) LCD_REMOTE_ ## ma |
31 | #define LCDFB(x,y) FBREMOTEADDR(x, y) | ||
30 | #define LCDNAME "lcd_remote_" | 32 | #define LCDNAME "lcd_remote_" |
31 | 33 | ||
32 | #include "lcd-2bit-vi.c" | 34 | #include "lcd-2bit-vi.c" |