summaryrefslogtreecommitdiff
path: root/firmware/target/arm/ipod/video/lcd-as-video.S
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/ipod/video/lcd-as-video.S')
-rw-r--r--firmware/target/arm/ipod/video/lcd-as-video.S42
1 files changed, 41 insertions, 1 deletions
diff --git a/firmware/target/arm/ipod/video/lcd-as-video.S b/firmware/target/arm/ipod/video/lcd-as-video.S
index 938df3e86a..ffd2e0cf10 100644
--- a/firmware/target/arm/ipod/video/lcd-as-video.S
+++ b/firmware/target/arm/ipod/video/lcd-as-video.S
@@ -17,6 +17,47 @@
17 * 17 *
18 ****************************************************************************/ 18 ****************************************************************************/
19 19
20 .section .icode, "ax", %progbits
21
22 .align 2
23 .global lcd_write_data
24 .type lcd_write_data, %function
25 /* r0 = addr */
26lcd_write_data: /* r1 = pixel count */
27 stmfd sp!, {r4-r6}
28 mov r2, #0x30000000 /* LCD data port */
29
30 tst r0, #2 /* first pixel unaligned? */
31 ldrneh r3, [r0], #2
32 strneh r3, [r2]
33 subne r1, r1, #1
34
35 subs r1, r1, #16
36.loop16:
37 ldmgeia r0!, {r3-r6}
38 stmgeia r2, {r3-r6}
39 ldmgeia r0!, {r3-r6}
40 stmgeia r2, {r3-r6}
41 subges r1, r1, #16
42 bge .loop16
43
44 /* no need to correct the count, we're just checking bits from now */
45 tst r1, #8
46 ldmneia r0!, {r3-r6}
47 stmneia r2, {r3-r6}
48 tst r1, #4
49 ldmneia r0!, {r3-r4}
50 stmneia r2, {r3-r4}
51 tst r1, #2
52 ldrne r3, [r0], #4
53 strne r3, [r2]
54 tst r1, #1
55 ldrneh r3, [r0]
56 strneh r3, [r2]
57
58 ldmfd sp!, {r4-r6}
59 bx lr
60
20/**************************************************************************** 61/****************************************************************************
21 * void lcd_write_yuv_420_lines(unsigned char const * const src[3], 62 * void lcd_write_yuv_420_lines(unsigned char const * const src[3],
22 * int width, 63 * int width,
@@ -30,7 +71,6 @@
30 * |G| = |74 -24 -51| |Cb - 128| >> 8 71 * |G| = |74 -24 -51| |Cb - 128| >> 8
31 * |B| |74 128 0| |Cr - 128| >> 9 72 * |B| |74 128 0| |Cr - 128| >> 9
32 */ 73 */
33 .section .icode, "ax", %progbits
34 .align 2 74 .align 2
35 .global lcd_write_yuv420_lines 75 .global lcd_write_yuv420_lines
36 .type lcd_write_yuv420_lines, %function 76 .type lcd_write_yuv420_lines, %function