diff options
Diffstat (limited to 'firmware/target/arm')
-rw-r--r-- | firmware/target/arm/ipod/lcd-as-gray.S | 156 |
1 files changed, 78 insertions, 78 deletions
diff --git a/firmware/target/arm/ipod/lcd-as-gray.S b/firmware/target/arm/ipod/lcd-as-gray.S index 6a39f98e24..1009ee6ceb 100644 --- a/firmware/target/arm/ipod/lcd-as-gray.S +++ b/firmware/target/arm/ipod/lcd-as-gray.S | |||
@@ -32,40 +32,40 @@ | |||
32 | .type lcd_write_data,%function | 32 | .type lcd_write_data,%function |
33 | 33 | ||
34 | lcd_write_data: | 34 | lcd_write_data: |
35 | stmfd sp!, {r4, lr} | 35 | str lr, [sp, #-4]! |
36 | ldr r2, =LCD1_BASE | 36 | ldr lr, =LCD1_BASE |
37 | 37 | ||
38 | .loop: | 38 | .loop: |
39 | ldrb r3, [r0], #1 | 39 | ldrb r2, [r0], #1 |
40 | 40 | ||
41 | #ifdef IPOD_MINI2G | 41 | #ifdef IPOD_MINI2G |
42 | ldrb r4, [r0], #1 | 42 | ldrb r3, [r0], #1 |
43 | orr r3, r4, r3, lsl #8 | 43 | orr r2, r3, r2, lsl #8 |
44 | orr r3, r3, #0x760000 | 44 | orr r2, r2, #0x760000 |
45 | 1: | 45 | 1: |
46 | ldr r4, [r2] | 46 | ldr r3, [lr] |
47 | tst r4, #LCD1_BUSY_MASK | 47 | tst r3, #LCD1_BUSY_MASK |
48 | bne 1b | 48 | bne 1b |
49 | str r3, [r2, #0x08] | 49 | str r2, [lr, #0x08] |
50 | #else | 50 | #else |
51 | 1: | 51 | 1: |
52 | ldr r4, [r2] | 52 | ldr r3, [lr] |
53 | tst r4, #LCD1_BUSY_MASK | 53 | tst r3, #LCD1_BUSY_MASK |
54 | bne 1b | 54 | bne 1b |
55 | str r3, [r2, #0x10] | 55 | str r2, [lr, #0x10] |
56 | 56 | ||
57 | ldrb r3, [r0], #1 | 57 | ldrb r2, [r0], #1 |
58 | 1: | 58 | 1: |
59 | ldr r4, [r2] | 59 | ldr r3, [lr] |
60 | tst r4, #LCD1_BUSY_MASK | 60 | tst r3, #LCD1_BUSY_MASK |
61 | bne 1b | 61 | bne 1b |
62 | str r3, [r2, #0x10] | 62 | str r2, [lr, #0x10] |
63 | #endif | 63 | #endif |
64 | 64 | ||
65 | subs r1, r1, #1 | 65 | subs r1, r1, #1 |
66 | bne .loop | 66 | bne .loop |
67 | 67 | ||
68 | ldmfd sp!, {r4, pc} | 68 | ldr pc, [sp], #4 |
69 | .size lcd_write_data,.-lcd_write_data | 69 | .size lcd_write_data,.-lcd_write_data |
70 | 70 | ||
71 | 71 | ||
@@ -75,28 +75,28 @@ lcd_write_data: | |||
75 | .type lcd_write_data_shifted,%function | 75 | .type lcd_write_data_shifted,%function |
76 | 76 | ||
77 | lcd_write_data_shifted: | 77 | lcd_write_data_shifted: |
78 | stmfd sp!, {r4-r6, lr} | 78 | stmfd sp!, {r4, r5, lr} |
79 | ldr r2, =LCD1_BASE | 79 | ldr lr, =LCD1_BASE |
80 | mov r6, #0x760000 | 80 | mov r5, #0x760000 |
81 | ldrb r3, [r0], #1 | 81 | ldrb r2, [r0], #1 |
82 | 82 | ||
83 | .sloop: | 83 | .sloop: |
84 | ldrb r4, [r0], #1 | 84 | ldrb r3, [r0], #1 |
85 | orr r3, r4, r3, lsl #8 | 85 | orr r2, r3, r2, lsl #8 |
86 | ldrb r4, [r0], #1 | 86 | ldrb r3, [r0], #1 |
87 | orr r3, r4, r3, lsl #8 | 87 | orr r2, r3, r2, lsl #8 |
88 | mov r5, r3, lsl #12 | 88 | mov r4, r2, lsl #12 |
89 | orr r5, r6, r5, lsr #16 | 89 | orr r4, r5, r4, lsr #16 |
90 | 1: | 90 | 1: |
91 | ldr r4, [r2] | 91 | ldr r3, [lr] |
92 | tst r4, #LCD1_BUSY_MASK | 92 | tst r3, #LCD1_BUSY_MASK |
93 | bne 1b | 93 | bne 1b |
94 | str r5, [r2, #0x08] | 94 | str r4, [lr, #0x08] |
95 | 95 | ||
96 | subs r1, r1, #1 | 96 | subs r1, r1, #1 |
97 | bne .sloop | 97 | bne .sloop |
98 | 98 | ||
99 | ldmfd sp!, {r4-r6, pc} | 99 | ldmfd sp!, {r4, r5, pc} |
100 | .size lcd_write_data_shifted,.-lcd_write_data_shifted | 100 | .size lcd_write_data_shifted,.-lcd_write_data_shifted |
101 | 101 | ||
102 | #elif defined IPOD_MINI | 102 | #elif defined IPOD_MINI |
@@ -105,33 +105,33 @@ lcd_write_data_shifted: | |||
105 | .type lcd_write_data_shifted,%function | 105 | .type lcd_write_data_shifted,%function |
106 | 106 | ||
107 | lcd_write_data_shifted: | 107 | lcd_write_data_shifted: |
108 | stmfd sp!, {r4, r5, lr} | 108 | stmfd sp!, {r4, lr} |
109 | ldr r2, =LCD1_BASE | 109 | ldr lr, =LCD1_BASE |
110 | ldrb r3, [r0], #1 | 110 | ldrb r2, [r0], #1 |
111 | 111 | ||
112 | .sloop: | 112 | .sloop: |
113 | ldrb r4, [r0], #1 | 113 | ldrb r3, [r0], #1 |
114 | orr r3, r4, r3, lsl #8 | 114 | orr r2, r3, r2, lsl #8 |
115 | mov r5, r3, lsr #4 | 115 | mov r4, r2, lsr #4 |
116 | 1: | 116 | 1: |
117 | ldr r4, [r2] | 117 | ldr r3, [lr] |
118 | tst r4, #LCD1_BUSY_MASK | 118 | tst r3, #LCD1_BUSY_MASK |
119 | bne 1b | 119 | bne 1b |
120 | str r5, [r2, #0x10] | 120 | str r4, [lr, #0x10] |
121 | 121 | ||
122 | ldrb r4, [r0], #1 | 122 | ldrb r3, [r0], #1 |
123 | orr r3, r4, r3, lsl #8 | 123 | orr r2, r3, r2, lsl #8 |
124 | mov r5, r3, lsr #4 | 124 | mov r4, r2, lsr #4 |
125 | 1: | 125 | 1: |
126 | ldr r4, [r2] | 126 | ldr r3, [lr] |
127 | tst r4, #LCD1_BUSY_MASK | 127 | tst r3, #LCD1_BUSY_MASK |
128 | bne 1b | 128 | bne 1b |
129 | str r5, [r2, #0x10] | 129 | str r4, [lr, #0x10] |
130 | 130 | ||
131 | subs r1, r1, #1 | 131 | subs r1, r1, #1 |
132 | bne .sloop | 132 | bne .sloop |
133 | 133 | ||
134 | ldmfd sp!, {r4, r5, pc} | 134 | ldmfd sp!, {r4, pc} |
135 | .size lcd_write_data_shifted,.-lcd_write_data_shifted | 135 | .size lcd_write_data_shifted,.-lcd_write_data_shifted |
136 | 136 | ||
137 | #endif | 137 | #endif |
@@ -140,45 +140,45 @@ lcd_write_data_shifted: | |||
140 | .type lcd_mono_data,%function | 140 | .type lcd_mono_data,%function |
141 | 141 | ||
142 | lcd_mono_data: | 142 | lcd_mono_data: |
143 | stmfd sp!, {r4-r6, lr} | 143 | stmfd sp!, {r4, r5, lr} |
144 | ldr r2, =LCD1_BASE | 144 | ldr lr, =LCD1_BASE |
145 | adr r6, .dibits | 145 | adr r5, .dibits |
146 | 146 | ||
147 | .mloop: | 147 | .mloop: |
148 | ldrb r3, [r0], #1 | 148 | ldrb r2, [r0], #1 |
149 | mov r4, r3, lsr #4 | 149 | mov r3, r2, lsr #4 |
150 | ldrb r5, [r6, r4] | 150 | ldrb r4, [r5, r3] |
151 | 151 | ||
152 | #ifdef IPOD_MINI2G | 152 | #ifdef IPOD_MINI2G |
153 | and r4, r3, #0x0f | 153 | and r3, r2, #0x0f |
154 | ldrb r4, [r6, r4] | 154 | ldrb r3, [r5, r3] |
155 | orr r5, r4, r5, lsl #8 | 155 | orr r4, r3, r4, lsl #8 |
156 | orr r5, r5, #0x760000 | 156 | orr r4, r4, #0x760000 |
157 | 1: | 157 | 1: |
158 | ldr r4, [r2] | 158 | ldr r3, [lr] |
159 | tst r4, #LCD1_BUSY_MASK | 159 | tst r3, #LCD1_BUSY_MASK |
160 | bne 1b | 160 | bne 1b |
161 | str r5, [r2, #0x08] | 161 | str r4, [lr, #0x08] |
162 | #else | 162 | #else |
163 | 1: | 163 | 1: |
164 | ldr r4, [r2] | 164 | ldr r3, [lr] |
165 | tst r4, #LCD1_BUSY_MASK | 165 | tst r3, #LCD1_BUSY_MASK |
166 | bne 1b | 166 | bne 1b |
167 | str r5, [r2, #0x10] | 167 | str r4, [lr, #0x10] |
168 | 168 | ||
169 | and r4, r3, #0x0f | 169 | and r3, r2, #0x0f |
170 | ldrb r5, [r6, r4] | 170 | ldrb r4, [r5, r3] |
171 | 1: | 171 | 1: |
172 | ldr r4, [r2] | 172 | ldr r3, [lr] |
173 | tst r4, #LCD1_BUSY_MASK | 173 | tst r3, #LCD1_BUSY_MASK |
174 | bne 1b | 174 | bne 1b |
175 | str r5, [r2, #0x10] | 175 | str r4, [lr, #0x10] |
176 | #endif | 176 | #endif |
177 | 177 | ||
178 | subs r1, r1, #1 | 178 | subs r1, r1, #1 |
179 | bne .mloop | 179 | bne .mloop |
180 | 180 | ||
181 | ldmfd sp!, {r4-r6, pc} | 181 | ldmfd sp!, {r4, r5, pc} |
182 | 182 | ||
183 | .dibits: | 183 | .dibits: |
184 | .byte 0x00, 0x03, 0x0C, 0x0F, 0x30, 0x33, 0x3C, 0x3F | 184 | .byte 0x00, 0x03, 0x0C, 0x0F, 0x30, 0x33, 0x3C, 0x3F |
@@ -203,15 +203,15 @@ lcd_mono_data: | |||
203 | * r5/r6 - current block of values | 203 | * r5/r6 - current block of values |
204 | * r7 - lcd data accumulator | 204 | * r7 - lcd data accumulator |
205 | * r8 - phase signs mask | 205 | * r8 - phase signs mask |
206 | * r9 - lcd bridge address | 206 | * lr - lcd bridge address |
207 | */ | 207 | */ |
208 | 208 | ||
209 | lcd_grey_data: | 209 | lcd_grey_data: |
210 | stmfd sp!, {r4-r9, lr} | 210 | stmfd sp!, {r4-r8, lr} |
211 | mov r8, #0x80 | 211 | mov r8, #0x80 |
212 | orr r8, r8, r8, lsl #8 | 212 | orr r8, r8, r8, lsl #8 |
213 | orr r8, r8, r8, lsl #16 | 213 | orr r8, r8, r8, lsl #16 |
214 | ldr r9, =LCD1_BASE | 214 | ldr lr, =LCD1_BASE |
215 | 215 | ||
216 | .greyloop: | 216 | .greyloop: |
217 | ldmia r1, {r3-r4} /* Fetch 8 pixel phases */ | 217 | ldmia r1, {r3-r4} /* Fetch 8 pixel phases */ |
@@ -243,11 +243,11 @@ lcd_grey_data: | |||
243 | add r3, r3, r5 | 243 | add r3, r3, r5 |
244 | 244 | ||
245 | 1: | 245 | 1: |
246 | ldr r5, [r9] | 246 | ldr r5, [lr] |
247 | tst r5, #LCD1_BUSY_MASK | 247 | tst r5, #LCD1_BUSY_MASK |
248 | bne 1b | 248 | bne 1b |
249 | 249 | ||
250 | str r7, [r9, #0x10] | 250 | str r7, [lr, #0x10] |
251 | mov r7, #0 | 251 | mov r7, #0 |
252 | #endif | 252 | #endif |
253 | 253 | ||
@@ -265,18 +265,18 @@ lcd_grey_data: | |||
265 | stmia r1!, {r3-r4} | 265 | stmia r1!, {r3-r4} |
266 | 266 | ||
267 | 1: | 267 | 1: |
268 | ldr r5, [r9] | 268 | ldr r5, [lr] |
269 | tst r5, #LCD1_BUSY_MASK | 269 | tst r5, #LCD1_BUSY_MASK |
270 | bne 1b | 270 | bne 1b |
271 | #ifdef IPOD_MINI2G | 271 | #ifdef IPOD_MINI2G |
272 | str r7, [r9, #0x08] | 272 | str r7, [lr, #0x08] |
273 | #else | 273 | #else |
274 | str r7, [r9, #0x10] | 274 | str r7, [lr, #0x10] |
275 | #endif | 275 | #endif |
276 | 276 | ||
277 | subs r2, r2, #1 | 277 | subs r2, r2, #1 |
278 | bne .greyloop | 278 | bne .greyloop |
279 | 279 | ||
280 | ldmfd sp!, {r4-r9, pc} | 280 | ldmfd sp!, {r4-r8, pc} |
281 | .size lcd_grey_data,.-lcd_grey_data | 281 | .size lcd_grey_data,.-lcd_grey_data |
282 | 282 | ||