diff options
65 files changed, 193 insertions, 181 deletions
diff --git a/apps/plugin.c b/apps/plugin.c index 36de7281d2..18bb47f64d 100644 --- a/apps/plugin.c +++ b/apps/plugin.c | |||
@@ -159,7 +159,7 @@ static const struct plugin_api rockbox_api = { | |||
159 | lcd_icon, | 159 | lcd_icon, |
160 | lcd_double_height, | 160 | lcd_double_height, |
161 | #else | 161 | #else |
162 | &lcd_framebuffer[0][0], | 162 | &lcd_static_framebuffer[0][0], |
163 | lcd_update_rect, | 163 | lcd_update_rect, |
164 | lcd_set_drawmode, | 164 | lcd_set_drawmode, |
165 | lcd_get_drawmode, | 165 | lcd_get_drawmode, |
@@ -264,7 +264,7 @@ static const struct plugin_api rockbox_api = { | |||
264 | lcd_remote_putsxy, | 264 | lcd_remote_putsxy, |
265 | lcd_remote_puts_style, | 265 | lcd_remote_puts_style, |
266 | lcd_remote_puts_scroll_style, | 266 | lcd_remote_puts_scroll_style, |
267 | &lcd_remote_framebuffer[0][0], | 267 | &lcd_remote_static_framebuffer[0][0], |
268 | lcd_remote_update, | 268 | lcd_remote_update, |
269 | lcd_remote_update_rect, | 269 | lcd_remote_update_rect, |
270 | 270 | ||
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" |
diff --git a/firmware/export/lcd-remote.h b/firmware/export/lcd-remote.h index 2a48b6fc34..0f5f7ed6b7 100644 --- a/firmware/export/lcd-remote.h +++ b/firmware/export/lcd-remote.h | |||
@@ -96,7 +96,10 @@ extern unsigned lcd_remote_color_to_native(unsigned color); | |||
96 | #endif | 96 | #endif |
97 | 97 | ||
98 | /* The actual framebuffer */ | 98 | /* The actual framebuffer */ |
99 | extern fb_remote_data lcd_remote_framebuffer[LCD_REMOTE_FBHEIGHT][LCD_REMOTE_FBWIDTH]; | 99 | extern fb_remote_data *lcd_remote_framebuffer; |
100 | extern fb_remote_data lcd_remote_static_framebuffer[LCD_REMOTE_FBHEIGHT][LCD_REMOTE_FBWIDTH]; | ||
101 | #define FBREMOTEADDR(x, y) (lcd_remote_framebuffer + ((y) * LCD_REMOTE_FBWIDTH) + (x)) | ||
102 | #define FRAMEBUFFER_REMOTE_SIZE (sizeof(lcd_remote_static_framebuffer)) | ||
100 | 103 | ||
101 | #if LCD_REMOTE_DEPTH > 1 | 104 | #if LCD_REMOTE_DEPTH > 1 |
102 | extern void lcd_remote_set_foreground(unsigned foreground); | 105 | extern void lcd_remote_set_foreground(unsigned foreground); |
diff --git a/firmware/export/lcd.h b/firmware/export/lcd.h index 2d0123cfe3..052b368d9b 100644 --- a/firmware/export/lcd.h +++ b/firmware/export/lcd.h | |||
@@ -413,7 +413,14 @@ static inline unsigned lcd_color_to_native(unsigned color) | |||
413 | #define LCD_FBHEIGHT LCD_HEIGHT | 413 | #define LCD_FBHEIGHT LCD_HEIGHT |
414 | #endif | 414 | #endif |
415 | /* The actual framebuffer */ | 415 | /* The actual framebuffer */ |
416 | extern fb_data lcd_framebuffer[LCD_FBHEIGHT][LCD_FBWIDTH]; | 416 | extern fb_data *lcd_framebuffer; |
417 | extern fb_data lcd_static_framebuffer[LCD_FBHEIGHT][LCD_FBWIDTH]; | ||
418 | #if defined(LCD_STRIDEFORMAT) && LCD_STRIDEFORMAT == VERTICAL_STRIDE | ||
419 | #define FBADDR(x, y) (lcd_framebuffer + ((x) * LCD_FBHEIGHT) + (y)) | ||
420 | #else | ||
421 | #define FBADDR(x, y) (lcd_framebuffer + ((y) * LCD_FBWIDTH) + (x)) | ||
422 | #endif | ||
423 | #define FRAMEBUFFER_SIZE (sizeof(lcd_static_framebuffer)) | ||
417 | 424 | ||
418 | /** Port-specific functions. Enable in port config file. **/ | 425 | /** Port-specific functions. Enable in port config file. **/ |
419 | #ifdef HAVE_REMOTE_LCD_AS_MAIN | 426 | #ifdef HAVE_REMOTE_LCD_AS_MAIN |
diff --git a/firmware/screendump.c b/firmware/screendump.c index 4b431d5958..0dfe79a69f 100644 --- a/firmware/screendump.c +++ b/firmware/screendump.c | |||
@@ -154,7 +154,7 @@ void screen_dump(void) | |||
154 | 154 | ||
155 | #if LCD_DEPTH == 1 | 155 | #if LCD_DEPTH == 1 |
156 | dst_end = dst + LCD_WIDTH/2; | 156 | dst_end = dst + LCD_WIDTH/2; |
157 | src = lcd_framebuffer[y >> 3]; | 157 | src = FBADDR(0, y >> 3); |
158 | mask = BIT_N(y & 7); | 158 | mask = BIT_N(y & 7); |
159 | 159 | ||
160 | do | 160 | do |
@@ -173,7 +173,7 @@ void screen_dump(void) | |||
173 | dst_end = dst + LCD_WIDTH/2; | 173 | dst_end = dst + LCD_WIDTH/2; |
174 | 174 | ||
175 | #if LCD_PIXELFORMAT == HORIZONTAL_PACKING | 175 | #if LCD_PIXELFORMAT == HORIZONTAL_PACKING |
176 | src = lcd_framebuffer[y]; | 176 | src = FBADDR(0, y); |
177 | 177 | ||
178 | do | 178 | do |
179 | { | 179 | { |
@@ -185,7 +185,7 @@ void screen_dump(void) | |||
185 | while (dst < dst_end); | 185 | while (dst < dst_end); |
186 | 186 | ||
187 | #elif LCD_PIXELFORMAT == VERTICAL_PACKING | 187 | #elif LCD_PIXELFORMAT == VERTICAL_PACKING |
188 | src = lcd_framebuffer[y >> 2]; | 188 | src = FBADDR(0, y >> 2); |
189 | shift = 2 * (y & 3); | 189 | shift = 2 * (y & 3); |
190 | 190 | ||
191 | do | 191 | do |
@@ -197,7 +197,7 @@ void screen_dump(void) | |||
197 | while (dst < dst_end); | 197 | while (dst < dst_end); |
198 | 198 | ||
199 | #elif LCD_PIXELFORMAT == VERTICAL_INTERLEAVED | 199 | #elif LCD_PIXELFORMAT == VERTICAL_INTERLEAVED |
200 | src = lcd_framebuffer[y >> 3]; | 200 | src = FBADDR(0, y >> 3); |
201 | shift = y & 7; | 201 | shift = y & 7; |
202 | 202 | ||
203 | do | 203 | do |
@@ -214,7 +214,7 @@ void screen_dump(void) | |||
214 | #endif | 214 | #endif |
215 | #elif LCD_DEPTH == 16 | 215 | #elif LCD_DEPTH == 16 |
216 | dst_end = dst + LCD_WIDTH; | 216 | dst_end = dst + LCD_WIDTH; |
217 | src = lcd_framebuffer[y]; | 217 | src = FBADDR(0, y); |
218 | 218 | ||
219 | do | 219 | do |
220 | { | 220 | { |
@@ -318,7 +318,7 @@ void remote_screen_dump(void) | |||
318 | 318 | ||
319 | #if LCD_REMOTE_DEPTH == 1 | 319 | #if LCD_REMOTE_DEPTH == 1 |
320 | dst_end = dst + LCD_REMOTE_WIDTH/2; | 320 | dst_end = dst + LCD_REMOTE_WIDTH/2; |
321 | src = lcd_remote_framebuffer[y >> 3]; | 321 | src = FBREMOTEADDR(0, y >> 3); |
322 | mask = BIT_N(y & 7); | 322 | mask = BIT_N(y & 7); |
323 | 323 | ||
324 | do | 324 | do |
@@ -333,7 +333,7 @@ void remote_screen_dump(void) | |||
333 | dst_end = dst + LCD_REMOTE_WIDTH/2; | 333 | dst_end = dst + LCD_REMOTE_WIDTH/2; |
334 | 334 | ||
335 | #if LCD_REMOTE_PIXELFORMAT == VERTICAL_INTERLEAVED | 335 | #if LCD_REMOTE_PIXELFORMAT == VERTICAL_INTERLEAVED |
336 | src = lcd_remote_framebuffer[y >> 3]; | 336 | src = FBREMOTEADDR(0, (y >> 3)); |
337 | shift = y & 7; | 337 | shift = y & 7; |
338 | 338 | ||
339 | do | 339 | do |
diff --git a/firmware/target/arm/as3525/lcd-fuze.c b/firmware/target/arm/as3525/lcd-fuze.c index 2acc7b3bf9..b2033738b6 100644 --- a/firmware/target/arm/as3525/lcd-fuze.c +++ b/firmware/target/arm/as3525/lcd-fuze.c | |||
@@ -332,7 +332,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
332 | 332 | ||
333 | lcd_write_cmd(R_WRITE_DATA_2_GRAM); | 333 | lcd_write_cmd(R_WRITE_DATA_2_GRAM); |
334 | 334 | ||
335 | ptr = &lcd_framebuffer[y][x]; | 335 | ptr = FBADDR(x,y); |
336 | 336 | ||
337 | do | 337 | do |
338 | { | 338 | { |
diff --git a/firmware/target/arm/as3525/lcd-ssd1303.c b/firmware/target/arm/as3525/lcd-ssd1303.c index 213f12a424..9fcc85d243 100644 --- a/firmware/target/arm/as3525/lcd-ssd1303.c +++ b/firmware/target/arm/as3525/lcd-ssd1303.c | |||
@@ -273,7 +273,7 @@ void lcd_update(void) | |||
273 | lcd_write_command (LCD_CNTL_HIGHCOL | ((offset >> 4) & 0xf)); | 273 | lcd_write_command (LCD_CNTL_HIGHCOL | ((offset >> 4) & 0xf)); |
274 | lcd_write_command (LCD_CNTL_LOWCOL | (offset & 0xf)); | 274 | lcd_write_command (LCD_CNTL_LOWCOL | (offset & 0xf)); |
275 | 275 | ||
276 | lcd_write_data (lcd_framebuffer[y], LCD_WIDTH); | 276 | lcd_write_data (FBADDR(0, y), LCD_WIDTH); |
277 | } | 277 | } |
278 | } | 278 | } |
279 | 279 | ||
@@ -304,6 +304,6 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
304 | lcd_write_command (LCD_CNTL_HIGHCOL | (((x+offset) >> 4) & 0xf)); | 304 | lcd_write_command (LCD_CNTL_HIGHCOL | (((x+offset) >> 4) & 0xf)); |
305 | lcd_write_command (LCD_CNTL_LOWCOL | ((x+offset) & 0xf)); | 305 | lcd_write_command (LCD_CNTL_LOWCOL | ((x+offset) & 0xf)); |
306 | 306 | ||
307 | lcd_write_data (&lcd_framebuffer[y][x], width); | 307 | lcd_write_data (FBADDR(x,y), width); |
308 | } | 308 | } |
309 | } | 309 | } |
diff --git a/firmware/target/arm/as3525/sansa-clipzip/lcd-clipzip.c b/firmware/target/arm/as3525/sansa-clipzip/lcd-clipzip.c index 3952171e7e..7673b529cc 100644 --- a/firmware/target/arm/as3525/sansa-clipzip/lcd-clipzip.c +++ b/firmware/target/arm/as3525/sansa-clipzip/lcd-clipzip.c | |||
@@ -426,7 +426,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
426 | 426 | ||
427 | /* write to GRAM */ | 427 | /* write to GRAM */ |
428 | for (row = y; row < y_end; row++) { | 428 | for (row = y; row < y_end; row++) { |
429 | lcd_write_data(&lcd_framebuffer[row][x], width); | 429 | lcd_write_data(FBADDR(x,row), width); |
430 | } | 430 | } |
431 | } | 431 | } |
432 | 432 | ||
diff --git a/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c b/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c index f875b40c05..2c80f89ff7 100644 --- a/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c +++ b/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c | |||
@@ -488,7 +488,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
488 | lcd_window(x, y, x+width-1, y+height-1); | 488 | lcd_window(x, y, x+width-1, y+height-1); |
489 | lcd_write_cmd(R_WRITE_DATA_2_GRAM); | 489 | lcd_write_cmd(R_WRITE_DATA_2_GRAM); |
490 | 490 | ||
491 | ptr = &lcd_framebuffer[y][x]; | 491 | ptr = FBADDR(x,y); |
492 | 492 | ||
493 | do | 493 | do |
494 | { | 494 | { |
diff --git a/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c b/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c index c2e80ad1fc..b25fff8c3b 100644 --- a/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c +++ b/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c | |||
@@ -533,12 +533,12 @@ void lcd_update_rect(int x, int y, int w, int h) | |||
533 | */ | 533 | */ |
534 | if(w == LCD_WIDTH) | 534 | if(w == LCD_WIDTH) |
535 | { | 535 | { |
536 | memcpy((void *)FRAME, &lcd_framebuffer[y][x], w * h * sizeof(fb_data)); | 536 | memcpy((void *)FRAME, FBADDR(x,y), w * h * sizeof(fb_data)); |
537 | } | 537 | } |
538 | else | 538 | else |
539 | { | 539 | { |
540 | for(int i = 0; i < h; i++) | 540 | for(int i = 0; i < h; i++) |
541 | memcpy((fb_data *)FRAME + i * w, &lcd_framebuffer[y + i][x], w * sizeof(fb_data)); | 541 | memcpy((fb_data *)FRAME + i * w, FBADDR(x,y + i), w * sizeof(fb_data)); |
542 | } | 542 | } |
543 | /* WARNING The LCDIF has a limitation on the vertical count ! In 16-bit packed mode | 543 | /* WARNING The LCDIF has a limitation on the vertical count ! In 16-bit packed mode |
544 | * (which we used, ie 16-bit per pixel, 2 pixels per 32-bit words), the v_count | 544 | * (which we used, ie 16-bit per pixel, 2 pixels per 32-bit words), the v_count |
@@ -599,10 +599,10 @@ void lcd_blit_yuv(unsigned char * const src[3], | |||
599 | linecounter = height >> 1; | 599 | linecounter = height >> 1; |
600 | 600 | ||
601 | #if LCD_WIDTH >= LCD_HEIGHT | 601 | #if LCD_WIDTH >= LCD_HEIGHT |
602 | dst = &lcd_framebuffer[y][x]; | 602 | dst = FBADDR(x,y); |
603 | row_end = dst + width; | 603 | row_end = dst + width; |
604 | #else | 604 | #else |
605 | dst = &lcd_framebuffer[x][LCD_WIDTH - y - 1]; | 605 | dst = FBADDR(LCD_WIDTH - y - 1,x); |
606 | row_end = dst + LCD_WIDTH * width; | 606 | row_end = dst + LCD_WIDTH * width; |
607 | #endif | 607 | #endif |
608 | 608 | ||
diff --git a/firmware/target/arm/ipod/lcd-color_nano.c b/firmware/target/arm/ipod/lcd-color_nano.c index 589e8654ae..c7676fa721 100644 --- a/firmware/target/arm/ipod/lcd-color_nano.c +++ b/firmware/target/arm/ipod/lcd-color_nano.c | |||
@@ -280,7 +280,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
280 | 280 | ||
281 | lcd_setup_drawing_region(x, y, width, height); | 281 | lcd_setup_drawing_region(x, y, width, height); |
282 | 282 | ||
283 | addr = (unsigned long*)&lcd_framebuffer[y][x]; | 283 | addr = (unsigned long*)FBADDR(x, y); |
284 | 284 | ||
285 | while (height > 0) { | 285 | while (height > 0) { |
286 | int r, h, pixels_to_write; | 286 | int r, h, pixels_to_write; |
diff --git a/firmware/target/arm/ipod/lcd-gray.c b/firmware/target/arm/ipod/lcd-gray.c index 11d4cba2f5..d8695cdb10 100644 --- a/firmware/target/arm/ipod/lcd-gray.c +++ b/firmware/target/arm/ipod/lcd-gray.c | |||
@@ -340,10 +340,10 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
340 | 340 | ||
341 | #if defined(IPOD_MINI) || defined(IPOD_MINI2G) | 341 | #if defined(IPOD_MINI) || defined(IPOD_MINI2G) |
342 | if (pix_offset == -2) | 342 | if (pix_offset == -2) |
343 | lcd_write_data_shifted(&lcd_framebuffer[y][2*x], width); | 343 | lcd_write_data_shifted(FBADDR(2*x, y), width); |
344 | else | 344 | else |
345 | #endif | 345 | #endif |
346 | lcd_write_data(&lcd_framebuffer[y][2*x], width); | 346 | lcd_write_data(FBADDR(2*x, y), width); |
347 | } | 347 | } |
348 | } | 348 | } |
349 | 349 | ||
diff --git a/firmware/target/arm/ipod/video/lcd-video.c b/firmware/target/arm/ipod/video/lcd-video.c index c499e9f745..27d889aafa 100644 --- a/firmware/target/arm/ipod/video/lcd-video.c +++ b/firmware/target/arm/ipod/video/lcd-video.c | |||
@@ -410,7 +410,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
410 | /* Prevent the tick from triggering BCM updates while we're writing. */ | 410 | /* Prevent the tick from triggering BCM updates while we're writing. */ |
411 | lcd_block_tick(); | 411 | lcd_block_tick(); |
412 | 412 | ||
413 | addr = &lcd_framebuffer[y][x]; | 413 | addr = FBADDR(x, y); |
414 | bcmaddr = BCMA_CMDPARAM + (LCD_WIDTH*2) * y + (x << 1); | 414 | bcmaddr = BCMA_CMDPARAM + (LCD_WIDTH*2) * y + (x << 1); |
415 | 415 | ||
416 | if (width == LCD_WIDTH) | 416 | if (width == LCD_WIDTH) |
diff --git a/firmware/target/arm/iriver/h10/lcd-h10_20gb.c b/firmware/target/arm/iriver/h10/lcd-h10_20gb.c index df748a74fb..c7e339295d 100644 --- a/firmware/target/arm/iriver/h10/lcd-h10_20gb.c +++ b/firmware/target/arm/iriver/h10/lcd-h10_20gb.c | |||
@@ -527,7 +527,7 @@ void lcd_update_rect(int x0, int y0, int width, int height) | |||
527 | /* start drawing */ | 527 | /* start drawing */ |
528 | lcd_send_cmd(R_WRITE_DATA_2_GRAM); | 528 | lcd_send_cmd(R_WRITE_DATA_2_GRAM); |
529 | 529 | ||
530 | addr = (unsigned short*)&lcd_framebuffer[y0][x0]; | 530 | addr = (unsigned short*)FBADDR(x0,y0); |
531 | 531 | ||
532 | int c, r; | 532 | int c, r; |
533 | 533 | ||
diff --git a/firmware/target/arm/iriver/h10/lcd-h10_5gb.c b/firmware/target/arm/iriver/h10/lcd-h10_5gb.c index ce57af14d5..5e1ad9ce23 100644 --- a/firmware/target/arm/iriver/h10/lcd-h10_5gb.c +++ b/firmware/target/arm/iriver/h10/lcd-h10_5gb.c | |||
@@ -327,7 +327,7 @@ void lcd_update_rect(int x0, int y0, int width, int height) | |||
327 | /* start drawing */ | 327 | /* start drawing */ |
328 | lcd_send_cmd(R_WRITE_DATA_2_GRAM); | 328 | lcd_send_cmd(R_WRITE_DATA_2_GRAM); |
329 | 329 | ||
330 | addr = (unsigned long*)&lcd_framebuffer[y0][x0]; | 330 | addr = (unsigned long*)FBADDR(x0,y0); |
331 | 331 | ||
332 | while (height > 0) { | 332 | while (height > 0) { |
333 | int c, r; | 333 | int c, r; |
diff --git a/firmware/target/arm/lcd-c200_c200v2.c b/firmware/target/arm/lcd-c200_c200v2.c index f82f8a809e..38877ccac9 100644 --- a/firmware/target/arm/lcd-c200_c200v2.c +++ b/firmware/target/arm/lcd-c200_c200v2.c | |||
@@ -395,7 +395,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
395 | if ((width <= 0) || (height <= 0)) | 395 | if ((width <= 0) || (height <= 0)) |
396 | return; /* Nothing left to do. */ | 396 | return; /* Nothing left to do. */ |
397 | 397 | ||
398 | addr = &lcd_framebuffer[y][x]; | 398 | addr = FBADDR(x,y); |
399 | 399 | ||
400 | if (width <= 1) { | 400 | if (width <= 1) { |
401 | /* The X end address must be larger than the X start address, so we | 401 | /* The X end address must be larger than the X start address, so we |
diff --git a/firmware/target/arm/lcd-ssd1815.c b/firmware/target/arm/lcd-ssd1815.c index 35d8cf2275..891d4ef64d 100644 --- a/firmware/target/arm/lcd-ssd1815.c +++ b/firmware/target/arm/lcd-ssd1815.c | |||
@@ -303,7 +303,7 @@ void lcd_update(void) | |||
303 | lcd_write_command (LCD_CNTL_HIGHCOL | ((xoffset >> 4) & 0xf)); | 303 | lcd_write_command (LCD_CNTL_HIGHCOL | ((xoffset >> 4) & 0xf)); |
304 | lcd_write_command (LCD_CNTL_LOWCOL | (xoffset & 0xf)); | 304 | lcd_write_command (LCD_CNTL_LOWCOL | (xoffset & 0xf)); |
305 | 305 | ||
306 | lcd_write_data (lcd_framebuffer[y], LCD_WIDTH); | 306 | lcd_write_data (FBADDR(0, y), LCD_WIDTH); |
307 | } | 307 | } |
308 | } | 308 | } |
309 | 309 | ||
@@ -331,6 +331,6 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
331 | lcd_write_command (LCD_CNTL_HIGHCOL | (((x+xoffset) >> 4) & 0xf)); | 331 | lcd_write_command (LCD_CNTL_HIGHCOL | (((x+xoffset) >> 4) & 0xf)); |
332 | lcd_write_command (LCD_CNTL_LOWCOL | ((x+xoffset) & 0xf)); | 332 | lcd_write_command (LCD_CNTL_LOWCOL | ((x+xoffset) & 0xf)); |
333 | 333 | ||
334 | lcd_write_data (&lcd_framebuffer[y][x], width); | 334 | lcd_write_data (FBADDR(x,y), width); |
335 | } | 335 | } |
336 | } | 336 | } |
diff --git a/firmware/target/arm/olympus/mrobe-100/lcd-mr100.c b/firmware/target/arm/olympus/mrobe-100/lcd-mr100.c index a0ea2a6aab..d336ad7419 100644 --- a/firmware/target/arm/olympus/mrobe-100/lcd-mr100.c +++ b/firmware/target/arm/olympus/mrobe-100/lcd-mr100.c | |||
@@ -239,7 +239,7 @@ void lcd_update(void) | |||
239 | lcd_write_command(cmd1); | 239 | lcd_write_command(cmd1); |
240 | lcd_write_command(cmd2); | 240 | lcd_write_command(cmd2); |
241 | 241 | ||
242 | lcd_write_data (lcd_framebuffer[y], LCD_WIDTH); | 242 | lcd_write_data (FBADDR(0, y), LCD_WIDTH); |
243 | } | 243 | } |
244 | } | 244 | } |
245 | 245 | ||
@@ -271,6 +271,6 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
271 | lcd_write_command(cmd1); | 271 | lcd_write_command(cmd1); |
272 | lcd_write_command(cmd2); | 272 | lcd_write_command(cmd2); |
273 | 273 | ||
274 | lcd_write_data (&lcd_framebuffer[y][x], width); | 274 | lcd_write_data (FBADDR(x,y), width); |
275 | } | 275 | } |
276 | } | 276 | } |
diff --git a/firmware/target/arm/olympus/mrobe-100/lcd-remote-mr100.c b/firmware/target/arm/olympus/mrobe-100/lcd-remote-mr100.c index aa3d228952..edcdde7253 100644 --- a/firmware/target/arm/olympus/mrobe-100/lcd-remote-mr100.c +++ b/firmware/target/arm/olympus/mrobe-100/lcd-remote-mr100.c | |||
@@ -255,7 +255,7 @@ static void remote_update_lcd(void) | |||
255 | data[6] = (y + 1) << 3; /* y2 */ | 255 | data[6] = (y + 1) << 3; /* y2 */ |
256 | 256 | ||
257 | for (x = 0; x < RC_WIDTH; x++) | 257 | for (x = 0; x < RC_WIDTH; x++) |
258 | data[x + 7] = lcd_remote_framebuffer[y][x]; | 258 | data[x + 7] = FBREMOTEADDR(x,y); |
259 | 259 | ||
260 | remote_tx(data, RC_WIDTH + 7); | 260 | remote_tx(data, RC_WIDTH + 7); |
261 | 261 | ||
diff --git a/firmware/target/arm/pbell/vibe500/lcd-vibe500.c b/firmware/target/arm/pbell/vibe500/lcd-vibe500.c index 4cb073db7b..4dd2ec1206 100644 --- a/firmware/target/arm/pbell/vibe500/lcd-vibe500.c +++ b/firmware/target/arm/pbell/vibe500/lcd-vibe500.c | |||
@@ -483,7 +483,7 @@ void lcd_update_rect(int x0, int y0, int width, int height) | |||
483 | /* start drawing */ | 483 | /* start drawing */ |
484 | lcd_send_cmd(R_WRITE_DATA_2_GRAM); | 484 | lcd_send_cmd(R_WRITE_DATA_2_GRAM); |
485 | 485 | ||
486 | addr = &lcd_framebuffer[y0][x0]; | 486 | addr = FBADDR(x0, y0) |
487 | 487 | ||
488 | int c, r; | 488 | int c, r; |
489 | for (r = 0; r < height; r++) | 489 | for (r = 0; r < height; r++) |
diff --git a/firmware/target/arm/philips/hdd1630/lcd-hdd1630.c b/firmware/target/arm/philips/hdd1630/lcd-hdd1630.c index 500120a432..28bef09463 100644 --- a/firmware/target/arm/philips/hdd1630/lcd-hdd1630.c +++ b/firmware/target/arm/philips/hdd1630/lcd-hdd1630.c | |||
@@ -373,7 +373,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
373 | if ((width <= 0) || (height <= 0)) | 373 | if ((width <= 0) || (height <= 0)) |
374 | return; /* Nothing left to do. */ | 374 | return; /* Nothing left to do. */ |
375 | 375 | ||
376 | addr = &lcd_framebuffer[y][x]; | 376 | addr = FBADDR(x,y); |
377 | 377 | ||
378 | lcd_send_cmd(CASET); | 378 | lcd_send_cmd(CASET); |
379 | lcd_send_data(x); | 379 | lcd_send_data(x); |
diff --git a/firmware/target/arm/philips/hdd6330/lcd-hdd6330.c b/firmware/target/arm/philips/hdd6330/lcd-hdd6330.c index 328c270b5e..cdd3064bba 100644 --- a/firmware/target/arm/philips/hdd6330/lcd-hdd6330.c +++ b/firmware/target/arm/philips/hdd6330/lcd-hdd6330.c | |||
@@ -285,7 +285,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
285 | 285 | ||
286 | lcd_send_reg(LCD_REG_WRITE_DATA_2_GRAM); | 286 | lcd_send_reg(LCD_REG_WRITE_DATA_2_GRAM); |
287 | 287 | ||
288 | addr = (unsigned long*)&lcd_framebuffer[y][x]; | 288 | addr = (unsigned long*)FBADDR(x,y); |
289 | 289 | ||
290 | while (height > 0) | 290 | while (height > 0) |
291 | { | 291 | { |
diff --git a/firmware/target/arm/philips/sa9200/lcd-sa9200.c b/firmware/target/arm/philips/sa9200/lcd-sa9200.c index 3db308ed09..e30a298045 100644 --- a/firmware/target/arm/philips/sa9200/lcd-sa9200.c +++ b/firmware/target/arm/philips/sa9200/lcd-sa9200.c | |||
@@ -495,8 +495,8 @@ void lcd_update(void) | |||
495 | if (!display_on) | 495 | if (!display_on) |
496 | return; | 496 | return; |
497 | 497 | ||
498 | addr = &lcd_framebuffer[0][0]; | 498 | addr = FBADDR(0,0); |
499 | end = &lcd_framebuffer[LCD_HEIGHT - 1][LCD_WIDTH]; | 499 | end = FBADDR(LCD_WIDTH,LCD_HEIGHT - 1); |
500 | 500 | ||
501 | lcd_write_reg(R_HORIZ_RAM_ADDR_POS, (LCD_WIDTH - 1) << 8); | 501 | lcd_write_reg(R_HORIZ_RAM_ADDR_POS, (LCD_WIDTH - 1) << 8); |
502 | lcd_write_reg(R_VERT_RAM_ADDR_POS, (LCD_HEIGHT - 1) << 8); | 502 | lcd_write_reg(R_VERT_RAM_ADDR_POS, (LCD_HEIGHT - 1) << 8); |
@@ -533,7 +533,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
533 | if (height <= 0) | 533 | if (height <= 0) |
534 | return; /* Nothing left to do. */ | 534 | return; /* Nothing left to do. */ |
535 | 535 | ||
536 | addr = &lcd_framebuffer[y][x]; | 536 | addr = FBADDR(x,y); |
537 | 537 | ||
538 | lcd_write_reg(R_HORIZ_RAM_ADDR_POS, ((x + width - 1) << 8) | x); | 538 | lcd_write_reg(R_HORIZ_RAM_ADDR_POS, ((x + width - 1) << 8) | x); |
539 | lcd_write_reg(R_VERT_RAM_ADDR_POS, ((y + height - 1) << 8) | y); | 539 | lcd_write_reg(R_VERT_RAM_ADDR_POS, ((y + height - 1) << 8) | y); |
diff --git a/firmware/target/arm/pnx0101/iriver-ifp7xx/lcd-ifp7xx.c b/firmware/target/arm/pnx0101/iriver-ifp7xx/lcd-ifp7xx.c index c71e8fd6fb..1ad604d50c 100644 --- a/firmware/target/arm/pnx0101/iriver-ifp7xx/lcd-ifp7xx.c +++ b/firmware/target/arm/pnx0101/iriver-ifp7xx/lcd-ifp7xx.c | |||
@@ -191,7 +191,7 @@ void lcd_update(void) | |||
191 | lcd_write_command (LCD_CNTL_HIGHCOL); | 191 | lcd_write_command (LCD_CNTL_HIGHCOL); |
192 | lcd_write_command (LCD_CNTL_LOWCOL | 4); | 192 | lcd_write_command (LCD_CNTL_LOWCOL | 4); |
193 | 193 | ||
194 | lcd_write_data (lcd_framebuffer[y], LCD_WIDTH); | 194 | lcd_write_data (FBADDR(0, y), LCD_WIDTH); |
195 | } | 195 | } |
196 | } | 196 | } |
197 | 197 | ||
@@ -219,6 +219,6 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
219 | lcd_write_command (LCD_CNTL_HIGHCOL | (((x+4) >> 4) & 0xf)); | 219 | lcd_write_command (LCD_CNTL_HIGHCOL | (((x+4) >> 4) & 0xf)); |
220 | lcd_write_command (LCD_CNTL_LOWCOL | ((x+4) & 0xf)); | 220 | lcd_write_command (LCD_CNTL_LOWCOL | ((x+4) & 0xf)); |
221 | 221 | ||
222 | lcd_write_data (&lcd_framebuffer[y][x], width); | 222 | lcd_write_data (FBADDR(x,y), width); |
223 | } | 223 | } |
224 | } | 224 | } |
diff --git a/firmware/target/arm/rk27xx/lcd-hifiman.c b/firmware/target/arm/rk27xx/lcd-hifiman.c index 91e55894e5..21ca321d1f 100644 --- a/firmware/target/arm/rk27xx/lcd-hifiman.c +++ b/firmware/target/arm/rk27xx/lcd-hifiman.c | |||
@@ -162,7 +162,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
162 | 162 | ||
163 | for (px=x; px<pxmax; px++) | 163 | for (px=x; px<pxmax; px++) |
164 | for (py=y; py<pymax; py++) | 164 | for (py=y; py<pymax; py++) |
165 | lcd_data(lcd_framebuffer[py][px]); | 165 | lcd_data(FBADDR(px, py)); |
166 | } | 166 | } |
167 | 167 | ||
168 | /* Blit a YUV bitmap directly to the LCD */ | 168 | /* Blit a YUV bitmap directly to the LCD */ |
diff --git a/firmware/target/arm/rk27xx/rk27generic/lcd-rk27generic.c b/firmware/target/arm/rk27xx/rk27generic/lcd-rk27generic.c index b184630ebe..6b989a6dd7 100644 --- a/firmware/target/arm/rk27xx/rk27generic/lcd-rk27generic.c +++ b/firmware/target/arm/rk27xx/rk27generic/lcd-rk27generic.c | |||
@@ -191,7 +191,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
191 | for (py=y; py<pymax; py++) | 191 | for (py=y; py<pymax; py++) |
192 | { | 192 | { |
193 | for (px=x; px<pxmax; px++) | 193 | for (px=x; px<pxmax; px++) |
194 | LCD_DATA = lcd_pixel_transform(lcd_framebuffer[py][px]); | 194 | LCD_DATA = lcd_pixel_transform(FBADDR(px,py)); |
195 | } | 195 | } |
196 | } | 196 | } |
197 | 197 | ||
diff --git a/firmware/target/arm/s5l8700/ipodnano2g/lcd-nano2g.c b/firmware/target/arm/s5l8700/ipodnano2g/lcd-nano2g.c index 6434469881..13e5c5c1d4 100644 --- a/firmware/target/arm/s5l8700/ipodnano2g/lcd-nano2g.c +++ b/firmware/target/arm/s5l8700/ipodnano2g/lcd-nano2g.c | |||
@@ -394,7 +394,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
394 | lcd_setup_drawing_region(x, y, width, height); | 394 | lcd_setup_drawing_region(x, y, width, height); |
395 | 395 | ||
396 | /* Copy display bitmap to hardware */ | 396 | /* Copy display bitmap to hardware */ |
397 | p = &lcd_framebuffer[y][x]; | 397 | p = FBADDR(x,y); |
398 | if (LCD_WIDTH == width) { | 398 | if (LCD_WIDTH == width) { |
399 | /* Write all lines at once */ | 399 | /* Write all lines at once */ |
400 | lcd_write_line(p, height*LCD_WIDTH, LCD_BASE); | 400 | lcd_write_line(p, height*LCD_WIDTH, LCD_BASE); |
diff --git a/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c b/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c index 3420e92d62..5ed6c752b7 100644 --- a/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c +++ b/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c | |||
@@ -295,7 +295,7 @@ void lcd_update(void) | |||
295 | LCD_WCMD = 0; | 295 | LCD_WCMD = 0; |
296 | LCD_WCMD = 0x22; | 296 | LCD_WCMD = 0x22; |
297 | } | 297 | } |
298 | for(p=&lcd_framebuffer[0][0], i=0;i<LCD_WIDTH*LCD_FBHEIGHT;++i, ++p) { | 298 | for(p=FBADDR(0,0), i=0;i<LCD_WIDTH*LCD_FBHEIGHT;++i, ++p) { |
299 | while (LCD_STATUS & STAT_FULL); | 299 | while (LCD_STATUS & STAT_FULL); |
300 | LCD_WDATA = RGB_UNPACK_RED(*p); | 300 | LCD_WDATA = RGB_UNPACK_RED(*p); |
301 | while (LCD_STATUS & STAT_FULL); | 301 | while (LCD_STATUS & STAT_FULL); |
diff --git a/firmware/target/arm/s5l8700/meizu-m6sp/lcd-m6sp.c b/firmware/target/arm/s5l8700/meizu-m6sp/lcd-m6sp.c index 6ab5c08a50..5e722d5a87 100644 --- a/firmware/target/arm/s5l8700/meizu-m6sp/lcd-m6sp.c +++ b/firmware/target/arm/s5l8700/meizu-m6sp/lcd-m6sp.c | |||
@@ -438,8 +438,8 @@ void lcd_init_device(void) | |||
438 | lcd_controller_init(); | 438 | lcd_controller_init(); |
439 | 439 | ||
440 | /* set framebuffer addresses */ | 440 | /* set framebuffer addresses */ |
441 | fb = (uint32_t) &lcd_framebuffer[0][0]; | 441 | fb = (uint32_t) FBADDR(0,0); |
442 | fb_end = (uint32_t) &lcd_framebuffer[LCD_HEIGHT][0]; | 442 | fb_end = (uint32_t) FBADDR(0,LCD_HEIGHT); |
443 | window = 2 * LCD_WIDTH; | 443 | window = 2 * LCD_WIDTH; |
444 | 444 | ||
445 | LCDB1SADDR1 = fb; | 445 | LCDB1SADDR1 = fb; |
diff --git a/firmware/target/arm/s5l8700/yps3/lcd-yps3.c b/firmware/target/arm/s5l8700/yps3/lcd-yps3.c index 3b57a50ec0..a9830bca57 100644 --- a/firmware/target/arm/s5l8700/yps3/lcd-yps3.c +++ b/firmware/target/arm/s5l8700/yps3/lcd-yps3.c | |||
@@ -306,7 +306,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
306 | lcd_set_position1(x, y); | 306 | lcd_set_position1(x, y); |
307 | 307 | ||
308 | for (h = 0; h < height; h++) { | 308 | for (h = 0; h < height; h++) { |
309 | p = &lcd_framebuffer[y][0]; | 309 | p = FBADDR(0,y); |
310 | for (w = 0; w < LCD_WIDTH; w++) { | 310 | for (w = 0; w < LCD_WIDTH; w++) { |
311 | while (LCD_STATUS & 0x10); | 311 | while (LCD_STATUS & 0x10); |
312 | LCD_WDATA = *p++; | 312 | LCD_WDATA = *p++; |
@@ -319,7 +319,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
319 | lcd_set_position2(x, y); | 319 | lcd_set_position2(x, y); |
320 | 320 | ||
321 | for (h = 0; h < height; h++) { | 321 | for (h = 0; h < height; h++) { |
322 | p = &lcd_framebuffer[y][x]; | 322 | p = FBADDR(x,y); |
323 | for (w = 0; w < width; w++) { | 323 | for (w = 0; w < width; w++) { |
324 | while (LCD_STATUS & 0x10); | 324 | while (LCD_STATUS & 0x10); |
325 | LCD_WDATA = *p++; | 325 | LCD_WDATA = *p++; |
diff --git a/firmware/target/arm/s5l8702/ipod6g/lcd-ipod6g.c b/firmware/target/arm/s5l8702/ipod6g/lcd-ipod6g.c index 84443551b9..f9dbab6180 100644 --- a/firmware/target/arm/s5l8702/ipod6g/lcd-ipod6g.c +++ b/firmware/target/arm/s5l8702/ipod6g/lcd-ipod6g.c | |||
@@ -428,7 +428,7 @@ void lcd_update_rect(int, int, int, int) ICODE_ATTR; | |||
428 | void lcd_update_rect(int x, int y, int width, int height) | 428 | void lcd_update_rect(int x, int y, int width, int height) |
429 | { | 429 | { |
430 | int pixels = width * height; | 430 | int pixels = width * height; |
431 | fb_data* p = &lcd_framebuffer[y][x]; | 431 | fb_data* p = FBADDR(x,y); |
432 | uint16_t* out = lcd_dblbuf[0]; | 432 | uint16_t* out = lcd_dblbuf[0]; |
433 | 433 | ||
434 | #ifdef HAVE_LCD_SLEEP | 434 | #ifdef HAVE_LCD_SLEEP |
diff --git a/firmware/target/arm/samsung/yh820/lcd-yh820.c b/firmware/target/arm/samsung/yh820/lcd-yh820.c index 4773e27185..10934621d7 100644 --- a/firmware/target/arm/samsung/yh820/lcd-yh820.c +++ b/firmware/target/arm/samsung/yh820/lcd-yh820.c | |||
@@ -347,7 +347,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
347 | if ((width <= 0) || (height <= 0)) | 347 | if ((width <= 0) || (height <= 0)) |
348 | return; /* Nothing left to do. */ | 348 | return; /* Nothing left to do. */ |
349 | 349 | ||
350 | addr = &lcd_framebuffer[y][x]; | 350 | addr = FBADDR(x,y); |
351 | 351 | ||
352 | if (width <= 1) { | 352 | if (width <= 1) { |
353 | lcd_send_command(R_ENTRY_MODE); /* The X end address must be larger */ | 353 | lcd_send_command(R_ENTRY_MODE); /* The X end address must be larger */ |
diff --git a/firmware/target/arm/samsung/yh920/lcd-yh920.c b/firmware/target/arm/samsung/yh920/lcd-yh920.c index d24396050a..5563c13f53 100644 --- a/firmware/target/arm/samsung/yh920/lcd-yh920.c +++ b/firmware/target/arm/samsung/yh920/lcd-yh920.c | |||
@@ -259,7 +259,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
259 | lcd_write_reg(LCD_CNTL_PAGE, y); | 259 | lcd_write_reg(LCD_CNTL_PAGE, y); |
260 | lcd_write_reg(LCD_CNTL_COLUMN, x); | 260 | lcd_write_reg(LCD_CNTL_COLUMN, x); |
261 | 261 | ||
262 | addr = &lcd_framebuffer[y][x]; | 262 | addr = FBADDR(x,y); |
263 | 263 | ||
264 | lcd_send_cmd(LCD_CNTL_DATA_WRITE); | 264 | lcd_send_cmd(LCD_CNTL_DATA_WRITE); |
265 | lcd_write_data(addr, width); | 265 | lcd_write_data(addr, width); |
diff --git a/firmware/target/arm/samsung/yh925/lcd-yh925.c b/firmware/target/arm/samsung/yh925/lcd-yh925.c index ceed443654..93bfb3a5f2 100644 --- a/firmware/target/arm/samsung/yh925/lcd-yh925.c +++ b/firmware/target/arm/samsung/yh925/lcd-yh925.c | |||
@@ -639,7 +639,7 @@ void lcd_update_rect(int x0, int y0, int width, int height) | |||
639 | /* start drawing */ | 639 | /* start drawing */ |
640 | lcd_send_cmd(R_WRITE_DATA_2_GRAM); | 640 | lcd_send_cmd(R_WRITE_DATA_2_GRAM); |
641 | 641 | ||
642 | addr = (unsigned short*)&lcd_framebuffer[y0][x0]; | 642 | addr = (unsigned short*)FBADDR(x0,y0); |
643 | 643 | ||
644 | int c, r; | 644 | int c, r; |
645 | 645 | ||
diff --git a/firmware/target/arm/sandisk/sansa-view/lcd-view.c b/firmware/target/arm/sandisk/sansa-view/lcd-view.c index 99c972704d..cc67e838f9 100644 --- a/firmware/target/arm/sandisk/sansa-view/lcd-view.c +++ b/firmware/target/arm/sandisk/sansa-view/lcd-view.c | |||
@@ -363,7 +363,7 @@ void lcd_update(void) | |||
363 | { | 363 | { |
364 | const fb_data *addr; | 364 | const fb_data *addr; |
365 | 365 | ||
366 | addr = &lcd_framebuffer[LCD_HEIGHT][LCD_WIDTH]; | 366 | addr = FBADDR(LCD_WIDTH,LCD_HEIGHT); |
367 | 367 | ||
368 | lcd_write_reg(0x20, 0x0); | 368 | lcd_write_reg(0x20, 0x0); |
369 | lcd_write_reg(0x21, 0x0); | 369 | lcd_write_reg(0x21, 0x0); |
diff --git a/firmware/target/arm/tcc77x/c100/lcd-S6B33B2.c b/firmware/target/arm/tcc77x/c100/lcd-S6B33B2.c index 4abd17741b..c53aadaf30 100644 --- a/firmware/target/arm/tcc77x/c100/lcd-S6B33B2.c +++ b/firmware/target/arm/tcc77x/c100/lcd-S6B33B2.c | |||
@@ -252,7 +252,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
252 | if ((width <= 0) || (height <= 0)) | 252 | if ((width <= 0) || (height <= 0)) |
253 | return; /* Nothing left to do. */ | 253 | return; /* Nothing left to do. */ |
254 | 254 | ||
255 | addr = &lcd_framebuffer[y][x]; | 255 | addr = FBADDR(x,y); |
256 | 256 | ||
257 | if (width <= 1) { | 257 | if (width <= 1) { |
258 | lcd_send_command(R_ENTRY_MODE); /* The X end address must be larger */ | 258 | lcd_send_command(R_ENTRY_MODE); /* The X end address must be larger */ |
diff --git a/firmware/target/arm/tcc77x/iaudio7/lcd-iaudio7.c b/firmware/target/arm/tcc77x/iaudio7/lcd-iaudio7.c index 5d2a2b8194..8b9a9bda83 100644 --- a/firmware/target/arm/tcc77x/iaudio7/lcd-iaudio7.c +++ b/firmware/target/arm/tcc77x/iaudio7/lcd-iaudio7.c | |||
@@ -211,7 +211,7 @@ void lcd_update_rect(int sx, int sy, int width, int height) | |||
211 | fb_data c; | 211 | fb_data c; |
212 | unsigned long color; | 212 | unsigned long color; |
213 | 213 | ||
214 | c = lcd_framebuffer[y][x]; | 214 | c = FBADDR(x,y); |
215 | color = | 215 | color = |
216 | ((c & 0x1f) << 1) | ((c & 0x7e0) << 1) | ((c & 0xf800) << | 216 | ((c & 0x1f) << 1) | ((c & 0x7e0) << 1) | ((c & 0xf800) << |
217 | 2); | 217 | 2); |
diff --git a/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c b/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c index 204a99f87c..5f623dc239 100644 --- a/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c +++ b/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c | |||
@@ -380,7 +380,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
380 | 380 | ||
381 | #if CONFIG_ORIENTATION == SCREEN_PORTRAIT | 381 | #if CONFIG_ORIENTATION == SCREEN_PORTRAIT |
382 | dst = (fb_data *)FRAME + LCD_WIDTH*y + x; | 382 | dst = (fb_data *)FRAME + LCD_WIDTH*y + x; |
383 | src = &lcd_framebuffer[y][x]; | 383 | src = FBADDR(x,y); |
384 | 384 | ||
385 | /* Copy part of the Rockbox framebuffer to the second framebuffer */ | 385 | /* Copy part of the Rockbox framebuffer to the second framebuffer */ |
386 | if (width < LCD_WIDTH) | 386 | if (width < LCD_WIDTH) |
@@ -394,7 +394,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
394 | lcd_copy_buffer_rect(dst, src, LCD_WIDTH*height, 1); | 394 | lcd_copy_buffer_rect(dst, src, LCD_WIDTH*height, 1); |
395 | } | 395 | } |
396 | #else | 396 | #else |
397 | src = &lcd_framebuffer[y][x]; | 397 | src = FBADDR(x,y); |
398 | 398 | ||
399 | register int xc, yc; | 399 | register int xc, yc; |
400 | register fb_data *start=FRAME + LCD_HEIGHT*(LCD_WIDTH-x-1) + y + 1; | 400 | register fb_data *start=FRAME + LCD_HEIGHT*(LCD_WIDTH-x-1) + y + 1; |
@@ -419,7 +419,7 @@ void lcd_update(void) | |||
419 | if (!lcd_on || direct_fb_access) | 419 | if (!lcd_on || direct_fb_access) |
420 | return; | 420 | return; |
421 | #if CONFIG_ORIENTATION == SCREEN_PORTRAIT | 421 | #if CONFIG_ORIENTATION == SCREEN_PORTRAIT |
422 | lcd_copy_buffer_rect((fb_data *)FRAME, &lcd_framebuffer[0][0], | 422 | lcd_copy_buffer_rect((fb_data *)FRAME, FBADDR(0,0), |
423 | LCD_WIDTH*LCD_HEIGHT, 1); | 423 | LCD_WIDTH*LCD_HEIGHT, 1); |
424 | #else | 424 | #else |
425 | lcd_update_rect(0, 0, LCD_WIDTH, LCD_HEIGHT); | 425 | lcd_update_rect(0, 0, LCD_WIDTH, LCD_HEIGHT); |
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c index 38631401f9..c3a96a3efd 100644 --- a/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c +++ b/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c | |||
@@ -500,12 +500,12 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
500 | if (width < LCD_WIDTH) | 500 | if (width < LCD_WIDTH) |
501 | { | 501 | { |
502 | /* Not full width - do line-by-line */ | 502 | /* Not full width - do line-by-line */ |
503 | lcd_copy_buffer_rect(dst, &lcd_framebuffer[y][x], width, height); | 503 | lcd_copy_buffer_rect(dst, FBADDR(x,y), width, height); |
504 | } | 504 | } |
505 | else | 505 | else |
506 | { | 506 | { |
507 | /* Full width - copy as one line */ | 507 | /* Full width - copy as one line */ |
508 | lcd_copy_buffer_rect(dst, &lcd_framebuffer[y][x], LCD_WIDTH*height, 1); | 508 | lcd_copy_buffer_rect(dst, FBADDR(x,y), LCD_WIDTH*height, 1); |
509 | } | 509 | } |
510 | #endif | 510 | #endif |
511 | 511 | ||
@@ -519,7 +519,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
519 | #else | 519 | #else |
520 | fb_data *src; | 520 | fb_data *src; |
521 | fb_data *dst; | 521 | fb_data *dst; |
522 | src = &lcd_framebuffer[0][0] + (x*LCD_HEIGHT + y); | 522 | src = FBADDR(0,0) + (x*LCD_HEIGHT + y); |
523 | dst = FRAME + (LCD_HEIGHT*(LCD_WIDTH-1) - x * LCD_HEIGHT + y); | 523 | dst = FRAME + (LCD_HEIGHT*(LCD_WIDTH-1) - x * LCD_HEIGHT + y); |
524 | 524 | ||
525 | while(width > 0) { | 525 | while(width > 0) { |
@@ -532,7 +532,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
532 | 532 | ||
533 | #else | 533 | #else |
534 | register fb_data *dst, *src; | 534 | register fb_data *dst, *src; |
535 | src = &lcd_framebuffer[y][x]; | 535 | src = FBADDR(x,y); |
536 | 536 | ||
537 | dst=FRAME + (LCD_NATIVE_WIDTH*(LCD_NATIVE_HEIGHT-1)) | 537 | dst=FRAME + (LCD_NATIVE_WIDTH*(LCD_NATIVE_HEIGHT-1)) |
538 | - LCD_NATIVE_WIDTH*x + y ; | 538 | - LCD_NATIVE_WIDTH*x + y ; |
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/lcd-remote-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/lcd-remote-mr500.c index d8f55ee63d..5b8b2f9437 100644 --- a/firmware/target/arm/tms320dm320/mrobe-500/lcd-remote-mr500.c +++ b/firmware/target/arm/tms320dm320/mrobe-500/lcd-remote-mr500.c | |||
@@ -246,7 +246,7 @@ static void remote_tick(void) | |||
246 | for(i=7; i<remote_payload_size; i++) | 246 | for(i=7; i<remote_payload_size; i++) |
247 | { | 247 | { |
248 | remote_payload[i]= | 248 | remote_payload[i]= |
249 | lcd_remote_framebuffer[remote_payload[4]>>3][i+remote_draw_x-7]; | 249 | FBREMOTEADDR(i+remote_draw_x-7, remote_payload[4]>>3); |
250 | } | 250 | } |
251 | } | 251 | } |
252 | 252 | ||
diff --git a/firmware/target/arm/tms320dm320/sansa-connect/lcd-sansaconnect.c b/firmware/target/arm/tms320dm320/sansa-connect/lcd-sansaconnect.c index 403ce182be..27eb0b407a 100644 --- a/firmware/target/arm/tms320dm320/sansa-connect/lcd-sansaconnect.c +++ b/firmware/target/arm/tms320dm320/sansa-connect/lcd-sansaconnect.c | |||
@@ -167,7 +167,7 @@ static void dma_lcd_copy_buffer_rect(int x, int y, int width, int height) | |||
167 | 167 | ||
168 | /* Set source and destination addresses */ | 168 | /* Set source and destination addresses */ |
169 | dst = (char*)(FRAME + LCD_WIDTH*y + x); | 169 | dst = (char*)(FRAME + LCD_WIDTH*y + x); |
170 | src = (char*)(&lcd_framebuffer[y][x]); | 170 | src = (char*)(FBADDR(x,y)); |
171 | 171 | ||
172 | /* Flush cache to memory */ | 172 | /* Flush cache to memory */ |
173 | commit_dcache(); | 173 | commit_dcache(); |
diff --git a/firmware/target/coldfire/iaudio/lcd-remote-iaudio.c b/firmware/target/coldfire/iaudio/lcd-remote-iaudio.c index 88fc6fc563..e84760e197 100644 --- a/firmware/target/coldfire/iaudio/lcd-remote-iaudio.c +++ b/firmware/target/coldfire/iaudio/lcd-remote-iaudio.c | |||
@@ -228,7 +228,7 @@ void lcd_remote_update(void) | |||
228 | have to update one page at a time. */ | 228 | have to update one page at a time. */ |
229 | lcd_remote_write_command(LCD_SET_PAGE | (y > 5 ? y + 2 : y)); | 229 | lcd_remote_write_command(LCD_SET_PAGE | (y > 5 ? y + 2 : y)); |
230 | lcd_remote_write_command_ex(LCD_SET_COLUMN | 0, 0); | 230 | lcd_remote_write_command_ex(LCD_SET_COLUMN | 0, 0); |
231 | lcd_remote_write_data(lcd_remote_framebuffer[y], LCD_REMOTE_WIDTH); | 231 | lcd_remote_write_data(FBREMOTEADDR(0, y), LCD_REMOTE_WIDTH); |
232 | } | 232 | } |
233 | } | 233 | } |
234 | } | 234 | } |
@@ -260,7 +260,7 @@ void lcd_remote_update_rect(int x, int y, int width, int height) | |||
260 | lcd_remote_write_command_ex(LCD_SET_COLUMN | ((x >> 4) & 0xf), | 260 | lcd_remote_write_command_ex(LCD_SET_COLUMN | ((x >> 4) & 0xf), |
261 | x & 0xf); | 261 | x & 0xf); |
262 | 262 | ||
263 | lcd_remote_write_data(&lcd_remote_framebuffer[y][x], width); | 263 | lcd_remote_write_data(FBREMOTEADDR(x,y), width); |
264 | } | 264 | } |
265 | } | 265 | } |
266 | } | 266 | } |
diff --git a/firmware/target/coldfire/iaudio/m3/lcd-m3.c b/firmware/target/coldfire/iaudio/m3/lcd-m3.c index 380789e7f7..1d61daf323 100644 --- a/firmware/target/coldfire/iaudio/m3/lcd-m3.c +++ b/firmware/target/coldfire/iaudio/m3/lcd-m3.c | |||
@@ -265,7 +265,7 @@ void lcd_update(void) | |||
265 | have to update one page at a time. */ | 265 | have to update one page at a time. */ |
266 | lcd_write_command(LCD_SET_PAGE | (y > 5 ? y + 2 : y)); | 266 | lcd_write_command(LCD_SET_PAGE | (y > 5 ? y + 2 : y)); |
267 | lcd_write_command_e(LCD_SET_COLUMN | 0, 0); | 267 | lcd_write_command_e(LCD_SET_COLUMN | 0, 0); |
268 | lcd_write_data(lcd_framebuffer[y], LCD_WIDTH); | 268 | lcd_write_data(FBADDR(0, y), LCD_WIDTH); |
269 | } | 269 | } |
270 | } | 270 | } |
271 | } | 271 | } |
@@ -295,7 +295,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
295 | lcd_write_command(LCD_SET_PAGE | ((y > 5 ? y + 2 : y) & 0xf)); | 295 | lcd_write_command(LCD_SET_PAGE | ((y > 5 ? y + 2 : y) & 0xf)); |
296 | lcd_write_command_e(LCD_SET_COLUMN | ((x >> 4) & 0xf), x & 0xf); | 296 | lcd_write_command_e(LCD_SET_COLUMN | ((x >> 4) & 0xf), x & 0xf); |
297 | 297 | ||
298 | lcd_write_data(&lcd_framebuffer[y][x], width); | 298 | lcd_write_data(FBADDR(x,y), width); |
299 | } | 299 | } |
300 | } | 300 | } |
301 | } | 301 | } |
diff --git a/firmware/target/coldfire/iaudio/m5/lcd-m5.c b/firmware/target/coldfire/iaudio/m5/lcd-m5.c index ae8f14bb25..8f022adf96 100644 --- a/firmware/target/coldfire/iaudio/m5/lcd-m5.c +++ b/firmware/target/coldfire/iaudio/m5/lcd-m5.c | |||
@@ -207,7 +207,7 @@ void lcd_update(void) | |||
207 | lcd_write_command_ex(LCD_CNTL_COLUMN, 0, -1); | 207 | lcd_write_command_ex(LCD_CNTL_COLUMN, 0, -1); |
208 | 208 | ||
209 | lcd_write_command(LCD_CNTL_DATA_WRITE); | 209 | lcd_write_command(LCD_CNTL_DATA_WRITE); |
210 | lcd_write_data (lcd_framebuffer[y], LCD_WIDTH); | 210 | lcd_write_data (FBADDR(0, y), LCD_WIDTH); |
211 | } | 211 | } |
212 | } | 212 | } |
213 | 213 | ||
@@ -235,6 +235,6 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
235 | lcd_write_command_ex(LCD_CNTL_COLUMN, x, -1); | 235 | lcd_write_command_ex(LCD_CNTL_COLUMN, x, -1); |
236 | 236 | ||
237 | lcd_write_command(LCD_CNTL_DATA_WRITE); | 237 | lcd_write_command(LCD_CNTL_DATA_WRITE); |
238 | lcd_write_data (&lcd_framebuffer[y][x], width); | 238 | lcd_write_data (FBADDR(x,y), width); |
239 | } | 239 | } |
240 | } | 240 | } |
diff --git a/firmware/target/coldfire/iaudio/x5/lcd-x5.c b/firmware/target/coldfire/iaudio/x5/lcd-x5.c index 19b0725ce4..cf6e301c16 100644 --- a/firmware/target/coldfire/iaudio/x5/lcd-x5.c +++ b/firmware/target/coldfire/iaudio/x5/lcd-x5.c | |||
@@ -530,7 +530,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
530 | 530 | ||
531 | lcd_begin_write_gram(); | 531 | lcd_begin_write_gram(); |
532 | 532 | ||
533 | ptr = (unsigned short *)&lcd_framebuffer[y][x]; | 533 | ptr = (unsigned short *)FBADDR(x,y); |
534 | 534 | ||
535 | do | 535 | do |
536 | { | 536 | { |
diff --git a/firmware/target/coldfire/iriver/h100/lcd-h100.c b/firmware/target/coldfire/iriver/h100/lcd-h100.c index ae77affd18..b13751b9eb 100644 --- a/firmware/target/coldfire/iriver/h100/lcd-h100.c +++ b/firmware/target/coldfire/iriver/h100/lcd-h100.c | |||
@@ -216,7 +216,7 @@ void lcd_update(void) | |||
216 | lcd_write_command_ex(LCD_CNTL_COLUMN, 0, -1); | 216 | lcd_write_command_ex(LCD_CNTL_COLUMN, 0, -1); |
217 | 217 | ||
218 | lcd_write_command(LCD_CNTL_DATA_WRITE); | 218 | lcd_write_command(LCD_CNTL_DATA_WRITE); |
219 | lcd_write_data (lcd_framebuffer[y], LCD_WIDTH); | 219 | lcd_write_data (FBADDR(0, y), LCD_WIDTH); |
220 | } | 220 | } |
221 | } | 221 | } |
222 | 222 | ||
@@ -244,6 +244,6 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
244 | lcd_write_command_ex(LCD_CNTL_COLUMN, x, -1); | 244 | lcd_write_command_ex(LCD_CNTL_COLUMN, x, -1); |
245 | 245 | ||
246 | lcd_write_command(LCD_CNTL_DATA_WRITE); | 246 | lcd_write_command(LCD_CNTL_DATA_WRITE); |
247 | lcd_write_data (&lcd_framebuffer[y][x], width); | 247 | lcd_write_data (FBADDR(x,y), width); |
248 | } | 248 | } |
249 | } | 249 | } |
diff --git a/firmware/target/coldfire/iriver/h300/lcd-h300.c b/firmware/target/coldfire/iriver/h300/lcd-h300.c index 6c21a7e260..191c769c97 100644 --- a/firmware/target/coldfire/iriver/h300/lcd-h300.c +++ b/firmware/target/coldfire/iriver/h300/lcd-h300.c | |||
@@ -447,13 +447,13 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
447 | if (width == LCD_WIDTH) | 447 | if (width == LCD_WIDTH) |
448 | { | 448 | { |
449 | dma_count = 1; | 449 | dma_count = 1; |
450 | SAR3 = (unsigned long)lcd_framebuffer[y]; | 450 | SAR3 = (unsigned long)FBADDR(0, y); |
451 | BCR3 = (LCD_WIDTH*sizeof(fb_data)) * height; | 451 | BCR3 = (LCD_WIDTH*sizeof(fb_data)) * height; |
452 | } | 452 | } |
453 | else | 453 | else |
454 | { | 454 | { |
455 | dma_count = height; | 455 | dma_count = height; |
456 | SAR3 = dma_addr = (unsigned long)&lcd_framebuffer[y][x]; | 456 | SAR3 = dma_addr = (unsigned long)FBADDR(x,y); |
457 | BCR3 = dma_len = width * sizeof(fb_data); | 457 | BCR3 = dma_len = width * sizeof(fb_data); |
458 | } | 458 | } |
459 | DCR3 = DMA_INT | DMA_AA | DMA_BWC(1) | 459 | DCR3 = DMA_INT | DMA_AA | DMA_BWC(1) |
diff --git a/firmware/target/coldfire/iriver/lcd-remote-iriver.c b/firmware/target/coldfire/iriver/lcd-remote-iriver.c index 0ff041f033..03c0e40dbe 100644 --- a/firmware/target/coldfire/iriver/lcd-remote-iriver.c +++ b/firmware/target/coldfire/iriver/lcd-remote-iriver.c | |||
@@ -312,7 +312,7 @@ void lcd_remote_update(void) | |||
312 | lcd_remote_write_command(LCD_REMOTE_CNTL_SET_PAGE_ADDRESS | y); | 312 | lcd_remote_write_command(LCD_REMOTE_CNTL_SET_PAGE_ADDRESS | y); |
313 | lcd_remote_write_command(LCD_REMOTE_CNTL_HIGHCOL | ((xoffset >> 4) & 0xf)); | 313 | lcd_remote_write_command(LCD_REMOTE_CNTL_HIGHCOL | ((xoffset >> 4) & 0xf)); |
314 | lcd_remote_write_command(LCD_REMOTE_CNTL_LOWCOL | (xoffset & 0xf)); | 314 | lcd_remote_write_command(LCD_REMOTE_CNTL_LOWCOL | (xoffset & 0xf)); |
315 | lcd_remote_write_data(lcd_remote_framebuffer[y], LCD_REMOTE_WIDTH); | 315 | lcd_remote_write_data(FBREMOTEADDR(0, y), LCD_REMOTE_WIDTH); |
316 | } | 316 | } |
317 | } | 317 | } |
318 | 318 | ||
@@ -346,6 +346,6 @@ void lcd_remote_update_rect(int x, int y, int width, int height) | |||
346 | lcd_remote_write_command(LCD_REMOTE_CNTL_SET_PAGE_ADDRESS | y); | 346 | lcd_remote_write_command(LCD_REMOTE_CNTL_SET_PAGE_ADDRESS | y); |
347 | lcd_remote_write_command(LCD_REMOTE_CNTL_HIGHCOL | (((x+xoffset) >> 4) & 0xf)); | 347 | lcd_remote_write_command(LCD_REMOTE_CNTL_HIGHCOL | (((x+xoffset) >> 4) & 0xf)); |
348 | lcd_remote_write_command(LCD_REMOTE_CNTL_LOWCOL | ((x+xoffset) & 0xf)); | 348 | lcd_remote_write_command(LCD_REMOTE_CNTL_LOWCOL | ((x+xoffset) & 0xf)); |
349 | lcd_remote_write_data(&lcd_remote_framebuffer[y][x], width); | 349 | lcd_remote_write_data(FBREMOTEADDR(x,y), width); |
350 | } | 350 | } |
351 | } | 351 | } |
diff --git a/firmware/target/coldfire/mpio/hd200/lcd-hd200.c b/firmware/target/coldfire/mpio/hd200/lcd-hd200.c index 879352f7b4..3c00959745 100644 --- a/firmware/target/coldfire/mpio/hd200/lcd-hd200.c +++ b/firmware/target/coldfire/mpio/hd200/lcd-hd200.c | |||
@@ -187,7 +187,7 @@ void DMA3(void) | |||
187 | lcd_write_command_e(LCD_SET_COLUMN | ((column >> 4) & 0xf), | 187 | lcd_write_command_e(LCD_SET_COLUMN | ((column >> 4) & 0xf), |
188 | column & 0x0f); | 188 | column & 0x0f); |
189 | 189 | ||
190 | SAR3 = (unsigned long)&lcd_framebuffer[page][column]; | 190 | SAR3 = (unsigned long)FBADDR(column,page); |
191 | BCR3 = dma_len; | 191 | BCR3 = dma_len; |
192 | DCR3 = DMA_INT | DMA_AA | DMA_BWC(1) | 192 | DCR3 = DMA_INT | DMA_AA | DMA_BWC(1) |
193 | | DMA_SINC | DMA_SSIZE(DMA_SIZE_LINE) | 193 | | DMA_SINC | DMA_SSIZE(DMA_SIZE_LINE) |
@@ -261,7 +261,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
261 | dma_count = ymax - y + 1; | 261 | dma_count = ymax - y + 1; |
262 | 262 | ||
263 | /* Initialize DMA transfer */ | 263 | /* Initialize DMA transfer */ |
264 | SAR3 = (unsigned long)&lcd_framebuffer[page][column]; | 264 | SAR3 = (unsigned long)FBADDR(column,page); |
265 | BCR3 = dma_len; | 265 | BCR3 = dma_len; |
266 | DCR3 = DMA_INT | DMA_AA | DMA_BWC(1) | 266 | DCR3 = DMA_INT | DMA_AA | DMA_BWC(1) |
267 | | DMA_SINC | DMA_SSIZE(DMA_SIZE_LINE) | 267 | | DMA_SINC | DMA_SSIZE(DMA_SIZE_LINE) |
diff --git a/firmware/target/coldfire/mpio/hd300/lcd-hd300.c b/firmware/target/coldfire/mpio/hd300/lcd-hd300.c index 31087a5d43..509ed4cd53 100644 --- a/firmware/target/coldfire/mpio/hd300/lcd-hd300.c +++ b/firmware/target/coldfire/mpio/hd300/lcd-hd300.c | |||
@@ -211,7 +211,7 @@ void lcd_update(void) | |||
211 | lcd_write_command(LCD_CNTL_DATA_WRITE); | 211 | lcd_write_command(LCD_CNTL_DATA_WRITE); |
212 | 212 | ||
213 | /* Copy display bitmap to hardware */ | 213 | /* Copy display bitmap to hardware */ |
214 | lcd_write_data (&lcd_framebuffer[0][0], LCD_WIDTH*LCD_FBHEIGHT); | 214 | lcd_write_data (FBADDR(0,0), LCD_WIDTH*LCD_FBHEIGHT); |
215 | } | 215 | } |
216 | 216 | ||
217 | /* Update a fraction of the display. */ | 217 | /* Update a fraction of the display. */ |
@@ -238,6 +238,6 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
238 | lcd_write_command_ex(LCD_CNTL_COLUMN, x, -1); | 238 | lcd_write_command_ex(LCD_CNTL_COLUMN, x, -1); |
239 | 239 | ||
240 | lcd_write_command(LCD_CNTL_DATA_WRITE); | 240 | lcd_write_command(LCD_CNTL_DATA_WRITE); |
241 | lcd_write_data (&lcd_framebuffer[y][x], width); | 241 | lcd_write_data (FBADDR(x,y), width); |
242 | } | 242 | } |
243 | } | 243 | } |
diff --git a/firmware/target/hosted/android/lcd-android.c b/firmware/target/hosted/android/lcd-android.c index abde72155d..c9a3fd6edf 100644 --- a/firmware/target/hosted/android/lcd-android.c +++ b/firmware/target/hosted/android/lcd-android.c | |||
@@ -75,7 +75,7 @@ void connect_with_java(JNIEnv* env, jobject fb_instance) | |||
75 | 75 | ||
76 | /* Create native_buffer */ | 76 | /* Create native_buffer */ |
77 | jobject buffer = (*env)->NewDirectByteBuffer(env, lcd_framebuffer, | 77 | jobject buffer = (*env)->NewDirectByteBuffer(env, lcd_framebuffer, |
78 | (jlong) sizeof(lcd_framebuffer)); | 78 | (jlong) FRAMEBUFFER_SIZE); |
79 | 79 | ||
80 | /* we need to setup parts for the java object every time */ | 80 | /* we need to setup parts for the java object every time */ |
81 | (*env)->CallVoidMethod(env, fb_instance, java_lcd_init, | 81 | (*env)->CallVoidMethod(env, fb_instance, java_lcd_init, |
@@ -206,10 +206,10 @@ void lcd_blit_yuv(unsigned char * const src[3], | |||
206 | linecounter = height >> 1; | 206 | linecounter = height >> 1; |
207 | 207 | ||
208 | #if LCD_WIDTH >= LCD_HEIGHT | 208 | #if LCD_WIDTH >= LCD_HEIGHT |
209 | dst = &lcd_framebuffer[y][x]; | 209 | dst = FBADDR(x,y); |
210 | row_end = dst + width; | 210 | row_end = dst + width; |
211 | #else | 211 | #else |
212 | dst = &lcd_framebuffer[x][LCD_WIDTH - y - 1]; | 212 | dst = FBADDR(LCD_WIDTH - y - 1,x); |
213 | row_end = dst + LCD_WIDTH * width; | 213 | row_end = dst + LCD_WIDTH * width; |
214 | #endif | 214 | #endif |
215 | 215 | ||
diff --git a/firmware/target/hosted/sdl/lcd-bitmap.c b/firmware/target/hosted/sdl/lcd-bitmap.c index 4ee0bbef5c..7e9bc297ef 100644 --- a/firmware/target/hosted/sdl/lcd-bitmap.c +++ b/firmware/target/hosted/sdl/lcd-bitmap.c | |||
@@ -92,29 +92,25 @@ static unsigned long get_lcd_pixel(int x, int y) | |||
92 | { | 92 | { |
93 | #if LCD_DEPTH == 1 | 93 | #if LCD_DEPTH == 1 |
94 | #ifdef HAVE_NEGATIVE_LCD | 94 | #ifdef HAVE_NEGATIVE_LCD |
95 | return (lcd_framebuffer[y/8][x] & (1 << (y & 7))) ? (NUM_SHADES-1) : 0; | 95 | return (*FBADDR(x, y/8) & (1 << (y & 7))) ? (NUM_SHADES-1) : 0; |
96 | #else | 96 | #else |
97 | return (lcd_framebuffer[y/8][x] & (1 << (y & 7))) ? 0 : (NUM_SHADES-1); | 97 | return (*FBADDR(x, y/8) & (1 << (y & 7))) ? 0 : (NUM_SHADES-1); |
98 | #endif | 98 | #endif |
99 | #elif LCD_DEPTH == 2 | 99 | #elif LCD_DEPTH == 2 |
100 | #if LCD_PIXELFORMAT == HORIZONTAL_PACKING | 100 | #if LCD_PIXELFORMAT == HORIZONTAL_PACKING |
101 | return colorindex[(lcd_framebuffer[y][x/4] >> (2 * (~x & 3))) & 3]; | 101 | return colorindex[(*FBADDR(x/4, y) >> (2 * (~x & 3))) & 3]; |
102 | #elif LCD_PIXELFORMAT == VERTICAL_PACKING | 102 | #elif LCD_PIXELFORMAT == VERTICAL_PACKING |
103 | return colorindex[(lcd_framebuffer[y/4][x] >> (2 * (y & 3))) & 3]; | 103 | return colorindex[(*FBADDR(x, y/4) >> (2 * (y & 3))) & 3]; |
104 | #elif LCD_PIXELFORMAT == VERTICAL_INTERLEAVED | 104 | #elif LCD_PIXELFORMAT == VERTICAL_INTERLEAVED |
105 | unsigned bits = (lcd_framebuffer[y/8][x] >> (y & 7)) & 0x0101; | 105 | unsigned bits = (*FBADDR(x, y/8) >> (y & 7)) & 0x0101; |
106 | return colorindex[(bits | (bits >> 7)) & 3]; | 106 | return colorindex[(bits | (bits >> 7)) & 3]; |
107 | #endif | 107 | #endif |
108 | #elif LCD_DEPTH == 16 | 108 | #elif LCD_DEPTH == 16 |
109 | #if LCD_PIXELFORMAT == RGB565SWAPPED | 109 | #if LCD_PIXELFORMAT == RGB565SWAPPED |
110 | unsigned bits = lcd_framebuffer[y][x]; | 110 | unsigned bits = *FBADDR(x, y); |
111 | return (bits >> 8) | (bits << 8); | 111 | return (bits >> 8) | (bits << 8); |
112 | #else | 112 | #else |
113 | #if defined(LCD_STRIDEFORMAT) && LCD_STRIDEFORMAT == VERTICAL_STRIDE | 113 | return *FBADDR(x, y); |
114 | return *(&lcd_framebuffer[0][0]+LCD_HEIGHT*x+y); | ||
115 | #else | ||
116 | return lcd_framebuffer[y][x]; | ||
117 | #endif | ||
118 | #endif | 114 | #endif |
119 | #endif | 115 | #endif |
120 | } | 116 | } |
diff --git a/firmware/target/hosted/sdl/lcd-remote-bitmap.c b/firmware/target/hosted/sdl/lcd-remote-bitmap.c index 86d45ef446..5f08b4440b 100644 --- a/firmware/target/hosted/sdl/lcd-remote-bitmap.c +++ b/firmware/target/hosted/sdl/lcd-remote-bitmap.c | |||
@@ -50,10 +50,10 @@ static const unsigned char colorindex[4] = {128, 85, 43, 0}; | |||
50 | static unsigned long get_lcd_remote_pixel(int x, int y) | 50 | static unsigned long get_lcd_remote_pixel(int x, int y) |
51 | { | 51 | { |
52 | #if LCD_REMOTE_DEPTH == 1 | 52 | #if LCD_REMOTE_DEPTH == 1 |
53 | return lcd_remote_framebuffer[y/8][x] & (1 << (y & 7)) ? 0 : (NUM_SHADES-1); | 53 | return *FBREMOTEADDR(x, y/8) & (1 << (y & 7)) ? 0 : (NUM_SHADES-1); |
54 | #elif LCD_REMOTE_DEPTH == 2 | 54 | #elif LCD_REMOTE_DEPTH == 2 |
55 | #if LCD_REMOTE_PIXELFORMAT == VERTICAL_INTERLEAVED | 55 | #if LCD_REMOTE_PIXELFORMAT == VERTICAL_INTERLEAVED |
56 | unsigned bits = (lcd_remote_framebuffer[y/8][x] >> (y & 7)) & 0x0101; | 56 | unsigned bits = (*FBREMOTEADDR(x, y/8) >> (y & 7)) & 0x0101; |
57 | return colorindex[(bits | (bits >> 7)) & 3]; | 57 | return colorindex[(bits | (bits >> 7)) & 3]; |
58 | #endif | 58 | #endif |
59 | #endif | 59 | #endif |
diff --git a/firmware/target/hosted/ypr0/lcd-ypr0.c b/firmware/target/hosted/ypr0/lcd-ypr0.c index 083a9fbe28..40528c298a 100644 --- a/firmware/target/hosted/ypr0/lcd-ypr0.c +++ b/firmware/target/hosted/ypr0/lcd-ypr0.c | |||
@@ -39,7 +39,7 @@ fb_data *dev_fb = 0; | |||
39 | void lcd_shutdown(void) | 39 | void lcd_shutdown(void) |
40 | { | 40 | { |
41 | printf("FB closed."); | 41 | printf("FB closed."); |
42 | munmap(dev_fb, sizeof(lcd_framebuffer)); | 42 | munmap(dev_fb, FRAMEBUFFER_SIZE); |
43 | close(dev_fd); | 43 | close(dev_fd); |
44 | } | 44 | } |
45 | 45 | ||
@@ -80,7 +80,7 @@ void lcd_init_device(void) | |||
80 | 80 | ||
81 | /* Figure out the size of the screen in bytes */ | 81 | /* Figure out the size of the screen in bytes */ |
82 | screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8; | 82 | screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8; |
83 | if (screensize != sizeof(lcd_framebuffer)) | 83 | if (screensize != FRAMEBUFFER_SIZE) |
84 | { | 84 | { |
85 | exit(4); | 85 | exit(4); |
86 | perror("Display and framebuffer mismatch!\n"); | 86 | perror("Display and framebuffer mismatch!\n"); |
diff --git a/firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c b/firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c index e74e227e47..c644b9f477 100644 --- a/firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c +++ b/firmware/target/mips/ingenic_jz47xx/lcd-jz4740.c | |||
@@ -101,7 +101,7 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
101 | dma_enable(); | 101 | dma_enable(); |
102 | 102 | ||
103 | REG_DMAC_DCCSR(DMA_LCD_CHANNEL) = DMAC_DCCSR_NDES; | 103 | REG_DMAC_DCCSR(DMA_LCD_CHANNEL) = DMAC_DCCSR_NDES; |
104 | REG_DMAC_DSAR(DMA_LCD_CHANNEL) = PHYSADDR((unsigned long)&lcd_framebuffer[y][x]); | 104 | REG_DMAC_DSAR(DMA_LCD_CHANNEL) = PHYSADDR((unsigned long)FBADDR(x,y)); |
105 | REG_DMAC_DRSR(DMA_LCD_CHANNEL) = DMAC_DRSR_RS_SLCD; | 105 | REG_DMAC_DRSR(DMA_LCD_CHANNEL) = DMAC_DRSR_RS_SLCD; |
106 | REG_DMAC_DTAR(DMA_LCD_CHANNEL) = PHYSADDR(SLCD_FIFO); | 106 | REG_DMAC_DTAR(DMA_LCD_CHANNEL) = PHYSADDR(SLCD_FIFO); |
107 | REG_DMAC_DTCR(DMA_LCD_CHANNEL) = (width * height) >> 3; | 107 | REG_DMAC_DTCR(DMA_LCD_CHANNEL) = (width * height) >> 3; |
@@ -195,7 +195,7 @@ void lcd_blit_yuv(unsigned char * const src[3], | |||
195 | IPU_SET_Y_ADDR(PHYSADDR((unsigned long)yuv_src[0])); | 195 | IPU_SET_Y_ADDR(PHYSADDR((unsigned long)yuv_src[0])); |
196 | IPU_SET_U_ADDR(PHYSADDR((unsigned long)yuv_src[1])); | 196 | IPU_SET_U_ADDR(PHYSADDR((unsigned long)yuv_src[1])); |
197 | IPU_SET_V_ADDR(PHYSADDR((unsigned long)yuv_src[2])); | 197 | IPU_SET_V_ADDR(PHYSADDR((unsigned long)yuv_src[2])); |
198 | IPU_SET_OUT_ADDR(PHYSADDR((unsigned long)&lcd_framebuffer[x][y])); | 198 | IPU_SET_OUT_ADDR(PHYSADDR((unsigned long)FBADDR(y,x))); |
199 | 199 | ||
200 | IPU_SET_OUT_FM(height, width); | 200 | IPU_SET_OUT_FM(height, width); |
201 | IPU_SET_OUT_STRIDE(height); | 201 | IPU_SET_OUT_STRIDE(height); |
diff --git a/firmware/target/sh/archos/lcd-archos-bitmap.c b/firmware/target/sh/archos/lcd-archos-bitmap.c index 8d8a98432d..f23289053d 100644 --- a/firmware/target/sh/archos/lcd-archos-bitmap.c +++ b/firmware/target/sh/archos/lcd-archos-bitmap.c | |||
@@ -192,7 +192,7 @@ void lcd_update(void) | |||
192 | lcd_write_command (LCD_CNTL_HIGHCOL | ((xoffset >> 4) & 0xf)); | 192 | lcd_write_command (LCD_CNTL_HIGHCOL | ((xoffset >> 4) & 0xf)); |
193 | lcd_write_command (LCD_CNTL_LOWCOL | (xoffset & 0xf)); | 193 | lcd_write_command (LCD_CNTL_LOWCOL | (xoffset & 0xf)); |
194 | 194 | ||
195 | lcd_write_data (lcd_framebuffer[y], LCD_WIDTH); | 195 | lcd_write_data (FBADDR(0, y), LCD_WIDTH); |
196 | } | 196 | } |
197 | } | 197 | } |
198 | 198 | ||
@@ -219,6 +219,6 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
219 | lcd_write_command (LCD_CNTL_HIGHCOL | (((x+xoffset) >> 4) & 0xf)); | 219 | lcd_write_command (LCD_CNTL_HIGHCOL | (((x+xoffset) >> 4) & 0xf)); |
220 | lcd_write_command (LCD_CNTL_LOWCOL | ((x+xoffset) & 0xf)); | 220 | lcd_write_command (LCD_CNTL_LOWCOL | ((x+xoffset) & 0xf)); |
221 | 221 | ||
222 | lcd_write_data (&lcd_framebuffer[y][x], width); | 222 | lcd_write_data (FBADDR(x,y), width); |
223 | } | 223 | } |
224 | } | 224 | } |