diff options
Diffstat (limited to 'firmware/target/arm/lcd-as-memframe.S')
-rw-r--r-- | firmware/target/arm/lcd-as-memframe.S | 46 |
1 files changed, 39 insertions, 7 deletions
diff --git a/firmware/target/arm/lcd-as-memframe.S b/firmware/target/arm/lcd-as-memframe.S index 1cd27bdf28..519a8a1615 100644 --- a/firmware/target/arm/lcd-as-memframe.S +++ b/firmware/target/arm/lcd-as-memframe.S | |||
@@ -189,7 +189,10 @@ lcd_write_yuv420_lines: | |||
189 | @ | 189 | @ |
190 | orr r1, r1, r7, lsl #5 @ r4 |= (g << 5) | 190 | orr r1, r1, r7, lsl #5 @ r4 |= (g << 5) |
191 | orr r1, r1, r11, lsl #11 @ r4 = b | (r << 11) | 191 | orr r1, r1, r11, lsl #11 @ r4 = b | (r << 11) |
192 | #if LCD_WIDTH < 256 | 192 | |
193 | #if LCD_WIDTH >= LCD_HEIGHT | ||
194 | strh r1, [r0] @ | ||
195 | #elif LCD_WIDTH < 256 | ||
193 | strh r1, [r0], #LCD_WIDTH @ store pixel | 196 | strh r1, [r0], #LCD_WIDTH @ store pixel |
194 | #else | 197 | #else |
195 | strh r1, [r0] @ | 198 | strh r1, [r0] @ |
@@ -222,7 +225,12 @@ lcd_write_yuv420_lines: | |||
222 | @ | 225 | @ |
223 | orr r1, r1, r11, lsl #11 @ r1 = b | (r << 11) | 226 | orr r1, r1, r11, lsl #11 @ r1 = b | (r << 11) |
224 | orr r1, r1, r7, lsl #5 @ r1 |= (g << 5) | 227 | orr r1, r1, r7, lsl #5 @ r1 |= (g << 5) |
225 | #if LCD_WIDTH < 256 | 228 | |
229 | #if LCD_WIDTH >= LCD_HEIGHT | ||
230 | add r0, r0, #2*LCD_WIDTH @ | ||
231 | strh r1, [r0] @ store pixel | ||
232 | sub r0, r0, #2*LCD_WIDTH @ | ||
233 | #elif LCD_WIDTH < 256 | ||
226 | strh r1, [r0, #-LCD_WIDTH-2] @ store pixel | 234 | strh r1, [r0, #-LCD_WIDTH-2] @ store pixel |
227 | #else | 235 | #else |
228 | strh r1, [r0, #-2] @ | 236 | strh r1, [r0, #-2] @ |
@@ -256,7 +264,10 @@ lcd_write_yuv420_lines: | |||
256 | @ | 264 | @ |
257 | orr r1, r1, r7, lsl #5 @ r1 = b | (g << 5) | 265 | orr r1, r1, r7, lsl #5 @ r1 = b | (g << 5) |
258 | orr r1, r1, r11, lsl #11 @ r1 |= (r << 11) | 266 | orr r1, r1, r11, lsl #11 @ r1 |= (r << 11) |
259 | #if LCD_WIDTH < 256 | 267 | |
268 | #if LCD_WIDTH >= LCD_HEIGHT | ||
269 | strh r1, [r0, #2] | ||
270 | #elif LCD_WIDTH < 256 | ||
260 | strh r1, [r0, #LCD_WIDTH]! @ store pixel | 271 | strh r1, [r0, #LCD_WIDTH]! @ store pixel |
261 | #else | 272 | #else |
262 | strh r1, [r0] @ | 273 | strh r1, [r0] @ |
@@ -287,12 +298,19 @@ lcd_write_yuv420_lines: | |||
287 | @ | 298 | @ |
288 | orr r12, r1, r11, lsl #11 @ r12 = b | (r << 11) | 299 | orr r12, r1, r11, lsl #11 @ r12 = b | (r << 11) |
289 | orr r12, r12, r7, lsl #5 @ r12 |= (g << 5) | 300 | orr r12, r12, r7, lsl #5 @ r12 |= (g << 5) |
301 | |||
302 | #if LCD_WIDTH >= LCD_HEIGHT | ||
303 | add r0, r0, #2*LCD_WIDTH | ||
304 | strh r12, [r0, #2] | ||
305 | sub r0, r0, #(2*LCD_WIDTH)-4 | ||
306 | #else | ||
290 | strh r12, [r0, #-2] @ store pixel | 307 | strh r12, [r0, #-2] @ store pixel |
291 | #if LCD_WIDTH < 256 | 308 | #if LCD_WIDTH < 256 |
292 | add r0, r0, #2*LCD_WIDTH @ | 309 | add r0, r0, #2*LCD_WIDTH @ |
293 | #else | 310 | #else |
294 | add r0, r0, #LCD_WIDTH @ | 311 | add r0, r0, #LCD_WIDTH @ |
295 | #endif | 312 | #endif |
313 | #endif | ||
296 | @ | 314 | @ |
297 | subs r2, r2, #2 @ subtract block from width | 315 | subs r2, r2, #2 @ subtract block from width |
298 | bgt 10b @ loop line @ | 316 | bgt 10b @ loop line @ |
@@ -423,7 +441,9 @@ lcd_write_yuv420_lines_odither: | |||
423 | orr r11, r11, r7, lsr #4 @ ((g & 0x7e00) >> 4) | | 441 | orr r11, r11, r7, lsr #4 @ ((g & 0x7e00) >> 4) | |
424 | orr r1, r11, r1, lsr #10 @ (b >> 10) | 442 | orr r1, r11, r1, lsr #10 @ (b >> 10) |
425 | @ | 443 | @ |
426 | #if LCD_WIDTH < 256 | 444 | #if LCD_WIDTH >= LCD_HEIGHT |
445 | strh r1, [r0] @ | ||
446 | #elif LCD_WIDTH < 256 | ||
427 | strh r1, [r0], #LCD_WIDTH @ store pixel | 447 | strh r1, [r0], #LCD_WIDTH @ store pixel |
428 | #else | 448 | #else |
429 | strh r1, [r0] @ | 449 | strh r1, [r0] @ |
@@ -473,7 +493,11 @@ lcd_write_yuv420_lines_odither: | |||
473 | orr r11, r11, r7, lsr #4 @ ((g & 0x7e00) >> 4) | | 493 | orr r11, r11, r7, lsr #4 @ ((g & 0x7e00) >> 4) | |
474 | orr r1, r11, r1, lsr #10 @ (b >> 10) | 494 | orr r1, r11, r1, lsr #10 @ (b >> 10) |
475 | @ | 495 | @ |
476 | #if LCD_WIDTH < 256 | 496 | #if LCD_WIDTH >= LCD_HEIGHT |
497 | add r0, r0, #2*LCD_WIDTH @ | ||
498 | strh r1, [r0] @ store pixel | ||
499 | sub r0, r0, #2*LCD_WIDTH @ | ||
500 | #elif LCD_WIDTH < 256 | ||
477 | strh r1, [r0, #-LCD_WIDTH-2] @ store pixel | 501 | strh r1, [r0, #-LCD_WIDTH-2] @ store pixel |
478 | #else | 502 | #else |
479 | strh r1, [r0, #-2] @ store pixel | 503 | strh r1, [r0, #-2] @ store pixel |
@@ -526,12 +550,14 @@ lcd_write_yuv420_lines_odither: | |||
526 | orr r11, r11, r7, lsr #4 @ ((g & 0x7e00) >> 4) | | 550 | orr r11, r11, r7, lsr #4 @ ((g & 0x7e00) >> 4) | |
527 | orr r1, r11, r1, lsr #10 @ (b >> 10) | 551 | orr r1, r11, r1, lsr #10 @ (b >> 10) |
528 | @ | 552 | @ |
529 | #if LCD_WIDTH < 256 | 553 | #if LCD_WIDTH >= LCD_HEIGHT |
554 | strh r1, [r0, #2] | ||
555 | #elif LCD_WIDTH < 256 | ||
530 | strh r1, [r0, #LCD_WIDTH]! @ store pixel | 556 | strh r1, [r0, #LCD_WIDTH]! @ store pixel |
531 | #else | 557 | #else |
532 | strh r1, [r0] @ | 558 | strh r1, [r0] @ |
533 | #endif | 559 | #endif |
534 | @ | 560 | |
535 | sub r7, r12, #16 @ r7 = Y = (Y' - 16)*149 | 561 | sub r7, r12, #16 @ r7 = Y = (Y' - 16)*149 |
536 | add r12, r7, r7, asl #2 @ | 562 | add r12, r7, r7, asl #2 @ |
537 | add r12, r12, r12, asl #4 @ | 563 | add r12, r12, r12, asl #4 @ |
@@ -574,12 +600,18 @@ lcd_write_yuv420_lines_odither: | |||
574 | orr r11, r11, r7, lsr #4 @ ((g & 0x7e00) >> 4) | | 600 | orr r11, r11, r7, lsr #4 @ ((g & 0x7e00) >> 4) | |
575 | orr r1, r11, r1, lsr #10 @ (b >> 10) | 601 | orr r1, r11, r1, lsr #10 @ (b >> 10) |
576 | @ | 602 | @ |
603 | #if LCD_WIDTH >= LCD_HEIGHT | ||
604 | add r0, r0, #2*LCD_WIDTH | ||
605 | strh r1, [r0, #2] @ store pixel | ||
606 | sub r0, r0, #(2*LCD_WIDTH-4) | ||
607 | #else | ||
577 | strh r1, [r0, #-2] @ store pixel | 608 | strh r1, [r0, #-2] @ store pixel |
578 | #if LCD_WIDTH < 256 | 609 | #if LCD_WIDTH < 256 |
579 | add r0, r0, #2*LCD_WIDTH @ | 610 | add r0, r0, #2*LCD_WIDTH @ |
580 | #else | 611 | #else |
581 | add r0, r0, #LCD_WIDTH @ | 612 | add r0, r0, #LCD_WIDTH @ |
582 | #endif | 613 | #endif |
614 | #endif | ||
583 | @ | 615 | @ |
584 | subs r2, r2, #2 @ subtract block from width | 616 | subs r2, r2, #2 @ subtract block from width |
585 | bgt 10b @ loop line @ | 617 | bgt 10b @ loop line @ |