summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2009-10-03 12:20:35 +0000
committerJens Arnold <amiconn@rockbox.org>2009-10-03 12:20:35 +0000
commit840fb66bc9b0393e3178a205a82ea16606d7b386 (patch)
treee107838fa197bd5ff22392938b0448fbeea14f47
parente2c2642afac7be1eba665ca8fb2edd735cf9e23b (diff)
downloadrockbox-840fb66bc9b0393e3178a205a82ea16606d7b386.tar.gz
rockbox-840fb66bc9b0393e3178a205a82ea16606d7b386.zip
Bugfix: On vertically packed 2bpp LCDs a grey pixel block is only 4 pixels, so don't process twice as much data as intended. This was the cause for the mpegplayer crashes.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22885 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/arm/samsung/yh920/lcd-as-yh920.S55
1 files changed, 18 insertions, 37 deletions
diff --git a/firmware/target/arm/samsung/yh920/lcd-as-yh920.S b/firmware/target/arm/samsung/yh920/lcd-as-yh920.S
index 93beec4673..382c468097 100644
--- a/firmware/target/arm/samsung/yh920/lcd-as-yh920.S
+++ b/firmware/target/arm/samsung/yh920/lcd-as-yh920.S
@@ -103,66 +103,47 @@ lcd_mono_data:
103 * r2 - pixel block count 103 * r2 - pixel block count
104 * 104 *
105 * Register usage: 105 * Register usage:
106 * r3/r4 - current block of phases 106 * r3 - current block of phases
107 * r5/r6 - current block of values 107 * r4 - current block of values
108 * r7 - lcd data accumulator 108 * r5 - lcd data accumulator
109 * r8 - phase signs mask 109 * r12 - phase signs mask
110 * lr - lcd bridge address 110 * lr - lcd bridge address
111 */ 111 */
112 112
113lcd_grey_data: 113lcd_grey_data:
114 stmfd sp!, {r4-r7, lr} 114 stmfd sp!, {r4-r5, lr}
115 mov r12, #0x80 115 mov r12, #0x80
116 orr r12, r12, r12, lsl #8 116 orr r12, r12, r12, lsl #8
117 orr r12, r12, r12, lsl #16 117 orr r12, r12, r12, lsl #16
118 ldr lr, =LCD1_BASE 118 ldr lr, =LCD1_BASE
119 119
120.greyloop: 120.greyloop:
121 ldmia r1, {r3-r4} /* Fetch 8 pixel phases */ 121 ldr r3, [r1] /* Fetch 4 pixel phases */
122 ldmia r0!, {r5-r6} /* Fetch 8 pixel values */ 122 ldr r4, [r0], #4 /* Fetch 4 pixel values */
123 123
124 mov r7, #0 124 mov r5, #0
125 tst r3, #0x80 125 tst r3, #0x80
126 orreq r7, r7, #0xc0 126 orreq r5, r5, #0xc0
127 tst r3, #0x8000 127 tst r3, #0x8000
128 orreq r7, r7, #0x30 128 orreq r5, r5, #0x30
129 tst r3, #0x800000 129 tst r3, #0x800000
130 orreq r7, r7, #0x0c 130 orreq r5, r5, #0x0c
131 tst r3, #0x80000000 131 tst r3, #0x80000000
132 orreq r7, r7, #0x03 132 orreq r5, r5, #0x03
133 bic r3, r3, r12 133 bic r3, r3, r12
134 add r3, r3, r5 134 add r3, r3, r4
135 str r3, [r1], #4
135 136
1361: 1371:
137 ldr r5, [lr] 138 ldr r3, [lr]
138 tst r5, #LCD1_BUSY_MASK 139 tst r3, #LCD1_BUSY_MASK
139 bne 1b 140 bne 1b
140 141
141 str r7, [lr, #0x10] 142 str r5, [lr, #0x10]
142 mov r7, #0
143
144 tst r4, #0x80
145 orreq r7, r7, #0xc0
146 tst r4, #0x8000
147 orreq r7, r7, #0x30
148 tst r4, #0x800000
149 orreq r7, r7, #0x0c
150 tst r4, #0x80000000
151 orreq r7, r7, #0x03
152 bic r4, r4, r12
153 add r4, r4, r6
154
155 stmia r1!, {r3-r4}
156
1571:
158 ldr r5, [lr]
159 tst r5, #LCD1_BUSY_MASK
160 bne 1b
161 str r7, [lr, #0x10]
162 143
163 subs r2, r2, #1 144 subs r2, r2, #1
164 bne .greyloop 145 bne .greyloop
165 146
166 ldmfd sp!, {r4-r7, pc} 147 ldmfd sp!, {r4-r5, pc}
167 .size lcd_grey_data,.-lcd_grey_data 148 .size lcd_grey_data,.-lcd_grey_data
168 149