mapper fixes for ncpu, debug is broken atm
[fceu.git] / drivers / gp2x / asmutils.s
1 @ vim:filetype=armasm
2
3 @ test
4 .global flushcache @ beginning_addr, end_addr, flags
5
6 flushcache:
7     swi #0x9f0002
8     mov pc, lr
9
10
11 /* buggy and slow, probably because function call overhead
12 @ renderer helper, based on bitbank's method
13 .global draw8pix @ uint8 *P, uint8 *C, uint8 *PALRAM @ dest, src, pal
14
15 draw8pix:
16     stmfd sp!, {r4,r5}
17
18     ldrb  r3, [r1]            @ get bit 0 pixels
19     mov   r12,#1
20     orr   r12,r12,r12,lsl #8
21     orr   r12,r12,r12,lsl #16
22     ldrb  r1, [r1, #8]        @ get bit 1 pixels
23     orr   r3, r3, r3, lsl #9  @ shift them over 1 byte + 1 bit
24     orr   r3, r3, r3, lsl #18 @ now 4 pixels take up 4 bytes
25     and   r4, r12,r3, lsr #7  @ mask off the upper nibble pixels we want
26     and   r5, r12,r3, lsr #3  @ mask off the lower nibble pixels we want
27     ldr   r2, [r2]
28
29     orr   r1, r1, r1, lsl #9  @ process the bit 1 pixels
30     orr   r1, r1, r1, lsl #18
31     and   r3, r12,r1, lsr #7  @ mask off the upper nibble pixels we want
32     and   r1, r12,r1, lsr #3  @ mask off the lower nibble
33     orr   r4, r4, r3, lsl #1
34     orr   r5, r5, r1, lsl #5
35
36     @ can this be avoided?
37     mov   r4, r4, lsl #3      @ *8
38     mov   r3, r2, ror r4
39     strb  r3, [r0], #1
40     mov   r4, r4, lsr #8
41     mov   r3, r2, ror r4
42     strb  r3, [r0], #1
43     mov   r4, r4, lsr #8
44     mov   r3, r2, ror r4
45     strb  r3, [r0], #1
46     mov   r4, r4, lsr #8
47     mov   r3, r2, ror r4
48     strb  r3, [r0], #1
49
50     mov   r5, r5, lsl #3      @ *8
51     mov   r3, r2, ror r5
52     strb  r3, [r0], #1
53     mov   r5, r5, lsr #8
54     mov   r3, r2, ror r5
55     strb  r3, [r0], #1
56     mov   r5, r5, lsr #8
57     mov   r3, r2, ror r5
58     strb  r3, [r0], #1
59     mov   r5, r5, lsr #8
60     mov   r3, r2, ror r5
61     strb  r3, [r0], #1
62
63     ldmfd sp!, {r4,r5}
64     bx    lr
65 */
66