1 @ some color conversion and blitting routines
\r
3 @ (c) Copyright 2006, notaz
\r
4 @ All Rights Reserved
\r
7 @ Convert 0000bbb0 ggg0rrr0 0000bbb0 ggg0rrr0
\r
8 @ to 00000000 rrr00000 ggg00000 bbb00000 ...
\r
10 @ lr = 0x00e000e0, out: r3=lower_pix, r2=higher_pix; trashes rin
\r
11 @ if sh==2, r8=0x00404040 (sh!=0 destroys flags!)
\r
12 .macro convRGB32_2 rin sh=0
\r
13 and r2, lr, \rin, lsr #4 @ blue
\r
15 orr r2, r2, r3, lsl #8 @ g0b0g0b0
\r
17 mov r3, r2, lsl #16 @ g0b00000
\r
18 and \rin,lr, \rin, ror #12 @ 00r000r0 (reversed)
\r
19 orr r3, r3, \rin, lsr #16 @ g0b000r0
\r
21 mov r3, r3, ror #17 @ shadow mode
\r
23 adds r3, r3, #0x40000000 @ green
\r
24 orrcs r3, r3, #0xe0000000
\r
26 adds r3, r3, #0x40000000
\r
27 orrcs r3, r3, #0xe0000000
\r
29 adds r3, r3, #0x40000000
\r
30 orrcs r3, r3, #0xe0000000
\r
33 mov r3, r3, ror #16 @ r3=low
\r
36 orr r3, r3, r3, lsr #3
\r
40 orr r2, r2, \rin, lsl #16
\r
45 adds r2, r2, #0x40000000 @ blue
\r
46 orrcs r2, r2, #0xe0000000
\r
48 adds r2, r2, #0x40000000
\r
49 orrcs r2, r2, #0xe0000000
\r
51 adds r2, r2, #0x40000000
\r
52 orrcs r2, r2, #0xe0000000
\r
56 orr r2, r2, r2, lsr #3
\r
61 .global vidConvCpyRGB32 @ void *to, void *from, int pixels
\r
64 stmfd sp!, {r4-r7,lr}
\r
66 mov r12, r2, lsr #3 @ repeats
\r
81 ldmfd sp!, {r4-r7,lr}
\r
85 .global vidConvCpyRGB32sh @ void *to, void *from, int pixels
\r
88 stmfd sp!, {r4-r7,lr}
\r
90 mov r12, r2, lsr #3 @ repeats
\r
105 ldmfd sp!, {r4-r7,lr}
\r
109 .global vidConvCpyRGB32hi @ void *to, void *from, int pixels
\r
112 stmfd sp!, {r4-r7,lr}
\r
114 mov r12, r2, lsr #3 @ repeats
\r
115 mov lr, #0x00e00000
\r
116 orr lr, lr, #0x00e0
\r
128 ldmfd sp!, {r4-r7,lr}
\r
132 @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
\r
135 @ mode2 blitter for 40 cols
\r
136 .global vidCpyM2_40col @ void *dest, void *src
\r
139 stmfd sp!, {r4-r6,lr}
\r
141 mov r12, #224 @ lines
\r
144 vidCpyM2_40_loop_out:
\r
152 bne vidCpyM2_40_loop
\r
155 bne vidCpyM2_40_loop_out
\r
157 ldmfd sp!, {r4-r6,lr}
\r
161 @ mode2 blitter for 32 cols
\r
162 .global vidCpyM2_32col @ void *dest, void *src
\r
165 stmfd sp!, {r4-r6,lr}
\r
167 mov r12, #224 @ lines
\r
171 vidCpyM2_32_loop_out:
\r
179 bne vidCpyM2_32_loop
\r
183 bne vidCpyM2_32_loop_out
\r
185 ldmfd sp!, {r4-r6,lr}
\r
189 @ mode2 blitter for 32 cols with no borders
\r
190 .global vidCpyM2_32col_nobord @ void *dest, void *src
\r
192 vidCpyM2_32col_nobord:
\r
193 stmfd sp!, {r4-r6,lr}
\r
195 mov r12, #224 @ lines
\r
197 b vidCpyM2_32_loop_out
\r
201 .global spend_cycles @ c
\r
204 mov r0, r0, lsr #2 @ 4 cycles/iteration
\r
205 sub r0, r0, #2 @ entry/exit/init
\r