1 @ some color conversion and blitting routines
\r
3 @ (c) Copyright 2006, notaz
\r
4 @ All Rights Reserved
\r
6 @ vim:filetype=armasm
\r
8 @ Convert 0000bbb0 ggg0rrr0 0000bbb0 ggg0rrr0
\r
9 @ to 00000000 rrr00000 ggg00000 bbb00000 ...
\r
11 @ lr = 0x00e000e0, out: r3=lower_pix, r2=higher_pix; trashes rin
\r
12 @ if sh==2, r8=0x00404040 (sh!=0 destroys flags!)
\r
13 .macro convRGB32_2 rin sh=0
\r
14 and r2, lr, \rin, lsr #4 @ blue
\r
16 orr r2, r2, r3, lsl #8 @ g0b0g0b0
\r
18 mov r3, r2, lsl #16 @ g0b00000
\r
19 and \rin,lr, \rin, ror #12 @ 00r000r0 (reversed)
\r
20 orr r3, r3, \rin, lsr #16 @ g0b000r0
\r
22 mov r3, r3, ror #17 @ shadow mode
\r
24 adds r3, r3, #0x40000000 @ green
\r
25 orrcs r3, r3, #0xe0000000
\r
27 adds r3, r3, #0x40000000
\r
28 orrcs r3, r3, #0xe0000000
\r
30 adds r3, r3, #0x40000000
\r
31 orrcs r3, r3, #0xe0000000
\r
34 mov r3, r3, ror #16 @ r3=low
\r
37 orr r3, r3, r3, lsr #3
\r
41 orr r2, r2, \rin, lsl #16
\r
46 adds r2, r2, #0x40000000 @ blue
\r
47 orrcs r2, r2, #0xe0000000
\r
49 adds r2, r2, #0x40000000
\r
50 orrcs r2, r2, #0xe0000000
\r
52 adds r2, r2, #0x40000000
\r
53 orrcs r2, r2, #0xe0000000
\r
57 orr r2, r2, r2, lsr #3
\r
62 .global vidConvCpyRGB32 @ void *to, void *from, int pixels
\r
65 stmfd sp!, {r4-r7,lr}
\r
67 mov r12, r2, lsr #3 @ repeats
\r
82 ldmfd sp!, {r4-r7,lr}
\r
86 .global vidConvCpyRGB32sh @ void *to, void *from, int pixels
\r
89 stmfd sp!, {r4-r7,lr}
\r
91 mov r12, r2, lsr #3 @ repeats
\r
106 ldmfd sp!, {r4-r7,lr}
\r
110 .global vidConvCpyRGB32hi @ void *to, void *from, int pixels
\r
113 stmfd sp!, {r4-r7,lr}
\r
115 mov r12, r2, lsr #3 @ repeats
\r
116 mov lr, #0x00e00000
\r
117 orr lr, lr, #0x00e0
\r
129 ldmfd sp!, {r4-r7,lr}
\r
133 @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
\r
136 @ mode2 blitter for 40 cols
\r
137 .global vidCpyM2_40col @ void *dest, void *src
\r
140 stmfd sp!, {r4-r6,lr}
\r
142 mov r12, #224 @ lines
\r
145 vidCpyM2_40_loop_out:
\r
153 bne vidCpyM2_40_loop
\r
156 bne vidCpyM2_40_loop_out
\r
158 ldmfd sp!, {r4-r6,lr}
\r
162 @ mode2 blitter for 32 cols
\r
163 .global vidCpyM2_32col @ void *dest, void *src
\r
166 stmfd sp!, {r4-r6,lr}
\r
168 mov r12, #224 @ lines
\r
172 vidCpyM2_32_loop_out:
\r
180 bne vidCpyM2_32_loop
\r
184 bne vidCpyM2_32_loop_out
\r
186 ldmfd sp!, {r4-r6,lr}
\r
190 @ mode2 blitter for 32 cols with no borders
\r
191 .global vidCpyM2_32col_nobord @ void *dest, void *src
\r
193 vidCpyM2_32col_nobord:
\r
194 stmfd sp!, {r4-r6,lr}
\r
196 mov r12, #224 @ lines
\r
198 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