FreeCalypso > hg > fc-selenite
comparison src/cs/drivers/drv_app/r2d/r2d_color_color_ia.s @ 0:b6a5e36de839
src/cs: initial import from Magnetite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 15 Jul 2018 04:39:26 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:b6a5e36de839 |
---|---|
1 | |
2 | |
3 .state32 | |
4 | |
5 .sect ".r2dlcd" | |
6 | |
7 .if (R2D_ASM = 1) | |
8 | |
9 .include "r2d_asm_configs.inc" | |
10 .include "r2d_asm_utils.inc" | |
11 .include "r2d_asm_patch_utils.inc" | |
12 | |
13 | |
14 | |
15 | |
16 .global _r2d_start_branch_inst | |
17 .global _r2d_stop_branch_inst | |
18 .global _r2d_load_foreground | |
19 .global _r2d_load_background | |
20 | |
21 .global _r2d_blit_foreground | |
22 .global _r2d_blit_background | |
23 | |
24 .global _r2d_always_write_down | |
25 .global _r2d_always_write_up | |
26 .global _r2d_always_read_down | |
27 .global _r2d_always_read_up | |
28 | |
29 .global _r2d_never_write | |
30 .global _r2d_lcd_start_nothing | |
31 | |
32 .global _r2d_start_get_color | |
33 | |
34 .def _p_r2d_blit_foreground | |
35 .def _p_r2d_blit_background | |
36 | |
37 .bss _r2d_blit_foreground,4,4,4 | |
38 .bss _r2d_blit_background,4,4,4 | |
39 | |
40 | |
41 .ref _r2d_color_alpha_operator | |
42 .ref _r2d_color_framebuffer_foreground_pixel | |
43 | |
44 .def _r2d_icolor_alpha_op | |
45 .def _r2d_icolor_foreground_pixel_test | |
46 | |
47 | |
48 | |
49 .global _r2d_color_start_copy | |
50 .global _r2d_color_start_or | |
51 .global _r2d_color_start_and | |
52 .global _r2d_color_start_xor | |
53 .global _r2d_color_start_notcopy | |
54 .global _r2d_color_start_notor | |
55 .global _r2d_color_start_notand | |
56 .global _r2d_color_start_notxor | |
57 .global _r2d_color_start_alpha | |
58 .global _r2d_color_start_erase | |
59 .global _r2d_color_start_foreground_pixel | |
60 | |
61 | |
62 _r2d_color_start_copy: | |
63 MOV calca,calca | |
64 MOV calcb,calca | |
65 MOV calcb,calcb | |
66 _r2d_color_end_copy | |
67 | |
68 _r2d_color_start_or: | |
69 MOVS calca,calca,LSL #8 | |
70 MOVNEQ calcb,calca,LSR #8 | |
71 NOP | |
72 _r2d_color_end_or | |
73 | |
74 _r2d_color_start_and: | |
75 MOV calca,calca | |
76 AND calcb,calcb,calca | |
77 MOV calcb,calcb | |
78 _r2d_color_end_and | |
79 | |
80 _r2d_color_start_xor: | |
81 MOV calca,calca | |
82 EOR calcb,calcb,calca | |
83 MOV calcb,calcb | |
84 _r2d_color_end_xor | |
85 | |
86 _r2d_color_start_notcopy: | |
87 MOV calca,calca | |
88 MVN calcb,calca | |
89 MOV calcb,calcb | |
90 _r2d_color_end_notcopy | |
91 | |
92 _r2d_color_start_notor: | |
93 MOV calca,calca | |
94 ORR calcb,calcb,calca | |
95 MVN calcb,calcb | |
96 _r2d_color_end_notor | |
97 | |
98 _r2d_color_start_notand: | |
99 MOV calca,calca | |
100 AND calcb,calcb,calca | |
101 MVN calcb,calcb | |
102 _r2d_color_end_notand | |
103 | |
104 _r2d_color_start_notxor: | |
105 MOV calca,calca | |
106 EOR calcb,calcb,calca | |
107 MVN calcb,calcb | |
108 _r2d_color_end_notxor | |
109 | |
110 _r2d_color_start_erase: | |
111 MOVS calca,calca,LSL #8 | |
112 MOVNEQ calcb,calca,LSR #8 | |
113 NOP | |
114 _r2d_color_end_erase | |
115 | |
116 _r2d_color_start_alpha | |
117 ; Identifying code telling the patcher that a special | |
118 ; construct required to branch to a C function is used | |
119 .long BRANCH_ID | |
120 ; The absolute address of the C function which is going to be | |
121 ; converted to a PC relative offset by the patcher | |
122 .long _r2d_icolor_alpha_op | |
123 _r2d_color_stop_alpha | |
124 | |
125 _r2d_color_start_foreground_pixel | |
126 ; Identifying code telling the patcher that a special | |
127 ; construct required to branch to a C function is used | |
128 .long BRANCH_ID | |
129 ; The absolute address of the C function which is going to be | |
130 ; converted to a PC relative offset by the patcher | |
131 .long _r2d_icolor_foreground_pixel_test | |
132 _r2d_color_stop_foreground_pixel | |
133 | |
134 | |
135 | |
136 | |
137 | |
138 ; Stub function allowing to branch to a C one whose interface | |
139 ; is UINT32 r2d_lcd_some_operator(UINT32 old,UINT32 value) | |
140 _r2d_icolor_alpha_op: | |
141 R2D_OP_SAVE_CONTEXT | |
142 BL _r2d_color_alpha_operator | |
143 R2D_OP_RESTORE_CONTEXT | |
144 | |
145 ; Check kind of pixel | |
146 _r2d_icolor_foreground_pixel_test: | |
147 R2D_COL_SAVE_CONTEXT | |
148 BL _r2d_color_framebuffer_foreground_pixel | |
149 R2D_COL_RESTORE_CONTEXT | |
150 | |
151 ; First instruction replacing ".long BRANCH_ID" when code is patched | |
152 _r2d_start_branch_inst | |
153 STMFD SP!, {calca} | |
154 | |
155 _r2d_stop_branch_inst | |
156 LDMFD SP!, {calca} | |
157 | |
158 ; Code reading the foreground and background colors | |
159 ; from a const table | |
160 _r2d_start_get_color | |
161 LDRNE calca,_p_r2d_blit_foreground | |
162 LDREQ calca,_p_r2d_blit_background | |
163 LDR calca,[calca] | |
164 _r2d_stop_get_color | |
165 | |
166 ; Code doing nothing to removed patch | |
167 _r2d_lcd_start_nothing | |
168 MOV calca,calca | |
169 MOV calca,calca | |
170 MOV calca,calca | |
171 _r2d_lcd_stop_nothing | |
172 | |
173 ; Force writing of value when dst is R2D color framebuffer | |
174 ; (down mode) | |
175 _r2d_always_write_down | |
176 STR dstvalue,[p_dst_current],#4 | |
177 | |
178 ; Force writing of value when dst is R2D color framebuffer | |
179 ; (up mode) | |
180 _r2d_always_write_up | |
181 STR dstvalue,[p_dst_current],#-4 | |
182 | |
183 ; Force reading of src when src is R2D color framebuffer | |
184 _r2d_always_read_down: | |
185 LDR src_current,[p_src_current,#4]! | |
186 | |
187 ; Force reading of src when src is R2D color framebuffer | |
188 _r2d_always_read_up: | |
189 LDR src_current,[p_src_current,#-4]! | |
190 | |
191 | |
192 ; Remove force writing | |
193 _r2d_never_write | |
194 MOV dstvalue,dstvalue | |
195 | |
196 | |
197 | |
198 ; Array containing current foreground and background colors | |
199 .align 4 | |
200 _p_r2d_blit_foreground: .field _r2d_blit_foreground,32 | |
201 | |
202 .align 4 | |
203 _p_r2d_blit_background: .field _r2d_blit_background,32 | |
204 | |
205 | |
206 | |
207 .endif | |
208 .end |