comparison src/cs/drivers/drv_app/r2d/r2d_color_color_ia.s @ 0:4e78acac3d88

src/{condat,cs,gpf,nucleus}: import from Selenite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 16 Oct 2020 06:23:26 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:4e78acac3d88
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