This source file includes following definitions.
- log_capt_seq
- log_capt_seq2
- log_capt_seq_override
- captseq_raw_addr_init_my
- clear_current_raw_addr
- capt_seq_task
- sub_fc18e1b0_my
- sub_fc18e126_my
- sub_fc18df7e_my
- log_nr_call
- log_remote_hook
- log_rh
- sub_fc24454a_my
- exp_drv_task
- sub_fc2abfa6_my
- sub_fc3c6d30_my
1 #include "lolevel.h"
2 #include "platform.h"
3 #include "core.h"
4
5
6 #define CAPTSEQ_DEBUG_LOG 1
7 extern void _LogCameraEvent(int id,const char *fmt,...);
8
9 #define USE_STUBS_NRFLAG 1
10 #define NR_AUTO (-1)
11
12 #ifdef CAPTSEQ_DEBUG_LOG
13
14 extern char *hook_raw_image_addr(void);
15
16 void log_capt_seq(int m)
17 {
18 _LogCameraEvent(0x60,"cs m:%d rb:0x%08x i:%04d",
19 m,
20 hook_raw_image_addr(),
21 get_exposure_counter());
22 }
23 void log_capt_seq2(int m)
24 {
25 _LogCameraEvent(0x60,"cs end m:%d rb:0x%08x i:%04d",
26 m,
27 hook_raw_image_addr(),
28 get_exposure_counter());
29 }
30 void log_capt_seq_override(void)
31 {
32 _LogCameraEvent(0x60,"cs override rb:0x%08x i:%04d",
33 hook_raw_image_addr(),
34 get_exposure_counter());
35 }
36 #endif
37
38 #include "../../../generic/capt_seq.c"
39
40
41
42 extern int _captseq_raw_addr_init(int raw_index, char **ptr);
43 char *current_raw_addr;
44
45 void captseq_raw_addr_init_my(int raw_index,char **ptr) {
46 _captseq_raw_addr_init(raw_index,ptr);
47 current_raw_addr=*(ptr + 0x60/4);
48 #ifdef CAPTSEQ_DEBUG_LOG
49 _LogCameraEvent(0x60,"rawinit i:0x%x p:0x%x v:0x%x",raw_index,ptr,current_raw_addr);
50 #endif
51 }
52
53 void clear_current_raw_addr(void) {
54 current_raw_addr=NULL;
55 }
56
57
58 void __attribute__((naked,noinline)) capt_seq_task() {
59 asm volatile (
60
61 " push {r3, r4, r5, r6, r7, lr}\n"
62 " ldr r4, =0x0003e6f8\n"
63 " movs r6, #0\n"
64 " ldr r5, =0x0000bfc8\n"
65 "loc_fc0f2b36:\n"
66 " movs r2, #0\n"
67 " mov r1, sp\n"
68 " ldr r0, [r5, #8]\n"
69 " bl sub_fc3446ae\n"
70 " lsls r0, r0, #0x1f\n"
71 " beq loc_fc0f2b58\n"
72 " movw r2, #0x453\n"
73 " ldr r1, =0xfc0f2778\n"
74 " movs r0, #0\n"
75 " bl _DebugAssert\n"
76 " bl _ExitTask\n"
77 " pop {r3, r4, r5, r6, r7, pc}\n"
78 "loc_fc0f2b58:\n"
79 " ldr r0, [sp]\n"
80 " ldr r0, [r0]\n"
81 " cmp r0, #1\n"
82 " beq loc_fc0f2b74\n"
83 " cmp r0, #0x2d\n"
84 " beq loc_fc0f2b74\n"
85 " cmp r0, #0x2e\n"
86 " beq loc_fc0f2b74\n"
87 " cmp r0, #0x21\n"
88 " beq loc_fc0f2b74\n"
89 " cmp r0, #0x25\n"
90 " beq loc_fc0f2b74\n"
91 " bl sub_fc18ef68\n"
92 "loc_fc0f2b74:\n"
93 #ifdef CAPTSEQ_DEBUG_LOG
94
95 "ldr r0, [sp]\n"
96 "ldr r0, [r0]\n"
97 "bl log_capt_seq\n"
98 #endif
99 " ldr r0, [sp]\n"
100 " ldr r1, [r0]\n"
101 " cmp r1, #0x37\n"
102 " bhs loc_fc0f2c5e\n"
103 " tbb [pc, r1]\n"
104 "branchtable_fc0f2b80:\n"
105 " .byte((loc_fc0f2bb8 - branchtable_fc0f2b80) / 2)\n"
106 " .byte((loc_fc0f2bce - branchtable_fc0f2b80) / 2)\n"
107 " .byte((loc_fc0f2bd6 - branchtable_fc0f2b80) / 2)\n"
108 " .byte((loc_fc0f2be4 - branchtable_fc0f2b80) / 2)\n"
109 " .byte((loc_fc0f2bde - branchtable_fc0f2b80) / 2)\n"
110 " .byte((loc_fc0f2bfc - branchtable_fc0f2b80) / 2)\n"
111 " .byte((loc_fc0f2c02 - branchtable_fc0f2b80) / 2)\n"
112 " .byte((loc_fc0f2c0c - branchtable_fc0f2b80) / 2)\n"
113 " .byte((loc_fc0f2c14 - branchtable_fc0f2b80) / 2)\n"
114 " .byte((loc_fc0f2c24 - branchtable_fc0f2b80) / 2)\n"
115 " .byte((loc_fc0f2c2c - branchtable_fc0f2b80) / 2)\n"
116 " .byte((loc_fc0f2c32 - branchtable_fc0f2b80) / 2)\n"
117 " .byte((loc_fc0f2d22 - branchtable_fc0f2b80) / 2)\n"
118 " .byte((loc_fc0f2c3a - branchtable_fc0f2b80) / 2)\n"
119 " .byte((loc_fc0f2c40 - branchtable_fc0f2b80) / 2)\n"
120 " .byte((loc_fc0f2c46 - branchtable_fc0f2b80) / 2)\n"
121 " .byte((loc_fc0f2c4c - branchtable_fc0f2b80) / 2)\n"
122 " .byte((loc_fc0f2c52 - branchtable_fc0f2b80) / 2)\n"
123 " .byte((loc_fc0f2c58 - branchtable_fc0f2b80) / 2)\n"
124 " .byte((loc_fc0f2c60 - branchtable_fc0f2b80) / 2)\n"
125 " .byte((loc_fc0f2c66 - branchtable_fc0f2b80) / 2)\n"
126 " .byte((loc_fc0f2c6c - branchtable_fc0f2b80) / 2)\n"
127 " .byte((loc_fc0f2c70 - branchtable_fc0f2b80) / 2)\n"
128 " .byte((loc_fc0f2c76 - branchtable_fc0f2b80) / 2)\n"
129 " .byte((loc_fc0f2c7c - branchtable_fc0f2b80) / 2)\n"
130 " .byte((loc_fc0f2c82 - branchtable_fc0f2b80) / 2)\n"
131 " .byte((loc_fc0f2c86 - branchtable_fc0f2b80) / 2)\n"
132 " .byte((loc_fc0f2c8a - branchtable_fc0f2b80) / 2)\n"
133 " .byte((loc_fc0f2c92 - branchtable_fc0f2b80) / 2)\n"
134 " .byte((loc_fc0f2c9a - branchtable_fc0f2b80) / 2)\n"
135 " .byte((loc_fc0f2d22 - branchtable_fc0f2b80) / 2)\n"
136 " .byte((loc_fc0f2ca2 - branchtable_fc0f2b80) / 2)\n"
137 " .byte((loc_fc0f2ca8 - branchtable_fc0f2b80) / 2)\n"
138 " .byte((loc_fc0f2cac - branchtable_fc0f2b80) / 2)\n"
139 " .byte((loc_fc0f2cb4 - branchtable_fc0f2b80) / 2)\n"
140 " .byte((loc_fc0f2d22 - branchtable_fc0f2b80) / 2)\n"
141 " .byte((loc_fc0f2cba - branchtable_fc0f2b80) / 2)\n"
142 " .byte((loc_fc0f2cc0 - branchtable_fc0f2b80) / 2)\n"
143 " .byte((loc_fc0f2cc6 - branchtable_fc0f2b80) / 2)\n"
144 " .byte((loc_fc0f2ccc - branchtable_fc0f2b80) / 2)\n"
145 " .byte((loc_fc0f2cd2 - branchtable_fc0f2b80) / 2)\n"
146 " .byte((loc_fc0f2cda - branchtable_fc0f2b80) / 2)\n"
147 " .byte((loc_fc0f2ce0 - branchtable_fc0f2b80) / 2)\n"
148 " .byte((loc_fc0f2d22 - branchtable_fc0f2b80) / 2)\n"
149 " .byte((loc_fc0f2d04 - branchtable_fc0f2b80) / 2)\n"
150 " .byte((loc_fc0f2d0a - branchtable_fc0f2b80) / 2)\n"
151 " .byte((loc_fc0f2d16 - branchtable_fc0f2b80) / 2)\n"
152 " .byte((loc_fc0f2d22 - branchtable_fc0f2b80) / 2)\n"
153 " .byte((loc_fc0f2d30 - branchtable_fc0f2b80) / 2)\n"
154 " .byte((loc_fc0f2d22 - branchtable_fc0f2b80) / 2)\n"
155 " .byte((loc_fc0f2d22 - branchtable_fc0f2b80) / 2)\n"
156 " .byte((loc_fc0f2d22 - branchtable_fc0f2b80) / 2)\n"
157 " .byte((loc_fc0f2d22 - branchtable_fc0f2b80) / 2)\n"
158 " .byte((loc_fc0f2d22 - branchtable_fc0f2b80) / 2)\n"
159 " .byte((loc_fc0f2d1c - branchtable_fc0f2b80) / 2)\n"
160 ".align 1\n"
161 "loc_fc0f2bb8:\n"
162 " ldr r0, [r0, #0xc]\n"
163 " bl sub_fc0f31e8\n"
164 #ifdef CAPTSEQ_DEBUG_LOG
165 "bl log_capt_seq_override\n"
166 #endif
167 " BL clear_current_raw_addr\n"
168 " BL shooting_expo_param_override\n"
169 " bl sub_fc0f054e\n"
170 " ldr r0, [r4, #0x24]\n"
171 " cmp r0, #0\n"
172 " beq loc_fc0f2bcc\n"
173
174 " bl sub_fc18e1b0_my\n"
175 "loc_fc0f2bcc:\n"
176 " b loc_fc0f2d30\n"
177 "loc_fc0f2bce:\n"
178 " ldr r0, [r0, #0x10]\n"
179
180 " bl sub_fc18e126_my\n"
181 " b loc_fc0f2d30\n"
182 "loc_fc0f2bd6:\n"
183 " movs r0, #1\n"
184 " bl sub_fc0f35b2\n"
185 " b loc_fc0f2d30\n"
186 "loc_fc0f2bde:\n"
187 " bl sub_fc0f2e32\n"
188 " b loc_fc0f2bea\n"
189 "loc_fc0f2be4:\n"
190 " ldr r0, [r0, #0xc]\n"
191 " bl sub_fc0f3196\n"
192 "loc_fc0f2bea:\n"
193 " str r6, [r4, #0x24]\n"
194 " b loc_fc0f2d30\n"
195 ".ltorg\n"
196
197
198
199
200
201 "loc_fc0f2bfc:\n"
202 " bl sub_fc0f319e\n"
203 " b loc_fc0f2d30\n"
204 "loc_fc0f2c02:\n"
205 " bl sub_fc0f34d2\n"
206 " bl sub_fc0f054e\n"
207 " b loc_fc0f2d30\n"
208 "loc_fc0f2c0c:\n"
209 " ldr r0, [r0, #0x10]\n"
210 " bl sub_fc18e244\n"
211 " b loc_fc0f2d30\n"
212 "loc_fc0f2c14:\n"
213 " bl sub_fc0f3534\n"
214 " bl sub_fc0f054e\n"
215 " movs r0, #0\n"
216 " bl sub_fc27eada\n"
217 " b loc_fc0f2d30\n"
218 "loc_fc0f2c24:\n"
219 " ldr r0, [r4, #0x50]\n"
220 " bl sub_fc0f49c4\n"
221 " b loc_fc0f2d30\n"
222 "loc_fc0f2c2c:\n"
223 " bl sub_fc0f4c70\n"
224 " b loc_fc0f2d30\n"
225 "loc_fc0f2c32:\n"
226 " ldr r0, [r0, #0xc]\n"
227 " bl sub_fc0f4cbc\n"
228 " b loc_fc0f2d30\n"
229 "loc_fc0f2c3a:\n"
230 " bl sub_fc0f4e10\n"
231 " b loc_fc0f2d30\n"
232 "loc_fc0f2c40:\n"
233 " bl sub_fc0f51d8\n"
234 " b loc_fc0f2d30\n"
235 "loc_fc0f2c46:\n"
236 " bl sub_fc0f526e\n"
237 " b loc_fc0f2d30\n"
238 "loc_fc0f2c4c:\n"
239 " bl sub_fc18cb74\n"
240 " b loc_fc0f2d30\n"
241 "loc_fc0f2c52:\n"
242 " bl sub_fc18ccda\n"
243 " b loc_fc0f2d30\n"
244 "loc_fc0f2c58:\n"
245 " bl sub_fc18cd50\n"
246 " b loc_fc0f2d30\n"
247 "loc_fc0f2c5e:\n"
248 " b loc_fc0f2d22\n"
249 "loc_fc0f2c60:\n"
250 " bl sub_fc18cdd8\n"
251 " b loc_fc0f2d30\n"
252 "loc_fc0f2c66:\n"
253 " bl sub_fc18ce7e\n"
254 " b loc_fc0f2d30\n"
255 "loc_fc0f2c6c:\n"
256 " movs r0, #0\n"
257 " b loc_fc0f2c8c\n"
258 "loc_fc0f2c70:\n"
259 " bl sub_fc18d17c\n"
260 " b loc_fc0f2d30\n"
261 "loc_fc0f2c76:\n"
262 " bl sub_fc18d1ce\n"
263 " b loc_fc0f2d30\n"
264 "loc_fc0f2c7c:\n"
265 " bl sub_fc18d1d2\n"
266 " b loc_fc0f2d30\n"
267 "loc_fc0f2c82:\n"
268 " movs r0, #0\n"
269 " b loc_fc0f2c94\n"
270 "loc_fc0f2c86:\n"
271 " movs r0, #0\n"
272 " b loc_fc0f2c9c\n"
273 "loc_fc0f2c8a:\n"
274 " movs r0, #1\n"
275 "loc_fc0f2c8c:\n"
276 " bl sub_fc18d068\n"
277 " b loc_fc0f2d30\n"
278 "loc_fc0f2c92:\n"
279 " movs r0, #1\n"
280 "loc_fc0f2c94:\n"
281 " bl sub_fc18d1e4\n"
282 " b loc_fc0f2d30\n"
283 "loc_fc0f2c9a:\n"
284 " movs r0, #1\n"
285 "loc_fc0f2c9c:\n"
286 " bl sub_fc18d282\n"
287 " b loc_fc0f2d30\n"
288 "loc_fc0f2ca2:\n"
289 " bl sub_fc0f3684\n"
290 " b loc_fc0f2d30\n"
291 "loc_fc0f2ca8:\n"
292 " movs r0, #0\n"
293 " b loc_fc0f2cae\n"
294 "loc_fc0f2cac:\n"
295 " ldr r0, [r0, #0xc]\n"
296 "loc_fc0f2cae:\n"
297 " bl sub_fc0f3700\n"
298 " b loc_fc0f2d30\n"
299 "loc_fc0f2cb4:\n"
300 " bl sub_fc18cf98\n"
301 " b loc_fc0f2d30\n"
302 "loc_fc0f2cba:\n"
303 " bl sub_fc18cff8\n"
304 " b loc_fc0f2d30\n"
305 "loc_fc0f2cc0:\n"
306 " bl sub_fc18e942\n"
307 " b loc_fc0f2d30\n"
308 "loc_fc0f2cc6:\n"
309 " bl sub_fc0f81be\n"
310 " b loc_fc0f2d30\n"
311 "loc_fc0f2ccc:\n"
312 " bl sub_fc0f8278\n"
313 " b loc_fc0f2d30\n"
314 "loc_fc0f2cd2:\n"
315 " ldr r0, [r0, #0xc]\n"
316 " bl sub_fc18d35c\n"
317 " b loc_fc0f2d30\n"
318 "loc_fc0f2cda:\n"
319 " bl sub_fc18d3c4\n"
320 " b loc_fc0f2d30\n"
321 "loc_fc0f2ce0:\n"
322 " bl sub_fc0fa17c\n"
323 " ldrh.w r0, [r4, #0x1b8]\n"
324 " cmp r0, #4\n"
325 " beq loc_fc0f2cf6\n"
326 " ldrh r0, [r4]\n"
327 " sub.w r1, r0, #0x4200\n"
328 " subs r1, #0x38\n"
329 " bne loc_fc0f2d30\n"
330 "loc_fc0f2cf6:\n"
331 " bl sub_fc0f8278\n"
332 " bl sub_fc0f87be\n"
333 " bl sub_fc0f861c\n"
334 " b loc_fc0f2d30\n"
335 "loc_fc0f2d04:\n"
336 " movs r2, #0\n"
337 " movs r1, #0x12\n"
338 " b loc_fc0f2d0e\n"
339 "loc_fc0f2d0a:\n"
340 " movs r2, #0\n"
341 " movs r1, #0x10\n"
342 "loc_fc0f2d0e:\n"
343 " movs r0, #0\n"
344 " bl sub_fc0f1134\n"
345 " b loc_fc0f2d30\n"
346 "loc_fc0f2d16:\n"
347 " movs r2, #0\n"
348 " movs r1, #0x11\n"
349 " b loc_fc0f2d0e\n"
350 "loc_fc0f2d1c:\n"
351 " bl sub_fc0f4910\n"
352 " b loc_fc0f2d30\n"
353 "loc_fc0f2d22:\n"
354 " movw r2, #0x58f\n"
355 " ldr r1, =0xfc0f2778\n"
356 " movs r0, #0\n"
357 " bl _DebugAssert\n"
358 "loc_fc0f2d30:\n"
359
360 #ifdef CAPTSEQ_DEBUG_LOG
361 "ldr r0, [sp]\n"
362 "ldr r0, [r0]\n"
363 "bl log_capt_seq2\n"
364 #endif
365 " ldr r0, [sp]\n"
366 " ldr r1, [r0, #4]\n"
367 " ldr r0, [r5, #4]\n"
368 " bl _SetEventFlag\n"
369 " ldr r7, [sp]\n"
370 " ldr r0, [r7, #8]\n"
371 " cbnz r0, loc_fc0f2d4e\n"
372 " movw r2, #0x102\n"
373 " ldr r1, =0xfc0f2778\n"
374 " movs r0, #0\n"
375 " bl _DebugAssert\n"
376 "loc_fc0f2d4e:\n"
377 " str r6, [r7, #8]\n"
378 " b loc_fc0f2b36\n"
379 ".ltorg\n"
380 );
381 }
382
383 void __attribute__((naked,noinline)) sub_fc18e1b0_my() {
384 asm volatile (
385 " push {r3, r4, r5, r6, r7, lr}\n"
386 " bl sub_fc0f2242\n"
387 " mov r4, r0\n"
388 " movs r0, #0xc\n"
389 " bl sub_fc309af8\n"
390 " ldr r6, =0x00014c10\n"
391 " lsls r0, r0, #0x1f\n"
392 " mov.w r5, #1\n"
393 " bne loc_fc18e240\n"
394 " movs r2, #2\n"
395 " mov r1, sp\n"
396 " movw r0, #0x115\n"
397 " bl _GetPropertyCase\n"
398 " lsls r0, r0, #0x1f\n"
399 " beq loc_fc18e1e4\n"
400 " movs r0, #0\n"
401 " movw r2, #0x1be\n"
402 " ldr r1, =0xfc18e304\n"
403 " bl _DebugAssert\n"
404 "loc_fc18e1e4:\n"
405 " ldrsh.w r0, [sp]\n"
406 " bl sub_fc0dbe2a\n"
407 " cbz r0, loc_fc18e1f6\n"
408 " str r5, [r6]\n"
409 " bl sub_fc309b30\n"
410 "loc_fc18e1f4:\n"
411 " pop {r3, r4, r5, r6, r7, pc}\n"
412 "loc_fc18e1f6:\n"
413 " bl sub_fc114d80\n"
414 " bl sub_fc0f31a6\n"
415 " mov r0, r4\n"
416 " bl sub_fc0f5f76\n"
417 " mov r1, r4\n"
418
419 "bl captseq_raw_addr_init_my\n"
420 " movs r2, #4\n"
421 " movw r0, #0x11b\n"
422 " add.w r1, r4, #0x5c\n"
423 " bl _SetPropertyCase\n"
424 " movs r2, #4\n"
425 " movs r0, #0x33\n"
426 " add.w r1, r4, #0x60\n"
427 " bl _SetPropertyCase\n"
428 " movs r2, #4\n"
429 " movs r0, #0x47\n"
430 " add.w r1, r4, #8\n"
431 " bl _SetPropertyCase\n"
432 " mov r0, r4\n"
433 " bl sub_fc18dd1e\n"
434 " mov r0, r4\n"
435
436 " bl sub_fc24454a_my\n"
437 " lsls r0, r0, #0x1f\n"
438 " beq loc_fc18e1f4\n"
439 "loc_fc18e240:\n"
440 " str r5, [r6]\n"
441 " pop {r3, r4, r5, r6, r7, pc}\n"
442 ".ltorg\n"
443 );
444 }
445
446
447 void __attribute__((naked,noinline)) sub_fc18e126_my() {
448 asm volatile (
449 " push {r3, r4, r5, r6, r7, lr}\n"
450 " ldr r6, =0x0003e6f8\n"
451 " movs r4, #0\n"
452 " mov r5, r0\n"
453 " movw r0, #0x120\n"
454 " ldr r1, [r6, #0x24]\n"
455 " cbz r1, loc_fc18e186\n"
456 " ldr.w r2, [r5, #0x128]\n"
457 " ldr r1, =0xfc18e31c\n"
458 " bl _LogCameraEvent\n"
459 " ldr r0, =0x00014c10\n"
460 " ldr r0, [r0]\n"
461 " cbz r0, loc_fc18e148\n"
462 " movs r4, #0x1d\n"
463 "loc_fc18e148:\n"
464 " movw r7, #0x15d\n"
465 " movs r2, #2\n"
466 " mov r1, sp\n"
467 " mov r0, r7\n"
468 " bl _GetPropertyCase\n"
469 " lsls r0, r0, #0x1f\n"
470 " beq loc_fc18e166\n"
471 " movs r0, #0\n"
472 " movw r2, #0x175\n"
473 " ldr r1, =0xfc18e304\n"
474 " bl _DebugAssert\n"
475 "loc_fc18e166:\n"
476 " ldr r0, [r5, #0x1c]\n"
477 " movs r3, #2\n"
478 " mov r2, sp\n"
479 " mov r1, r7\n"
480 " bl sub_fc35b9ac\n"
481 " movs r1, #2\n"
482 " mov r2, r5\n"
483 " mov r0, r4\n"
484 " bl sub_fc0f1134\n"
485 " mov r1, r4\n"
486 " mov r0, r5\n"
487 " bl sub_fc18edc6\n"
488 " b loc_fc18e1aa\n"
489 "loc_fc18e186:\n"
490 " ldr r1, =0xfc18e338\n"
491 " bl _LogCameraEvent\n"
492 " mov r0, r5\n"
493
494 " bl sub_fc18df7e_my\n"
495 " mov r4, r0\n"
496 " lsls r0, r0, #0x1f\n"
497 " beq loc_fc18e1aa\n"
498 " movs r1, #2\n"
499 " mov r2, r5\n"
500 " mov r0, r4\n"
501 " bl sub_fc0f1134\n"
502 " mov r1, r4\n"
503 " mov r0, r5\n"
504 " bl sub_fc18ef28\n"
505 "loc_fc18e1aa:\n"
506 " movs r0, #0\n"
507 " str r0, [r6, #0x24]\n"
508 " pop {r3, r4, r5, r6, r7, pc}\n"
509 ".ltorg\n"
510 );
511 }
512
513
514 void __attribute__((naked,noinline)) sub_fc18df7e_my() {
515 asm volatile (
516 " push.w {r2, r3, r4, r5, r6, r7, r8, lr}\n"
517 " mov r4, r0\n"
518 " bl sub_fc0f5f76\n"
519 " mov r1, r4\n"
520
521 " bl captseq_raw_addr_init_my\n"
522 " movs r2, #4\n"
523 " movw r0, #0x11b\n"
524 " add.w r1, r4, #0x5c\n"
525 " bl _SetPropertyCase\n"
526 " movs r2, #4\n"
527 " movs r0, #0x33\n"
528 " add.w r1, r4, #0x60\n"
529 " bl _SetPropertyCase\n"
530 " ldr r5, =0x0003e6f8\n"
531 " ldr.w r0, [r5, #0x108]\n"
532 " cbnz r0, loc_fc18dfc0\n"
533 " ldrh.w r0, [r5, #0x1b6]\n"
534 " cmp r0, #3\n"
535 " beq loc_fc18dfc6\n"
536 " ldr r0, [r4, #8]\n"
537 " cmp r0, #1\n"
538 " bhi loc_fc18dfd6\n"
539 " b loc_fc18dfc6\n"
540 "loc_fc18dfc0:\n"
541 " ldr r0, [r4, #0xc]\n"
542 " cmp r0, #1\n"
543 " bne loc_fc18dfd6\n"
544 "loc_fc18dfc6:\n"
545 " movs r0, #0xc\n"
546 " bl sub_fc309af8\n"
547 " lsls r0, r0, #0x1f\n"
548 " beq loc_fc18dfd6\n"
549 " bl sub_fc0f0e4e\n"
550 " b loc_fc18e022\n"
551 "loc_fc18dfd6:\n"
552 " ldr.w r0, [r5, #0xec]\n"
553 " cbz r0, loc_fc18dff6\n"
554 " ldrh.w r0, [r5, #0x1b6]\n"
555 " cmp r0, #3\n"
556 " beq loc_fc18dfea\n"
557 " ldr r0, [r4, #8]\n"
558 " cmp r0, #1\n"
559 " bhi loc_fc18e028\n"
560 "loc_fc18dfea:\n"
561 " ldr.w r0, [r5, #0x108]\n"
562 " cbz r0, loc_fc18dff6\n"
563 " ldr r0, [r4, #0xc]\n"
564 " cmp r0, #1\n"
565 " bhi loc_fc18e028\n"
566 "loc_fc18dff6:\n"
567 " movs r2, #2\n"
568 " movw r0, #0x115\n"
569 " add r1, sp, #4\n"
570 " bl _GetPropertyCase\n"
571 " lsls r0, r0, #0x1f\n"
572 " beq loc_fc18e010\n"
573 " movs r2, #0xcd\n"
574 " movs r0, #0\n"
575 " ldr r1, =0xfc18e304\n"
576 " bl _DebugAssert\n"
577 "loc_fc18e010:\n"
578 " ldrsh.w r0, [sp, #4]\n"
579 " bl sub_fc0dbe2a\n"
580 " cbz r0, loc_fc18e028\n"
581 " bl sub_fc0f0e4e\n"
582 " bl sub_fc309b30\n"
583 "loc_fc18e022:\n"
584 " movs r0, #1\n"
585 "loc_fc18e024:\n"
586 " pop.w {r2, r3, r4, r5, r6, r7, r8, pc}\n"
587 "loc_fc18e028:\n"
588 " mov r0, r4\n"
589 " bl sub_fc0f36ca\n"
590 " lsls r1, r0, #0x1f\n"
591 " bne loc_fc18e024\n"
592 " ldr r7, =0x0003e914\n"
593 " ldr r0, [r7]\n"
594 " cbz r0, loc_fc18e04a\n"
595 " ldr.w r0, [r5, #0x19c]\n"
596 " cbz r0, loc_fc18e04a\n"
597 " mov r0, r4\n"
598 " bl sub_fc18eaac\n"
599 " mov r0, r4\n"
600 " bl sub_fc18eaae\n"
601 "loc_fc18e04a:\n"
602 " mov r0, r4\n"
603 " bl sub_fc18c8d0\n"
604 " mov r6, r0\n"
605 " lsls r0, r0, #0x1f\n"
606 " bne loc_fc18e122\n"
607 " ldr r0, [r7]\n"
608 " cbnz r0, loc_fc18e066\n"
609 " ldr.w r0, [r5, #0x19c]\n"
610 " cbz r0, loc_fc18e066\n"
611 " mov r0, r4\n"
612 " bl sub_fc18eaac\n"
613 "loc_fc18e066:\n"
614 " bl sub_fc114d80\n"
615 " bl sub_fc0f31a6\n"
616 " mov r0, r4\n"
617 " bl sub_fc18dd1e\n"
618 " ldr.w r0, [r5, #0x12c]\n"
619 " cbnz r0, loc_fc18e088\n"
620 " ldrh.w r0, [r5, #0x1b6]\n"
621 " cmp r0, #3\n"
622 " beq loc_fc18e088\n"
623 " ldr r0, [r4, #8]\n"
624 " cmp r0, #1\n"
625 " bhi loc_fc18e08e\n"
626 "loc_fc18e088:\n"
627 " movs r0, #2\n"
628 " bl sub_fc0fb412\n"
629 "loc_fc18e08e:\n"
630 " ldr.w r0, [r5, #0xa0]\n"
631 " cmp r0, #0\n"
632 " beq loc_fc18e100\n"
633 " ldrh.w r0, [r5, #0x1b6]\n"
634 " movw r7, #0x800\n"
635 " cmp r0, #3\n"
636 " beq loc_fc18e0be\n"
637 " ldr r0, [r4, #8]\n"
638 " cmp r0, #1\n"
639 " bls loc_fc18e0be\n"
640 " bl sub_fc18e8be\n"
641 " movw r3, #0x12a\n"
642 " movw r2, #0x3a98\n"
643 " mov r1, r7\n"
644 " str r3, [sp]\n"
645 " ldr r3, =0xfc18e304\n"
646 " bl sub_fc309ed0\n"
647 "loc_fc18e0be:\n"
648 " movs r2, #4\n"
649 " movw r0, #0x18c\n"
650 " add r1, sp, #4\n"
651 " bl _GetPropertyCase\n"
652 " lsls r0, r0, #0x1f\n"
653 " beq loc_fc18e0da\n"
654 " movs r0, #0\n"
655 " movw r2, #0x12e\n"
656 " ldr r1, =0xfc18e304\n"
657 " bl _DebugAssert\n"
658 "loc_fc18e0da:\n"
659 " ldr r0, [sp, #4]\n"
660 " cbnz r0, loc_fc18e0ea\n"
661 " bl sub_fc18e8be\n"
662 " mov r1, r7\n"
663 " bl _SetEventFlag\n"
664 " b loc_fc18e100\n"
665 "loc_fc18e0ea:\n"
666 " bl sub_fc18e8be\n"
667 " mov r1, r7\n"
668 " bl sub_fc369bea\n"
669 " ldr r2, =0xfc18df6d\n"
670 " mov r3, r7\n"
671 " ldr r0, [sp, #4]\n"
672 " mov r1, r2\n"
673 " bl sub_fc3415ec\n"
674 "loc_fc18e100:\n"
675 " ldr.w r0, [r5, #0xac]\n"
676 " cbz r0, loc_fc18e10e\n"
677 " mov r0, r4\n"
678 " bl sub_fc244a6c\n"
679 " b loc_fc18e122\n"
680 "loc_fc18e10e:\n"
681 " ldr.w r0, [r5, #0xb0]\n"
682 " cmp r0, #0\n"
683 " mov r0, r4\n"
684 " beq loc_fc18e11e\n"
685 " bl sub_fc244e0e\n"
686 " b loc_fc18e122\n"
687 "loc_fc18e11e:\n"
688
689 " bl sub_fc24454a_my\n"
690 "loc_fc18e122:\n"
691 " mov r0, r6\n"
692 " b loc_fc18e024\n"
693 ".ltorg\n"
694 );
695 }
696 #ifdef CAPTSEQ_DEBUG_LOG
697 void log_nr_call(void) {
698 _LogCameraEvent(0x60,"nr hook %d",_nrflag);
699 }
700 void log_remote_hook(void) {
701 _LogCameraEvent(0x60,"remote hook");
702 }
703 void log_rh(void) {
704 _LogCameraEvent(0x60,"raw hook rb:0x%08x rbc:0x%08x",hook_raw_image_addr(),current_raw_addr);
705 }
706 #endif
707
708
709
710 void __attribute__((naked,noinline)) sub_fc24454a_my() {
711 asm volatile (
712 " push.w {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, lr}\n"
713 " mov r4, r0\n"
714 " bl sub_fc0f6022\n"
715 " ldr r7, =0x0003e6f8\n"
716 " ldr.w r0, [r7, #0x168]\n"
717 " cbz r0, loc_fc24456a\n"
718 " ldrh.w r0, [r7, #0x1b6]\n"
719 " cmp r0, #3\n"
720 " beq loc_fc24456a\n"
721 " ldr r0, [r4, #8]\n"
722 " cmp r0, #1\n"
723 " bhi loc_fc244574\n"
724 "loc_fc24456a:\n"
725 " mov r0, r4\n"
726 " bl sub_fc18dc70\n"
727 " bl sub_fc18e788\n"
728 "loc_fc244574:\n"
729 " ldr.w r0, [r7, #0x9c]\n"
730 " cbnz r0, loc_fc244584\n"
731 " movs r0, #1\n"
732 " bl sub_fc0f36a6\n"
733 " bl sub_fc18e36a\n"
734 "loc_fc244584:\n"
735 " ldr r0, [r4, #0x1c]\n"
736 " movs r3, #4\n"
737 " add r2, sp, #0xc\n"
738 " movw r1, #0x13c\n"
739 " bl sub_fc35ba28\n"
740 " lsls r0, r0, #0x1f\n"
741 " beq loc_fc2445a2\n"
742 " movs r0, #0\n"
743 " movw r2, #0x1c4\n"
744 " ldr r1, =0xfc24494c\n"
745 " bl _DebugAssert\n"
746 "loc_fc2445a2:\n"
747 " ldr r0, [sp, #0xc]\n"
748 " ubfx r0, r0, #8, #8\n"
749 " cmp r0, #6\n"
750 " bne loc_fc2445b2\n"
751 " ldr r0, =0xfc244549\n"
752 " movs r1, #0\n"
753 " b loc_fc2445b6\n"
754 "loc_fc2445b2:\n"
755 " ldr r0, =0xfc18d8a1\n"
756 " mov r1, r4\n"
757 "loc_fc2445b6:\n"
758 " bl sub_fc1137d8\n"
759 " ldr r0, [r4, #0x1c]\n"
760 " movs r3, #2\n"
761 " add r2, sp, #8\n"
762 " movw r1, #0x117\n"
763 " bl sub_fc35ba28\n"
764 " lsls r0, r0, #0x1f\n"
765 " beq loc_fc2445d8\n"
766 " movs r0, #0\n"
767 " movw r2, #0x1cd\n"
768 " ldr r1, =0xfc24494c\n"
769 " bl _DebugAssert\n"
770 "loc_fc2445d8:\n"
771 " ldr.w r0, [r7, #0x104]\n"
772 " cbz r0, loc_fc24460a\n"
773 " ldrh.w r0, [r7, #0x1b6]\n"
774 " cmp r0, #3\n"
775 " beq loc_fc2445ec\n"
776 " ldr r0, [r4, #8]\n"
777 " cmp r0, #1\n"
778 " bhi loc_fc24460a\n"
779 "loc_fc2445ec:\n"
780 " movs r0, #1\n"
781 " movw r5, #0x16b\n"
782 " movs r2, #2\n"
783 " mov r1, sp\n"
784 " str r0, [sp]\n"
785 " mov r0, r5\n"
786 " bl _SetPropertyCase\n"
787 " ldr r0, [r4, #0x1c]\n"
788 " movs r3, #2\n"
789 " mov r2, sp\n"
790 " mov r1, r5\n"
791 " bl sub_fc35b9ac\n"
792 "loc_fc24460a:\n"
793
794 "bl capt_seq_hook_set_nr\n"
795 #ifdef CAPTSEQ_DEBUG_LOG
796 "bl log_nr_call\n"
797 #endif
798 " mov r0, r4\n"
799 " bl sub_fc18ddea\n"
800 " ldr r0, [r4, #0x1c]\n"
801 " movs r3, #4\n"
802 " movs r1, #0x93\n"
803 " add r2, sp, #4\n"
804 " bl sub_fc35ba28\n"
805 " lsls r0, r0, #0x1f\n"
806 " beq loc_fc24462c\n"
807 " movs r0, #0\n"
808 " movw r2, #0x1dd\n"
809 " ldr r1, =0xfc24494c\n"
810 " bl _DebugAssert\n"
811 "loc_fc24462c:\n"
812
813 " BL wait_until_remote_button_is_released\n"
814 #ifdef CAPTSEQ_DEBUG_LOG
815 "bl log_remote_hook\n"
816 #endif
817 " ldrh r0, [r4, #0x18]\n"
818 " cbnz r0, loc_fc24463a\n"
819 " ldr r1, [r4, #0x60]\n"
820 " mov r0, r4\n"
821 " ldr r2, [sp, #4]\n"
822 " bl sub_fc18d6b4\n"
823 "loc_fc24463a:\n"
824 " ldr.w r0, [r7, #0x188]\n"
825 " cbz r0, loc_fc244644\n"
826 " bl sub_fc18db76\n"
827 "loc_fc244644:\n"
828 " bl sub_fc309f70\n"
829 " cbz r0, loc_fc24464e\n"
830 " bl sub_fc112758\n"
831 "loc_fc24464e:\n"
832 " ldr r0, =0x0003e914\n"
833 " ldr r0, [r0]\n"
834 " cbnz r0, loc_fc244660\n"
835 " ldr.w r0, [r7, #0x19c]\n"
836 " cbz r0, loc_fc244660\n"
837 " mov r0, r4\n"
838 " bl sub_fc18eaae\n"
839 "loc_fc244660:\n"
840 " ldr r1, =0x00021c64\n"
841 " ldr r0, [sp, #4]\n"
842 " str r0, [r1]\n"
843 " bl sub_fc0f75da\n"
844 " bl sub_fc18de8e\n"
845 " movs r1, #0\n"
846 " mov r0, r4\n"
847 " bl sub_fc244a0a\n"
848 " mov r6, r0\n"
849
850 " ldr r0, [sp, #0xc]\n"
851 " ubfx r0, r0, #8, #8\n"
852 " cmp r0, #6\n"
853 " bne loc_fc244686\n"
854 " ldr r5, =0xfc18db41\n"
855 " b loc_fc244688\n"
856 "loc_fc244686:\n"
857 " ldr r5, =0xfc18db57\n"
858 "loc_fc244688:\n"
859 " ldrh r0, [r4, #0x18]\n"
860 " cbz r0, loc_fc2446aa\n"
861 " cmp r0, #1\n"
862 " beq loc_fc2446ba\n"
863 " cmp r0, #4\n"
864 " bne loc_fc24472e\n"
865 " str r6, [sp]\n"
866 " mov r3, r5\n"
867 " ldr r1, [r4, #0x60]\n"
868 " mov r0, r4\n"
869 " ldr r2, [sp, #4]\n"
870 " bl sub_fc18d712\n"
871 "loc_fc2446a2:\n"
872 " mov r5, r0\n"
873 " bl sub_fc3c9de2\n"
874 " b loc_fc24473c\n"
875 "loc_fc2446aa:\n"
876 " str r6, [sp]\n"
877 " mov r3, r5\n"
878 " ldr r1, [r4, #0x60]\n"
879 " mov r0, r4\n"
880 " ldr r2, [sp, #4]\n"
881 " bl sub_fc18d5ca\n"
882 " b loc_fc2446a2\n"
883 "loc_fc2446ba:\n"
884 " ldr.w r0, [r7, #0xc4]\n"
885 " cbz r0, loc_fc2446cc\n"
886 " movs r0, #0\n"
887 " movw r2, #0x221\n"
888 " ldr r1, =0xfc24494c\n"
889 " bl _DebugAssert\n"
890 "loc_fc2446cc:\n"
891 " str r6, [sp]\n"
892 " mov r3, r5\n"
893 " ldr r1, [r4, #0x60]\n"
894 " mov r0, r4\n"
895 " ldr r2, [sp, #4]\n"
896 " bl sub_fc18d73e\n"
897 " movs r2, #1\n"
898 " mov r5, r0\n"
899 " movs r1, #0\n"
900 " movs r0, #0x45\n"
901 " bl sub_fc280646\n"
902 " lsls r0, r5, #0x1f\n"
903 " bne loc_fc24473c\n"
904 " ldr.w r0, [r7, #0xfc]\n"
905 " cbz r0, loc_fc244700\n"
906 " ldr r1, [r4, #8]\n"
907 " ldr r2, =0x001dbfb8\n"
908 " ldr r0, [r4, #0x60]\n"
909 " add.w r1, r2, r1, lsl #2\n"
910 " str r0, [r1, #-0x4]\n"
911 " b loc_fc244726\n"
912 "loc_fc244700:\n"
913 " ldr r0, =0xfc244549\n"
914 " movs r1, #0\n"
915 " bl sub_fc1137d8\n"
916 " movs r1, #1\n"
917 " mov r0, r4\n"
918 " bl sub_fc244a0a\n"
919 " mov r6, r0\n"
920 " ldr r0, [sp, #4]\n"
921 " bl sub_fc18dbd2\n"
922 " ldr r1, [r4, #0x60]\n"
923 " mov r3, r6\n"
924 " ldr r2, [sp, #4]\n"
925 " mov r0, r4\n"
926 " bl sub_fc18d7b2\n"
927 " mov r5, r0\n"
928 "loc_fc244726:\n"
929 " movs r0, #0\n"
930 " bl sub_fc18d5a8\n"
931 " b loc_fc24473c\n"
932 "loc_fc24472e:\n"
933 " movs r0, #0\n"
934 " movw r2, #0x24b\n"
935 " ldr r1, =0xfc24494c\n"
936 " bl _DebugAssert\n"
937 " movs r5, #0x1d\n"
938 "loc_fc24473c:\n"
939 " bl sub_fc18de92\n"
940 " ldr.w r8, =0xfc244549\n"
941 " lsls r0, r5, #0x1f\n"
942 " bne loc_fc244798\n"
943 " ldr.w r0, [r7, #0x104]\n"
944 " cbnz r0, loc_fc244764\n"
945 " mov r0, r4\n"
946 " bl sub_fc18f320\n"
947 " lsls r0, r0, #0x1f\n"
948 " beq loc_fc244764\n"
949 " movs r0, #0\n"
950 " movw r2, #0x268\n"
951 " ldr r1, =0xfc24494c\n"
952 " bl _DebugAssert\n"
953 "loc_fc244764:\n"
954
955 #ifdef CAPTSEQ_DEBUG_LOG
956 "bl log_rh\n"
957 #endif
958 " BL capt_seq_hook_raw_here\n"
959 " BL clear_current_raw_addr\n"
960 " mov r0, r4\n"
961 " bl sub_fc18de7e\n"
962 " mov r0, r4\n"
963 " bl sub_fc18de52\n"
964 " cmp r6, r8\n"
965 " beq loc_fc244798\n"
966 " bl sub_fc18e8be\n"
967 " movs r1, #4\n"
968 " movw sb, #0x275\n"
969 " ldr r3, =0xfc24494c\n"
970 " movw r2, #0x3a98\n"
971 " str.w sb, [sp]\n"
972 " bl sub_fc309ed0\n"
973 " cbz r0, loc_fc244798\n"
974 " movs r0, #0\n"
975 " mov r2, sb\n"
976 " ldr r1, =0xfc24494c\n"
977 " bl _DebugAssert\n"
978 "loc_fc244798:\n"
979 " ldr.w r0, [r7, #0x188]\n"
980 " cbz r0, loc_fc2447a8\n"
981 " movs r2, #1\n"
982 " movs r1, #0\n"
983 " movs r0, #0x46\n"
984 " bl sub_fc280646\n"
985 "loc_fc2447a8:\n"
986 " movs r1, #2\n"
987 " mov r2, r4\n"
988 " mov r0, r5\n"
989 " bl sub_fc0f1134\n"
990 " ldr r0, [r7, #0x24]\n"
991 " cmp r0, #0\n"
992 " mov r0, r8\n"
993 " beq loc_fc2447ce\n"
994 " cmp r6, r0\n"
995 " beq loc_fc2447c2\n"
996 " movs r1, #1\n"
997 " b loc_fc2447c4\n"
998 "loc_fc2447c2:\n"
999 " movs r1, #0\n"
1000 "loc_fc2447c4:\n"
1001 " mov r2, r5\n"
1002 " mov r0, r4\n"
1003 " bl sub_fc18ed84\n"
1004 " b loc_fc2447e0\n"
1005 "loc_fc2447ce:\n"
1006 " cmp r6, r0\n"
1007 " beq loc_fc2447d6\n"
1008 " movs r1, #1\n"
1009 " b loc_fc2447d8\n"
1010 "loc_fc2447d6:\n"
1011 " movs r1, #0\n"
1012 "loc_fc2447d8:\n"
1013 " mov r2, r5\n"
1014 " mov r0, r4\n"
1015 " bl sub_fc18ed3e\n"
1016 "loc_fc2447e0:\n"
1017 " add sp, #0x10\n"
1018 " mov r0, r5\n"
1019 " pop.w {r4, r5, r6, r7, r8, sb, sl, pc}\n"
1020 ".ltorg\n"
1021 );
1022 }
1023
1024
1025
1026
1027 void __attribute__((naked,noinline)) exp_drv_task() {
1028 asm volatile (
1029
1030 " push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}\n"
1031 " sub sp, #0x2c\n"
1032 " ldr.w fp, =0x0000e1d0\n"
1033 " ldr.w sl, =0xfffff400\n"
1034 " movs r0, #0\n"
1035 " ldr.w r8, =0x00065508\n"
1036 " movs r4, #0x47\n"
1037 " add.w sb, sp, #0x1c\n"
1038 " str r0, [sp, #0xc]\n"
1039 "loc_fc2af0e6:\n"
1040 " ldr.w r0, [fp, #0x20]\n"
1041 " movs r2, #0\n"
1042 " add r1, sp, #0x28\n"
1043 " mov r5, fp\n"
1044 " bl sub_fc3446ae\n"
1045 " ldr r0, [sp, #0x28]\n"
1046 " movs r1, #0\n"
1047 " cmp r4, #0x19\n"
1048 " ldr r0, [r0]\n"
1049 " beq loc_fc2af112\n"
1050 " cmp r4, #0x1a\n"
1051 " beq loc_fc2af112\n"
1052 " cmp r4, #0x1b\n"
1053 " beq loc_fc2af112\n"
1054 " cmp r4, #0x1c\n"
1055 " beq loc_fc2af112\n"
1056 " cmp r4, #0x1d\n"
1057 " beq loc_fc2af112\n"
1058 " cmp r4, #0x1e\n"
1059 " bne loc_fc2af134\n"
1060 "loc_fc2af112:\n"
1061 " cmp r0, #0x19\n"
1062 " beq loc_fc2af134\n"
1063 " cmp r0, #0x1a\n"
1064 " beq loc_fc2af134\n"
1065 " cmp r0, #0x1b\n"
1066 " beq loc_fc2af134\n"
1067 " cmp r0, #0x1c\n"
1068 " beq loc_fc2af134\n"
1069 " cmp r0, #0x1d\n"
1070 " beq loc_fc2af134\n"
1071 " cmp r0, #0x1e\n"
1072 " beq loc_fc2af134\n"
1073 " cmp r0, #0x44\n"
1074 " beq loc_fc2af134\n"
1075 " cmp r0, #0x3f\n"
1076 " beq loc_fc2af134\n"
1077 " movs r1, #1\n"
1078 "loc_fc2af134:\n"
1079 " cmp r1, #1\n"
1080 " bne loc_fc2af140\n"
1081 " movs r0, #0\n"
1082 " add r1, sp, #0xc\n"
1083 " bl sub_fc2af086\n"
1084 "loc_fc2af140:\n"
1085 " ldr r0, [sp, #0x28]\n"
1086 " ldr r1, [r0]\n"
1087 " cmp r1, #0x44\n"
1088 " beq loc_fc2af1f2\n"
1089 " cmp r1, #0x47\n"
1090 " mov r4, r1\n"
1091 " bne loc_fc2af164\n"
1092 " bl sub_fc2b039c\n"
1093 " ldr.w r0, [fp, #0x1c]\n"
1094 " movs r1, #1\n"
1095 " bl _SetEventFlag\n"
1096 " bl _ExitTask\n"
1097
1098
1099
1100 "loc_fc2af164:\n"
1101 " cmp r1, #0x46\n"
1102 " bne loc_fc2af176\n"
1103 " add.w r0, r0, #0xac\n"
1104 " ldrd r2, r1, [r0]\n"
1105 " mov r0, r1\n"
1106 " blx r2\n"
1107 " b loc_fc2af63c\n"
1108 "loc_fc2af176:\n"
1109 " cmp r1, #0x3d\n"
1110 " bne loc_fc2af1ae\n"
1111 " ldr r0, [r5, #0x1c]\n"
1112 " movs r1, #0x80\n"
1113 " bl sub_fc369bea\n"
1114 " ldr r0, =0xfc2aa83d\n"
1115 " movs r1, #0x80\n"
1116 " bl sub_fc0ecd82\n"
1117 " ldr r0, [r5, #0x1c]\n"
1118 " movs r1, #0x80\n"
1119 " movw r2, #0xbb8\n"
1120 " bl sub_fc369a40\n"
1121 " lsls r0, r0, #0x1f\n"
1122 " beq loc_fc2af1a0\n"
1123 " movw r2, #0x1aa6\n"
1124 " b loc_fc2af23e\n"
1125 "loc_fc2af1a0:\n"
1126 " ldr r1, [sp, #0x28]\n"
1127 " add.w r1, r1, #0xac\n"
1128 " ldrd r1, r0, [r1]\n"
1129 " blx r1\n"
1130 " b loc_fc2af63c\n"
1131 "loc_fc2af1ae:\n"
1132 " cmp r1, #0x3e\n"
1133 " bne loc_fc2af1e2\n"
1134 " add r1, sp, #0xc\n"
1135 " bl sub_fc2af086\n"
1136 " movw r6, #0x100\n"
1137 " ldr r0, [r5, #0x1c]\n"
1138 " mov r1, r6\n"
1139 " bl sub_fc369bea\n"
1140 " ldr r0, =0xfc2aa847\n"
1141 " mov r1, r6\n"
1142 " bl sub_fc0ed754\n"
1143 " ldr r0, [r5, #0x1c]\n"
1144 " movw r2, #0xbb8\n"
1145 " mov r1, r6\n"
1146 " bl sub_fc369a40\n"
1147 " lsls r0, r0, #0x1f\n"
1148 " beq loc_fc2af1a0\n"
1149 " movw r2, #0x1ab0\n"
1150 " b loc_fc2af23e\n"
1151 "loc_fc2af1e2:\n"
1152 " cmp r1, #0x3f\n"
1153 " bne loc_fc2af1ee\n"
1154 " add r1, sp, #0xc\n"
1155 " bl sub_fc2af086\n"
1156 " b loc_fc2af1a0\n"
1157 "loc_fc2af1ee:\n"
1158 " cmp r1, #0x44\n"
1159 " bne loc_fc2af200\n"
1160 "loc_fc2af1f2:\n"
1161 " bl sub_fc3c6fb0\n"
1162 " bl sub_fc13cd8c\n"
1163 " bl sub_fc13ca6c\n"
1164 " b loc_fc2af1a0\n"
1165 "loc_fc2af200:\n"
1166 " cmp r1, #0x45\n"
1167 " bne loc_fc2af248\n"
1168 " ldr r0, [r5, #0x44]\n"
1169 " bl sub_fc30ecce\n"
1170 " movs r1, #4\n"
1171 " mov r6, r0\n"
1172 " ldr r0, [r5, #0x1c]\n"
1173 " bl sub_fc369bea\n"
1174 " movs r3, #1\n"
1175 " ldr r2, =0xfc2aa85b\n"
1176 " mov r1, r6\n"
1177 " mov r0, sl\n"
1178 " str r3, [sp]\n"
1179 " str r3, [sp, #4]\n"
1180 " movs r3, #4\n"
1181 " bl sub_fc2aae9a\n"
1182 " bl sub_fc3c6cb8\n"
1183 " ldr r0, [r5, #0x1c]\n"
1184 " movs r1, #4\n"
1185 " movw r2, #0xbb8\n"
1186 " bl sub_fc3699c0\n"
1187 " lsls r0, r0, #0x1f\n"
1188 " beq loc_fc2af1a0\n"
1189 " movw r2, #0x1bba\n"
1190 "loc_fc2af23e:\n"
1191 " ldr r1, =0xfc2ab060\n"
1192 " movs r0, #0\n"
1193 " bl _DebugAssert\n"
1194 " b loc_fc2af1a0\n"
1195 "loc_fc2af248:\n"
1196 " movs r6, #1\n"
1197 " cmp r1, #0x17\n"
1198 " beq loc_fc2af252\n"
1199 " cmp r1, #0x18\n"
1200 " bne loc_fc2af290\n"
1201 "loc_fc2af252:\n"
1202 " ldr.w r1, [r0, #0x94]\n"
1203 " mov r5, sb\n"
1204 " add.w r1, r1, r1, lsl #1\n"
1205 " add.w r1, r0, r1, lsl #2\n"
1206 " subs r1, #8\n"
1207 " ldm r1!, {r2, r3, r7}\n"
1208 " stm r5!, {r2, r3, r7}\n"
1209 " bl sub_fc2ad852\n"
1210 " ldr r0, [sp, #0x28]\n"
1211 " add.w r0, r0, #0x94\n"
1212 " ldrd r3, r2, [r0, #0x18]\n"
1213 " ldr r1, [r0]\n"
1214 " sub.w r0, r0, #0x90\n"
1215 " blx r3\n"
1216 " ldr r0, [sp, #0x28]\n"
1217 " bl sub_fc2b0516\n"
1218 " ldr r0, [sp, #0x28]\n"
1219 " add.w r0, r0, #0x94\n"
1220 " ldr r1, [r0]\n"
1221 " ldrd r3, r2, [r0, #0x20]\n"
1222 " b loc_fc2af538\n"
1223 "loc_fc2af290:\n"
1224 " cmp r1, #0x19\n"
1225 " beq loc_fc2af2a8\n"
1226 " cmp r1, #0x1a\n"
1227 " beq loc_fc2af2a8\n"
1228 " cmp r1, #0x1b\n"
1229 " beq loc_fc2af2a8\n"
1230 " cmp r1, #0x1c\n"
1231 " beq loc_fc2af2a8\n"
1232 " cmp r1, #0x1d\n"
1233 " beq loc_fc2af2a8\n"
1234 " cmp r1, #0x1e\n"
1235 " bne loc_fc2af31a\n"
1236 "loc_fc2af2a8:\n"
1237 " add r3, sp, #0xc\n"
1238 " mov r2, sp\n"
1239 " add r1, sp, #0x1c\n"
1240 " bl sub_fc2ada3c\n"
1241 " cmp r0, #1\n"
1242 " mov r5, r0\n"
1243 " beq loc_fc2af2bc\n"
1244 " cmp r5, #5\n"
1245 " bne loc_fc2af2d2\n"
1246 "loc_fc2af2bc:\n"
1247 " ldr r0, [sp, #0x28]\n"
1248 " mov r2, r5\n"
1249 " add.w r0, r0, #0x94\n"
1250 " ldrd r7, r3, [r0, #0x18]\n"
1251 " ldr r1, [r0]\n"
1252 " sub.w r0, r0, #0x90\n"
1253 " blx r7\n"
1254 " b loc_fc2af2f8\n"
1255 "loc_fc2af2d2:\n"
1256 " cmp r5, #2\n"
1257 " beq loc_fc2af2da\n"
1258 " cmp r5, #6\n"
1259 " bne loc_fc2af304\n"
1260 "loc_fc2af2da:\n"
1261 " ldr r0, [sp, #0x28]\n"
1262 " mov r2, r5\n"
1263 " add.w r0, r0, #0x94\n"
1264 " ldrd r7, r3, [r0, #0x18]\n"
1265 " ldr r1, [r0]\n"
1266 " sub.w r0, r0, #0x90\n"
1267 " blx r7\n"
1268 " ldr r0, [sp, #0x28]\n"
1269 " add r1, sp, #0x1c\n"
1270 " mov r2, sp\n"
1271 " bl sub_fc2aee12\n"
1272 "loc_fc2af2f8:\n"
1273 " ldr r2, [sp, #0xc]\n"
1274 " mov r1, r5\n"
1275 " ldr r0, [sp, #0x28]\n"
1276 " bl sub_fc2af036\n"
1277 "loc_fc2af302:\n"
1278 " b loc_fc2af53e\n"
1279 "loc_fc2af304:\n"
1280 " ldr r0, [sp, #0x28]\n"
1281 " mov r2, r5\n"
1282 " add.w r0, r0, #0x94\n"
1283 " ldrd r7, r3, [r0, #0x18]\n"
1284 " ldr r1, [r0]\n"
1285 " sub.w r0, r0, #0x90\n"
1286 " blx r7\n"
1287 " b loc_fc2af53e\n"
1288 "loc_fc2af31a:\n"
1289 " cmp r1, #0x36\n"
1290 " beq loc_fc2af322\n"
1291 " cmp r1, #0x37\n"
1292 " bne loc_fc2af392\n"
1293 "loc_fc2af322:\n"
1294 " ldr.w r1, [r0, #0x94]\n"
1295 " mov r7, sb\n"
1296 " add.w r1, r1, r1, lsl #1\n"
1297 " add.w r1, r0, r1, lsl #2\n"
1298 " subs r1, #8\n"
1299 " ldm r1, {r1, r2, r3}\n"
1300 " stm r7!, {r1, r2, r3}\n"
1301 " bl sub_fc2ac9ea\n"
1302 " ldr r0, [sp, #0x28]\n"
1303 " add.w r0, r0, #0x94\n"
1304 " ldrd r3, r2, [r0, #0x18]\n"
1305 " ldr r1, [r0]\n"
1306 " sub.w r0, r0, #0x90\n"
1307 " blx r3\n"
1308 " bl sub_fc3c6fb0\n"
1309 " bl sub_fc13cd8c\n"
1310 " bl sub_fc13ca6c\n"
1311 " movw r7, #0xbb8\n"
1312 " ldr r0, [r5, #0x1c]\n"
1313 " movs r1, #2\n"
1314 " mov r2, r7\n"
1315 " bl sub_fc369a40\n"
1316 " lsls r0, r0, #0x1f\n"
1317 " beq loc_fc2af376\n"
1318 " ldr r1, =0xfc2ab060\n"
1319 " movs r0, #0\n"
1320 " movw r2, #0xf05\n"
1321 " bl _DebugAssert\n"
1322 "loc_fc2af376:\n"
1323 " ldr r0, [r5, #0x1c]\n"
1324 " movs r1, #0x20\n"
1325 " mov r2, r7\n"
1326 " bl sub_fc369a40\n"
1327 " lsls r0, r0, #0x1f\n"
1328 " beq loc_fc2af302\n"
1329 " ldr r1, =0xfc2ab060\n"
1330 " movs r0, #0\n"
1331 " movw r2, #0xf09\n"
1332 " bl _DebugAssert\n"
1333 " b loc_fc2af53e\n"
1334 "loc_fc2af392:\n"
1335 " adds r2, r0, #4\n"
1336 " mov r1, sb\n"
1337 " ldm r2!, {r3, r5, r7}\n"
1338 " stm r1!, {r3, r5, r7}\n"
1339 " ldr r1, [r0]\n"
1340 " cmp r1, #0x3d\n"
1341 " bhs loc_fc2af3e6\n"
1342 " tbb [pc, r1]\n"
1343 "branchtable_fc2af3a4:\n"
1344 " .byte((loc_fc2af3e2 - branchtable_fc2af3a4) / 2)\n"
1345 " .byte((loc_fc2af3e2 - branchtable_fc2af3a4) / 2)\n"
1346 " .byte((loc_fc2af3e2 - branchtable_fc2af3a4) / 2)\n"
1347 " .byte((loc_fc2af3e8 - branchtable_fc2af3a4) / 2)\n"
1348 " .byte((loc_fc2af3ee - branchtable_fc2af3a4) / 2)\n"
1349 " .byte((loc_fc2af3ee - branchtable_fc2af3a4) / 2)\n"
1350 " .byte((loc_fc2af3ee - branchtable_fc2af3a4) / 2)\n"
1351 " .byte((loc_fc2af3e2 - branchtable_fc2af3a4) / 2)\n"
1352 " .byte((loc_fc2af3e8 - branchtable_fc2af3a4) / 2)\n"
1353 " .byte((loc_fc2af3ee - branchtable_fc2af3a4) / 2)\n"
1354 " .byte((loc_fc2af3ee - branchtable_fc2af3a4) / 2)\n"
1355 " .byte((loc_fc2af400 - branchtable_fc2af3a4) / 2)\n"
1356 " .byte((loc_fc2af400 - branchtable_fc2af3a4) / 2)\n"
1357 " .byte((loc_fc2af406 - branchtable_fc2af3a4) / 2)\n"
1358 " .byte((loc_fc2af406 - branchtable_fc2af3a4) / 2)\n"
1359 " .byte((loc_fc2af406 - branchtable_fc2af3a4) / 2)\n"
1360 " .byte((loc_fc2af406 - branchtable_fc2af3a4) / 2)\n"
1361 " .byte((loc_fc2af51c - branchtable_fc2af3a4) / 2)\n"
1362 " .byte((loc_fc2af522 - branchtable_fc2af3a4) / 2)\n"
1363 " .byte((loc_fc2af522 - branchtable_fc2af3a4) / 2)\n"
1364 " .byte((loc_fc2af522 - branchtable_fc2af3a4) / 2)\n"
1365 " .byte((loc_fc2af522 - branchtable_fc2af3a4) / 2)\n"
1366 " .byte((loc_fc2af528 - branchtable_fc2af3a4) / 2)\n"
1367 " .byte((loc_fc2af52c - branchtable_fc2af3a4) / 2)\n"
1368 " .byte((loc_fc2af52c - branchtable_fc2af3a4) / 2)\n"
1369 " .byte((loc_fc2af52c - branchtable_fc2af3a4) / 2)\n"
1370 " .byte((loc_fc2af52c - branchtable_fc2af3a4) / 2)\n"
1371 " .byte((loc_fc2af52c - branchtable_fc2af3a4) / 2)\n"
1372 " .byte((loc_fc2af52c - branchtable_fc2af3a4) / 2)\n"
1373 " .byte((loc_fc2af52c - branchtable_fc2af3a4) / 2)\n"
1374 " .byte((loc_fc2af52c - branchtable_fc2af3a4) / 2)\n"
1375 " .byte((loc_fc2af3f4 - branchtable_fc2af3a4) / 2)\n"
1376 " .byte((loc_fc2af3fa - branchtable_fc2af3a4) / 2)\n"
1377 " .byte((loc_fc2af3fa - branchtable_fc2af3a4) / 2)\n"
1378 " .byte((loc_fc2af3fa - branchtable_fc2af3a4) / 2)\n"
1379 " .byte((loc_fc2af40c - branchtable_fc2af3a4) / 2)\n"
1380 " .byte((loc_fc2af40c - branchtable_fc2af3a4) / 2)\n"
1381 " .byte((loc_fc2af40c - branchtable_fc2af3a4) / 2)\n"
1382 " .byte((loc_fc2af40c - branchtable_fc2af3a4) / 2)\n"
1383 " .byte((loc_fc2af40c - branchtable_fc2af3a4) / 2)\n"
1384 " .byte((loc_fc2af40c - branchtable_fc2af3a4) / 2)\n"
1385 " .byte((loc_fc2af40c - branchtable_fc2af3a4) / 2)\n"
1386 " .byte((loc_fc2af40c - branchtable_fc2af3a4) / 2)\n"
1387 " .byte((loc_fc2af412 - branchtable_fc2af3a4) / 2)\n"
1388 " .byte((loc_fc2af466 - branchtable_fc2af3a4) / 2)\n"
1389 " .byte((loc_fc2af49a - branchtable_fc2af3a4) / 2)\n"
1390 " .byte((loc_fc2af49a - branchtable_fc2af3a4) / 2)\n"
1391 " .byte((loc_fc2af52c - branchtable_fc2af3a4) / 2)\n"
1392 " .byte((loc_fc2af52c - branchtable_fc2af3a4) / 2)\n"
1393 " .byte((loc_fc2af4a2 - branchtable_fc2af3a4) / 2)\n"
1394 " .byte((loc_fc2af4a2 - branchtable_fc2af3a4) / 2)\n"
1395 " .byte((loc_fc2af4d6 - branchtable_fc2af3a4) / 2)\n"
1396 " .byte((loc_fc2af50a - branchtable_fc2af3a4) / 2)\n"
1397 " .byte((loc_fc2af50a - branchtable_fc2af3a4) / 2)\n"
1398 " .byte((loc_fc2af52c - branchtable_fc2af3a4) / 2)\n"
1399 " .byte((loc_fc2af52c - branchtable_fc2af3a4) / 2)\n"
1400 " .byte((loc_fc2af510 - branchtable_fc2af3a4) / 2)\n"
1401 " .byte((loc_fc2af510 - branchtable_fc2af3a4) / 2)\n"
1402 " .byte((loc_fc2af510 - branchtable_fc2af3a4) / 2)\n"
1403 " .byte((loc_fc2af516 - branchtable_fc2af3a4) / 2)\n"
1404 " .byte((loc_fc2af516 - branchtable_fc2af3a4) / 2)\n"
1405 ".align 1\n"
1406 "loc_fc2af3e2:\n"
1407 " bl sub_fc2ab108\n"
1408 "loc_fc2af3e6:\n"
1409 " b loc_fc2af52c\n"
1410 "loc_fc2af3e8:\n"
1411 " bl sub_fc2ab396\n"
1412 " b loc_fc2af52c\n"
1413 "loc_fc2af3ee:\n"
1414 " bl sub_fc2ab5ca\n"
1415 " b loc_fc2af52c\n"
1416 "loc_fc2af3f4:\n"
1417 " bl sub_fc2ab890\n"
1418 " b loc_fc2af52c\n"
1419 "loc_fc2af3fa:\n"
1420 " bl sub_fc2aba56\n"
1421 " b loc_fc2af52c\n"
1422 "loc_fc2af400:\n"
1423 " bl sub_fc2abeb4\n"
1424 " b loc_fc2af52c\n"
1425 "loc_fc2af406:\n"
1426
1427 " bl sub_fc2abfa6_my\n"
1428 " b loc_fc2af49e\n"
1429 "loc_fc2af40c:\n"
1430 " bl sub_fc2ac0a0\n"
1431 " b loc_fc2af52c\n"
1432 "loc_fc2af412:\n"
1433 " ldrh r1, [r0, #4]\n"
1434 " strh.w r1, [sp, #0x1c]\n"
1435 " ldrh.w r2, [r8, #2]\n"
1436 " strh.w r2, [sp, #0x1e]\n"
1437 " ldrh.w r2, [r8, #4]\n"
1438 " strh.w r2, [sp, #0x20]\n"
1439 " ldrh.w r2, [r8, #6]\n"
1440 " strh.w r2, [sp, #0x22]\n"
1441 " ldrh r2, [r0, #0xc]\n"
1442 " strh.w r2, [sp, #0x24]\n"
1443 " ldrh.w r1, [r8, #0xa]\n"
1444 " strh.w r1, [sp, #0x26]\n"
1445 " b loc_fc2af460\n"
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455 "loc_fc2af460:\n"
1456 " bl sub_fc2ac67a\n"
1457 " b loc_fc2af52c\n"
1458 "loc_fc2af466:\n"
1459 " ldrh r1, [r0, #4]\n"
1460 " strh.w r1, [sp, #0x1c]\n"
1461 " ldrh.w r2, [r8, #2]\n"
1462 " strh.w r2, [sp, #0x1e]\n"
1463 " ldrh.w r2, [r8, #4]\n"
1464 " strh.w r2, [sp, #0x20]\n"
1465 " ldrh.w r2, [r8, #6]\n"
1466 " strh.w r2, [sp, #0x22]\n"
1467 " ldrh.w r2, [r8, #8]\n"
1468 " strh.w r2, [sp, #0x24]\n"
1469 " ldrh.w r1, [r8, #0xa]\n"
1470 " strh.w r1, [sp, #0x26]\n"
1471 " bl sub_fc2ac734\n"
1472 " b loc_fc2af52c\n"
1473 "loc_fc2af49a:\n"
1474 " bl sub_fc2ac734\n"
1475 "loc_fc2af49e:\n"
1476 " movs r6, #0\n"
1477 " b loc_fc2af52c\n"
1478 "loc_fc2af4a2:\n"
1479 " ldrh.w r2, [r8]\n"
1480 " strh.w r2, [sp, #0x1c]\n"
1481 " ldrh r2, [r0, #6]\n"
1482 " strh.w r2, [sp, #0x1e]\n"
1483 " ldrh.w r2, [r8, #4]\n"
1484 " strh.w r2, [sp, #0x20]\n"
1485 " ldrh.w r2, [r8, #6]\n"
1486 " strh.w r2, [sp, #0x22]\n"
1487 " ldrh.w r2, [r8, #8]\n"
1488 " strh.w r2, [sp, #0x24]\n"
1489 " ldrh.w r1, [r8, #0xa]\n"
1490 " strh.w r1, [sp, #0x26]\n"
1491 " bl sub_fc2b0418\n"
1492 " b loc_fc2af52c\n"
1493 "loc_fc2af4d6:\n"
1494 " ldrh.w r2, [r8]\n"
1495 " strh.w r2, [sp, #0x1c]\n"
1496 " ldrh.w r2, [r8, #2]\n"
1497 " strh.w r2, [sp, #0x1e]\n"
1498 " ldrh.w r2, [r8, #4]\n"
1499 " strh.w r2, [sp, #0x20]\n"
1500 " ldrh.w r2, [r8, #6]\n"
1501 " strh.w r2, [sp, #0x22]\n"
1502 " ldrh r2, [r0, #0xc]\n"
1503 " strh.w r2, [sp, #0x24]\n"
1504 " ldrh.w r1, [r8, #0xa]\n"
1505 " strh.w r1, [sp, #0x26]\n"
1506 " bl sub_fc2b04a4\n"
1507 " b loc_fc2af52c\n"
1508 "loc_fc2af50a:\n"
1509 " bl sub_fc2ac7ce\n"
1510 " b loc_fc2af52c\n"
1511 "loc_fc2af510:\n"
1512 " bl sub_fc2acdf4\n"
1513 " b loc_fc2af52c\n"
1514 "loc_fc2af516:\n"
1515 " bl sub_fc2ad1cc\n"
1516 " b loc_fc2af52c\n"
1517 "loc_fc2af51c:\n"
1518 " bl sub_fc2ad416\n"
1519 " b loc_fc2af52c\n"
1520 "loc_fc2af522:\n"
1521 " bl sub_fc2ad57c\n"
1522 " b loc_fc2af52c\n"
1523 "loc_fc2af528:\n"
1524 " bl sub_fc2ad6aa\n"
1525 "loc_fc2af52c:\n"
1526 " ldr r0, [sp, #0x28]\n"
1527 " add.w r0, r0, #0x94\n"
1528 " ldrd r3, r2, [r0, #0x18]\n"
1529 " ldr r1, [r0]\n"
1530 "loc_fc2af538:\n"
1531 " sub.w r0, r0, #0x90\n"
1532 " blx r3\n"
1533 "loc_fc2af53e:\n"
1534 " ldr r0, [sp, #0x28]\n"
1535 " ldr r0, [r0]\n"
1536 " cmp r0, #0x14\n"
1537 " beq loc_fc2af598\n"
1538 " bgt loc_fc2af55a\n"
1539 " cmp r0, #1\n"
1540 " beq loc_fc2af56a\n"
1541 " cmp r0, #5\n"
1542 " beq loc_fc2af56a\n"
1543 " cmp r0, #0x12\n"
1544 " beq loc_fc2af598\n"
1545 " cmp r0, #0x13\n"
1546 " bne loc_fc2af5ae\n"
1547 " b loc_fc2af56a\n"
1548 "loc_fc2af55a:\n"
1549 " cmp r0, #0x15\n"
1550 " beq loc_fc2af56a\n"
1551 " cmp r0, #0x18\n"
1552 " beq loc_fc2af56a\n"
1553 " cmp r0, #0x1e\n"
1554 " beq loc_fc2af56a\n"
1555 " cmp r0, #0x21\n"
1556 " bne loc_fc2af5ae\n"
1557 "loc_fc2af56a:\n"
1558 " ldrsh.w r0, [r8]\n"
1559 " mov r1, r8\n"
1560 " mov r2, sl\n"
1561 " cmp r0, sl\n"
1562 " beq loc_fc2af57e\n"
1563 " ldrsh.w r1, [r1, #8]\n"
1564 " cmp r1, r2\n"
1565 " bne loc_fc2af58e\n"
1566 "loc_fc2af57e:\n"
1567 " add r0, sp, #0x10\n"
1568 " bl sub_fc2f8d90\n"
1569 " ldrh.w r0, [sp, #0x10]\n"
1570 " strh.w r0, [sp, #0x1c]\n"
1571 " b loc_fc2af5a6\n"
1572 "loc_fc2af58e:\n"
1573 " strh.w r0, [sp, #0x1c]\n"
1574 " strh.w r1, [sp, #0x24]\n"
1575 " b loc_fc2af5ae\n"
1576 "loc_fc2af598:\n"
1577 " ldrsh.w r0, [r8, #8]\n"
1578 " cmp r0, sl\n"
1579 " bne loc_fc2af5aa\n"
1580 " add r0, sp, #0x10\n"
1581 " bl sub_fc2f8d90\n"
1582 "loc_fc2af5a6:\n"
1583 " ldrh.w r0, [sp, #0x18]\n"
1584 "loc_fc2af5aa:\n"
1585 " strh.w r0, [sp, #0x24]\n"
1586 "loc_fc2af5ae:\n"
1587 " cmp r6, #1\n"
1588 " ldr r0, [sp, #0x28]\n"
1589 " bne loc_fc2af5e6\n"
1590 " movs r2, #0xc\n"
1591 " ldr.w r1, [r0, #0x94]\n"
1592 " add.w r1, r1, r1, lsl #1\n"
1593 " add.w r5, r0, r1, lsl #2\n"
1594 " ldr r0, =0x00065508\n"
1595 " subs r5, #8\n"
1596 " add r1, sp, #0x1c\n"
1597 " blx sub_fc301de4\n"
1598 " ldr r0, =0x00065508\n"
1599 " movs r2, #0xc\n"
1600 " add r1, sp, #0x1c\n"
1601 " adds r0, #0xc\n"
1602 " blx sub_fc301de4\n"
1603 " ldr r0, =0x00065508\n"
1604 " movs r2, #0xc\n"
1605 " mov r1, r5\n"
1606 " adds r0, #0x18\n"
1607 " blx sub_fc301de4\n"
1608 " b loc_fc2af63c\n"
1609 "loc_fc2af5e6:\n"
1610 " ldr r0, [r0]\n"
1611 " mov.w r3, #1\n"
1612 " cmp r0, #0xf\n"
1613 " bne loc_fc2af610\n"
1614 " movs r2, #0\n"
1615 " mov r1, r3\n"
1616 " strd r2, r3, [sp]\n"
1617 " movs r0, #0\n"
1618 " mov r2, r3\n"
1619 " bl sub_fc2aaed4\n"
1620 " movs r3, #1\n"
1621 " movs r2, #0\n"
1622 " mov r1, r3\n"
1623 " movs r0, #0\n"
1624 " strd r2, r3, [sp]\n"
1625 " mov r2, r3\n"
1626 " b loc_fc2af638\n"
1627 "loc_fc2af610:\n"
1628 " movs r2, #1\n"
1629 " strd r2, r3, [sp]\n"
1630 " mov r3, r2\n"
1631 " mov r1, r2\n"
1632 " mov r0, r2\n"
1633 " bl sub_fc2aaed4\n"
1634 " ldr r0, [sp, #0x28]\n"
1635 " ldr r0, [r0]\n"
1636 " cmp r0, #0x2f\n"
1637 " beq loc_fc2af63c\n"
1638 " cmp r0, #0x30\n"
1639 " beq loc_fc2af63c\n"
1640 " movs r3, #1\n"
1641 " str r3, [sp]\n"
1642 " mov r2, r3\n"
1643 " mov r1, r3\n"
1644 " mov r0, r3\n"
1645 " str r3, [sp, #4]\n"
1646 "loc_fc2af638:\n"
1647 " bl sub_fc2ab084\n"
1648 "loc_fc2af63c:\n"
1649 " ldr r0, [sp, #0x28]\n"
1650 " bl sub_fc2b039c\n"
1651 " b loc_fc2af0e6\n"
1652 ".ltorg\n"
1653 );
1654 }
1655
1656
1657 void __attribute__((naked,noinline)) sub_fc2abfa6_my() {
1658 asm volatile (
1659 " push.w {r4, r5, r6, r7, r8, lr}\n"
1660 " ldr r7, =0x0000e1d0\n"
1661 " movs r1, #0x3e\n"
1662 " mov r4, r0\n"
1663 " ldr r0, [r7, #0x1c]\n"
1664 " bl sub_fc369bea\n"
1665 " movs r2, #0\n"
1666 " ldrsh.w r0, [r4, #4]\n"
1667 " movs r3, #1\n"
1668 " mov r1, r2\n"
1669 " bl sub_fc2aa89c\n"
1670 " mov r6, r0\n"
1671 " ldrsh.w r0, [r4, #6]\n"
1672 " bl sub_fc2aaa36\n"
1673 " ldrsh.w r0, [r4, #8]\n"
1674 " bl sub_fc2aaa7c\n"
1675 " ldrsh.w r0, [r4, #0xa]\n"
1676 " bl sub_fc2aaac2\n"
1677 " ldrsh.w r0, [r4, #0xc]\n"
1678 " movs r1, #0\n"
1679 " bl sub_fc2aab08\n"
1680 " mov r5, r0\n"
1681 " ldr r0, [r4]\n"
1682 " ldr.w r8, =0x00065520\n"
1683 " cmp r0, #0xf\n"
1684 " beq loc_fc2abff8\n"
1685 " cmp r0, #0x10\n"
1686 " bne loc_fc2abffe\n"
1687 "loc_fc2abff8:\n"
1688 " movs r6, #0\n"
1689 " mov r5, r6\n"
1690 " b loc_fc2ac016\n"
1691 "loc_fc2abffe:\n"
1692 " cmp r6, #1\n"
1693 " bne loc_fc2ac016\n"
1694 " ldrsh.w r0, [r4, #4]\n"
1695 " movs r2, #2\n"
1696 " ldr r1, =0xfc2aa833\n"
1697 " bl sub_fc0ecfc6\n"
1698 " strh r0, [r4, #4]\n"
1699 " movs r0, #0\n"
1700 " str r0, [r7, #0x28]\n"
1701 " b loc_fc2ac01c\n"
1702 "loc_fc2ac016:\n"
1703 " ldrh.w r0, [r8]\n"
1704 " strh r0, [r4, #4]\n"
1705 "loc_fc2ac01c:\n"
1706 " cmp r5, #1\n"
1707 " bne loc_fc2ac02e\n"
1708 " ldrsh.w r0, [r4, #0xc]\n"
1709 " movs r2, #0x20\n"
1710 " ldr r1, =0xfc2aa887\n"
1711 " bl sub_fc2b03ee\n"
1712 " b loc_fc2ac032\n"
1713 "loc_fc2ac02e:\n"
1714 " ldrh.w r0, [r8, #8]\n"
1715 "loc_fc2ac032:\n"
1716 " strh r0, [r4, #0xc]\n"
1717 " ldrsh.w r0, [r4, #6]\n"
1718
1719 " bl sub_fc3c6d30_my\n"
1720 " ldr pc, =0xfc2ac03d\n"
1721 ".ltorg\n"
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761 );
1762 }
1763
1764
1765 void __attribute__((naked,noinline)) sub_fc3c6d30_my() {
1766 asm volatile (
1767 " push {r4, r5, r6, lr}\n"
1768 " ldr r5, =0x0000f0f4\n"
1769 " mov r4, r0\n"
1770 " ldr r0, [r5, #4]\n"
1771 " cmp r0, #1\n"
1772 " beq loc_fc3c6d4a\n"
1773 " movw r2, #0x174\n"
1774 " ldr r1, =0xfc3c6d18\n"
1775 " movs r0, #0\n"
1776 " bl _DebugAssert\n"
1777 "loc_fc3c6d4a:\n"
1778 " ldr r0, =0xfffff400\n"
1779 " cmp r4, r0\n"
1780 " bne loc_fc3c6d54\n"
1781 " ldrsh.w r4, [r5, #2]\n"
1782 "loc_fc3c6d54:\n"
1783 " strh r4, [r5, #2]\n"
1784 " cmp r4, r0\n"
1785 " bne loc_fc3c6d68\n"
1786 " movw r2, #0x17a\n"
1787 " ldr r1, =0xfc3c6d18\n"
1788 " movs r0, #0\n"
1789 " bl _DebugAssert\n"
1790 "loc_fc3c6d68:\n"
1791 " mov r0, r4\n"
1792
1793 " bl apex2us\n"
1794 " ldr pc, =0xfc3c6d6f\n"
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810 ".ltorg\n"
1811 );
1812 }