937bf65b |
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 | |
c0bf6f9f |
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 | |