1 @ vim:filetype=armasm
\r
2 @ some color conversion and blitting routines
\r
4 @ (c) Copyright 2006, notaz
\r
5 @ All Rights Reserved
\r
7 @ vim:filetype=armasm
\r
9 @ Convert 0000bbb0 ggg0rrr0 0000bbb0 ggg0rrr0
\r
10 @ to 00000000 rrr00000 ggg00000 bbb00000 ...
\r
12 @ lr = 0x00e000e0, out: r3=lower_pix, r2=higher_pix; trashes rin
\r
13 @ if sh==2, r8=0x00404040 (sh!=0 destroys flags!)
\r
14 .macro convRGB32_2 rin sh=0
\r
15 and r2, lr, \rin, lsr #4 @ blue
\r
17 orr r2, r2, r3, lsl #8 @ g0b0g0b0
\r
19 mov r3, r2, lsl #16 @ g0b00000
\r
20 and \rin,lr, \rin, ror #12 @ 00r000r0 (reversed)
\r
21 orr r3, r3, \rin, lsr #16 @ g0b000r0
\r
23 mov r3, r3, ror #17 @ shadow mode
\r
25 adds r3, r3, #0x40000000 @ green
\r
26 orrcs r3, r3, #0xe0000000
\r
28 adds r3, r3, #0x40000000
\r
29 orrcs r3, r3, #0xe0000000
\r
31 adds r3, r3, #0x40000000
\r
32 orrcs r3, r3, #0xe0000000
\r
35 mov r3, r3, ror #16 @ r3=low
\r
38 orr r3, r3, r3, lsr #3
\r
42 orr r2, r2, \rin, lsl #16
\r
47 adds r2, r2, #0x40000000 @ blue
\r
48 orrcs r2, r2, #0xe0000000
\r
50 adds r2, r2, #0x40000000
\r
51 orrcs r2, r2, #0xe0000000
\r
53 adds r2, r2, #0x40000000
\r
54 orrcs r2, r2, #0xe0000000
\r
58 orr r2, r2, r2, lsr #3
\r
63 .global vidConvCpyRGB32 @ void *to, void *from, int pixels
\r
66 stmfd sp!, {r4-r7,lr}
\r
68 mov r12, r2, lsr #3 @ repeats
\r
83 ldmfd sp!, {r4-r7,lr}
\r
87 .global vidConvCpyRGB32sh @ void *to, void *from, int pixels
\r
90 stmfd sp!, {r4-r7,lr}
\r
92 mov r12, r2, lsr #3 @ repeats
\r
107 ldmfd sp!, {r4-r7,lr}
\r
111 .global vidConvCpyRGB32hi @ void *to, void *from, int pixels
\r
114 stmfd sp!, {r4-r7,lr}
\r
116 mov r12, r2, lsr #3 @ repeats
\r
117 mov lr, #0x00e00000
\r
118 orr lr, lr, #0x00e0
\r
130 ldmfd sp!, {r4-r7,lr}
\r
134 @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
\r
137 @ mode2 blitter for 40 cols
\r
138 .global vidCpyM2_40col @ void *dest, void *src
\r
141 stmfd sp!, {r4-r6,lr}
\r
143 mov r12, #224 @ lines
\r
146 vidCpyM2_40_loop_out:
\r
154 bne vidCpyM2_40_loop
\r
157 bne vidCpyM2_40_loop_out
\r
159 ldmfd sp!, {r4-r6,lr}
\r
163 @ mode2 blitter for 32 cols
\r
164 .global vidCpyM2_32col @ void *dest, void *src
\r
167 stmfd sp!, {r4-r6,lr}
\r
169 mov r12, #224 @ lines
\r
173 vidCpyM2_32_loop_out:
\r
181 bne vidCpyM2_32_loop
\r
185 bne vidCpyM2_32_loop_out
\r
187 ldmfd sp!, {r4-r6,lr}
\r
191 @ mode2 blitter for 32 cols with no borders
\r
192 .global vidCpyM2_32col_nobord @ void *dest, void *src
\r
194 vidCpyM2_32col_nobord:
\r
195 stmfd sp!, {r4-r6,lr}
\r
197 mov r12, #224 @ lines
\r
199 b vidCpyM2_32_loop_out
\r
202 .global spend_cycles @ c
\r
205 mov r0, r0, lsr #2 @ 4 cycles/iteration
\r
206 sub r0, r0, #2 @ entry/exit/init
\r