summaryrefslogtreecommitdiff
path: root/apps/plugins/rockboy/lcd.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/rockboy/lcd.c')
-rw-r--r--apps/plugins/rockboy/lcd.c119
1 files changed, 117 insertions, 2 deletions
diff --git a/apps/plugins/rockboy/lcd.c b/apps/plugins/rockboy/lcd.c
index 9a7ead798f..872311d0e6 100644
--- a/apps/plugins/rockboy/lcd.c
+++ b/apps/plugins/rockboy/lcd.c
@@ -41,7 +41,11 @@ struct scan scan IDATA_ATTR;
41#define WT (scan.wt) 41#define WT (scan.wt)
42#define WV (scan.wv) 42#define WV (scan.wv)
43 43
44byte patpix[4096][8][8]; 44byte patpix[4096][8][8]
45#if CONFIG_CPU == MCF5249 && !defined(SIMULATOR)
46 __attribute__ ((aligned(16))) /* to profit from burst mode */
47#endif
48 ;
45byte patdirty[1024]; 49byte patdirty[1024];
46byte anydirty; 50byte anydirty;
47 51
@@ -96,7 +100,7 @@ static byte *vdest;
96void updatepatpix(void) 100void updatepatpix(void)
97{ 101{
98 int i, j; 102 int i, j;
99#if CONFIG_CPU != SH7034 || defined(SIMULATOR) 103#if ((CONFIG_CPU != SH7034) && (CONFIG_CPU != MCF5249)) || defined(SIMULATOR)
100 int k, a, c; 104 int k, a, c;
101#endif 105#endif
102 byte *vram = lcd.vbank[0]; 106 byte *vram = lcd.vbank[0];
@@ -179,6 +183,70 @@ void updatepatpix(void)
179 : /* clobbers */ 183 : /* clobbers */
180 "r0", "r1", "r2" 184 "r0", "r1", "r2"
181 ); 185 );
186#elif CONFIG_CPU == MCF5249 && !defined(SIMULATOR)
187 asm volatile (
188 "move.b (%2),%%d2 \n"
189 "move.b (1,%2),%%d1 \n"
190
191 "addq.l #8,%1 \n"
192 "clr.l %%d0 \n"
193 "lsr.l #1,%%d1 \n"
194 "addx.l %%d0,%%d0 \n"
195 "lsr.l #1,%%d2 \n"
196 "addx.l %%d0,%%d0 \n"
197 "move.b %%d0,-(%1) \n"
198 "lsl.l #6,%%d0 \n"
199 "lsr.l #1,%%d1 \n"
200 "addx.l %%d0,%%d0 \n"
201 "lsr.l #1,%%d2 \n"
202 "addx.l %%d0,%%d0 \n"
203 "move.b %%d0,-(%1) \n"
204 "lsl.l #6,%%d0 \n"
205 "lsr.l #1,%%d1 \n"
206 "addx.l %%d0,%%d0 \n"
207 "lsr.l #1,%%d2 \n"
208 "addx.l %%d0,%%d0 \n"
209 "move.b %%d0,-(%1) \n"
210 "lsl.l #6,%%d0 \n"
211 "lsr.l #1,%%d1 \n"
212 "addx.l %%d0,%%d0 \n"
213 "lsr.l #1,%%d2 \n"
214 "addx.l %%d0,%%d0 \n"
215 "move.l %%d0,(%0) \n"
216 "move.b %%d0,-(%1) \n"
217 "clr.l %%d0 \n"
218 "lsr.l #1,%%d1 \n"
219 "addx.l %%d0,%%d0 \n"
220 "lsr.l #1,%%d2 \n"
221 "addx.l %%d0,%%d0 \n"
222 "move.b %%d0,-(%1) \n"
223 "lsl.l #6,%%d0 \n"
224 "lsr.l #1,%%d1 \n"
225 "addx.l %%d0,%%d0 \n"
226 "lsr.l #1,%%d2 \n"
227 "addx.l %%d0,%%d0 \n"
228 "move.b %%d0,-(%1) \n"
229 "lsl.l #6,%%d0 \n"
230 "lsr.l #1,%%d1 \n"
231 "addx.l %%d0,%%d0 \n"
232 "lsr.l #1,%%d2 \n"
233 "addx.l %%d0,%%d0 \n"
234 "move.b %%d0,-(%1) \n"
235 "lsl.l #6,%%d0 \n"
236 "lsr.l #1,%%d1 \n"
237 "addx.l %%d0,%%d0 \n"
238 "lsr.l #1,%%d2 \n"
239 "addx.l %%d0,%%d0 \n"
240 "move.l %%d0,(4,%0) \n"
241 "move.b %%d0,-(%1) \n"
242 : /* outputs */
243 : /* inputs */
244 /* %0 */ "a"(patpix[i+1024][j]),
245 /* %1 */ "a"(patpix[i][j]),
246 /* %2 */ "a"(&vram[(i<<4)|(j<<1)])
247 : /* clobbers */
248 "d0", "d1", "d2"
249 );
182#else 250#else
183 a = ((i<<4) | (j<<1)); 251 a = ((i<<4) | (j<<1));
184 for (k = 0; k < 8; k++) 252 for (k = 0; k < 8; k++)
@@ -270,6 +338,53 @@ void updatepatpix(void)
270 : /* clobbers */ 338 : /* clobbers */
271 "r0", "r1" 339 "r0", "r1"
272 ); 340 );
341#elif CONFIG_CPU == MCF5249 && !defined(SIMULATOR)
342 asm volatile (
343 "movem.l (%0),%%d0-%%d3 \n"
344 "move.l %%d0,%%d4 \n"
345 "move.l %%d1,%%d5 \n"
346 "movem.l %%d2-%%d5,(48,%1) \n"
347 "movem.l (16,%0),%%d0-%%d3 \n"
348 "move.l %%d0,%%d4 \n"
349 "move.l %%d1,%%d5 \n"
350 "movem.l %%d2-%%d5,(32,%1) \n"
351 "movem.l (32,%0),%%d0-%%d3 \n"
352 "move.l %%d0,%%d4 \n"
353 "move.l %%d1,%%d5 \n"
354 "movem.l %%d2-%%d5,(16,%1) \n"
355 "movem.l (48,%0),%%d0-%%d3 \n"
356 "move.l %%d0,%%d4 \n"
357 "move.l %%d1,%%d5 \n"
358 "movem.l %%d2-%%d5,(%1) \n"
359
360 "move.l %2,%%d0 \n"
361 "add.l %%d0,%0 \n"
362 "add.l %%d0,%1 \n"
363
364 "movem.l (%0),%%d0-%%d3 \n"
365 "move.l %%d0,%%d4 \n"
366 "move.l %%d1,%%d5 \n"
367 "movem.l %%d2-%%d5,(48,%1) \n"
368 "movem.l (16,%0),%%d0-%%d3 \n"
369 "move.l %%d0,%%d4 \n"
370 "move.l %%d1,%%d5 \n"
371 "movem.l %%d2-%%d5,(32,%1) \n"
372 "movem.l (32,%0),%%d0-%%d3 \n"
373 "move.l %%d0,%%d4 \n"
374 "move.l %%d1,%%d5 \n"
375 "movem.l %%d2-%%d5,(16,%1) \n"
376 "movem.l (48,%0),%%d0-%%d3 \n"
377 "move.l %%d0,%%d4 \n"
378 "move.l %%d1,%%d5 \n"
379 "movem.l %%d2-%%d5,(%1) \n"
380 : /* outputs */
381 : /* inputs */
382 /* %0 */ "a"(patpix[i][0]),
383 /* %1 */ "a"(patpix[i+2048][0]),
384 /* %2 */ "i"(1024*64)
385 : /* clobbers */
386 "d0", "d1", "d2", "d3", "d4", "d5"
387 );
273#else 388#else
274 for (j = 0; j < 8; j++) 389 for (j = 0; j < 8; j++)
275 { 390 {