diff options
author | Jonathan Gordon <rockbox@jdgordon.info> | 2012-02-22 21:18:05 +1100 |
---|---|---|
committer | Jonathan Gordon <rockbox@jdgordon.info> | 2012-02-28 11:44:59 +1100 |
commit | b37e6bc8c119289aca8740dd5e3b60d72f9d6b40 (patch) | |
tree | 7ee9d491811c950943f0fc068d2e2b460ff05c6d /firmware/drivers | |
parent | 15c69b8bafc3e89e1a825b5bbefef4a97f0001b1 (diff) | |
download | rockbox-b37e6bc8c119289aca8740dd5e3b60d72f9d6b40.tar.gz rockbox-b37e6bc8c119289aca8740dd5e3b60d72f9d6b40.zip |
lcd drivers: Convert lcd_[remote_]framebuffer to a pointer
Change all lcd drivers to using a pointer to the static framebuffer
instead of directly accessing the static array. This will let us
later do fun things like dynamic framebuffer sizes (RaaA) or
ability to use different buffers for different layers (dynamic
skin backdrops!)
Change-Id: I0a4d58a9d7b55e6c932131b929e5d4c9f9414b06
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" |