This source file includes following definitions.
- log_capt_seq
- log_capt_seq2
- log_capt_seq_override
- capt_seq_task
- sub_fc0daf9e_my
- sub_fc0dae40_my
- sub_fc11d80e_my
- log_nr_call
- log_remote_hook
- log_rh
- exp_drv_task
- sub_fc2b99c8_my
- sub_fc3604fa_my
1 #include "lolevel.h"
2 #include "platform.h"
3 #include "core.h"
4
5
6
7
8 extern int active_raw_buffer;
9
10 extern void _LogCameraEvent(int id,const char *fmt,...);
11
12 #define USE_STUBS_NRFLAG 1
13 #define NR_AUTO (-1)
14
15 #ifdef CAPTSEQ_DEBUG_LOG
16 extern char *hook_raw_image_addr(void);
17
18 void log_capt_seq(int m)
19 {
20 _LogCameraEvent(0x60,"cs m:%d arb:%d rb:0x%08x i:%04d",
21 m,
22 active_raw_buffer,
23 hook_raw_image_addr(),
24 get_exposure_counter());
25 }
26 void log_capt_seq2(int m)
27 {
28 _LogCameraEvent(0x60,"cs end m:%d arb:%d rb:0x%08x i:%04d",
29 m,
30 active_raw_buffer,
31 hook_raw_image_addr(),
32 get_exposure_counter());
33 }
34 void log_capt_seq_override(void)
35 {
36 _LogCameraEvent(0x60,"cs override arb:%d rb:0x%08x i:%04d",
37 active_raw_buffer,
38 hook_raw_image_addr(),
39 get_exposure_counter());
40 }
41 #endif
42
43 #include "../../../generic/capt_seq.c"
44
45
46 void __attribute__((naked,noinline)) capt_seq_task() {
47 asm volatile (
48 " push {r3, r4, r5, r6, r7, lr}\n"
49 " ldr r4, =0x00059f20\n"
50 " movs r6, #0\n"
51 " ldr r5, =0x0000b378\n"
52 "loc_fc0bd90e:\n"
53 " movs r2, #0\n"
54 " mov r1, sp\n"
55 " ldr r0, [r5, #8]\n"
56 " blx sub_fc302304\n"
57 " lsls r0, r0, #0x1f\n"
58 " beq loc_fc0bd930\n"
59 " movw r2, #0x455\n"
60 " ldr r1, =0xfc0bd504\n"
61 " movs r0, #0\n"
62 " blx sub_fc302464\n"
63 " blx sub_fc30231c\n"
64 " pop {r3, r4, r5, r6, r7, pc}\n"
65 "loc_fc0bd930:\n"
66 " ldr r0, [sp]\n"
67 " ldr r0, [r0]\n"
68 " cmp r0, #1\n"
69 " beq loc_fc0bd948\n"
70 " cmp r0, #0x28\n"
71 " beq loc_fc0bd948\n"
72 " cmp r0, #0x1c\n"
73 " beq loc_fc0bd948\n"
74 " cmp r0, #0x20\n"
75 " beq loc_fc0bd948\n"
76 " bl sub_fc18b49a\n"
77 "loc_fc0bd948:\n"
78 #ifdef CAPTSEQ_DEBUG_LOG
79
80 "ldr r0, [sp]\n"
81 "ldr r0, [r0]\n"
82 "bl log_capt_seq\n"
83 #endif
84 " ldr r0, [sp]\n"
85 " ldr r1, [r0]\n"
86 " cmp r1, #0x2f\n"
87 " bhs loc_fc0bda30\n"
88 " tbb [pc, r1]\n"
89 "branchtable_fc0bd954:\n"
90 " .byte((loc_fc0bd984 - branchtable_fc0bd954) / 2)\n"
91 " .byte((loc_fc0bd99a - branchtable_fc0bd954) / 2)\n"
92 " .byte((loc_fc0bd9a2 - branchtable_fc0bd954) / 2)\n"
93 " .byte((loc_fc0bd9b0 - branchtable_fc0bd954) / 2)\n"
94 " .byte((loc_fc0bd9aa - branchtable_fc0bd954) / 2)\n"
95 " .byte((loc_fc0bd9ba - branchtable_fc0bd954) / 2)\n"
96 " .byte((loc_fc0bd9c0 - branchtable_fc0bd954) / 2)\n"
97 " .byte((loc_fc0bda0c - branchtable_fc0bd954) / 2)\n"
98 " .byte((loc_fc0bd9d0 - branchtable_fc0bd954) / 2)\n"
99 " .byte((loc_fc0bd9d8 - branchtable_fc0bd954) / 2)\n"
100 " .byte((loc_fc0bd9de - branchtable_fc0bd954) / 2)\n"
101 " .byte((loc_fc0bd9f4 - branchtable_fc0bd954) / 2)\n"
102 " .byte((loc_fc0bd9fa - branchtable_fc0bd954) / 2)\n"
103 " .byte((loc_fc0bda00 - branchtable_fc0bd954) / 2)\n"
104 " .byte((loc_fc0bda06 - branchtable_fc0bd954) / 2)\n"
105 " .byte((loc_fc0bda14 - branchtable_fc0bd954) / 2)\n"
106 " .byte((loc_fc0bda1a - branchtable_fc0bd954) / 2)\n"
107 " .byte((loc_fc0bda20 - branchtable_fc0bd954) / 2)\n"
108 " .byte((loc_fc0bda26 - branchtable_fc0bd954) / 2)\n"
109 " .byte((loc_fc0bda2c - branchtable_fc0bd954) / 2)\n"
110 " .byte((loc_fc0bda32 - branchtable_fc0bd954) / 2)\n"
111 " .byte((loc_fc0bda38 - branchtable_fc0bd954) / 2)\n"
112 " .byte((loc_fc0bda3e - branchtable_fc0bd954) / 2)\n"
113 " .byte((loc_fc0bda44 - branchtable_fc0bd954) / 2)\n"
114 " .byte((loc_fc0bda4a - branchtable_fc0bd954) / 2)\n"
115 " .byte((loc_fc0bda50 - branchtable_fc0bd954) / 2)\n"
116 " .byte((loc_fc0bda58 - branchtable_fc0bd954) / 2)\n"
117 " .byte((loc_fc0bda5e - branchtable_fc0bd954) / 2)\n"
118 " .byte((loc_fc0bda62 - branchtable_fc0bd954) / 2)\n"
119 " .byte((loc_fc0bda6a - branchtable_fc0bd954) / 2)\n"
120 " .byte((loc_fc0bda70 - branchtable_fc0bd954) / 2)\n"
121 " .byte((loc_fc0bda9a - branchtable_fc0bd954) / 2)\n"
122 " .byte((loc_fc0bdaa0 - branchtable_fc0bd954) / 2)\n"
123 " .byte((loc_fc0bdaa6 - branchtable_fc0bd954) / 2)\n"
124 " .byte((loc_fc0bdaac - branchtable_fc0bd954) / 2)\n"
125 " .byte((loc_fc0bdab2 - branchtable_fc0bd954) / 2)\n"
126 " .byte((loc_fc0bdab8 - branchtable_fc0bd954) / 2)\n"
127 " .byte((loc_fc0bdac0 - branchtable_fc0bd954) / 2)\n"
128 " .byte((loc_fc0bdac6 - branchtable_fc0bd954) / 2)\n"
129 " .byte((loc_fc0bdaea - branchtable_fc0bd954) / 2)\n"
130 " .byte((loc_fc0bdaf0 - branchtable_fc0bd954) / 2)\n"
131 " .byte((loc_fc0bdb28 - branchtable_fc0bd954) / 2)\n"
132 " .byte((loc_fc0bdafc - branchtable_fc0bd954) / 2)\n"
133 " .byte((loc_fc0bdb02 - branchtable_fc0bd954) / 2)\n"
134 " .byte((loc_fc0bdb08 - branchtable_fc0bd954) / 2)\n"
135 " .byte((loc_fc0bdb0e - branchtable_fc0bd954) / 2)\n"
136 " .byte((loc_fc0bdb14 - branchtable_fc0bd954) / 2)\n"
137 ".align 1\n"
138 "loc_fc0bd984:\n"
139 " ldr r0, [r0, #0xc]\n"
140 " bl sub_fc0d47f2\n"
141 #ifdef CAPTSEQ_DEBUG_LOG
142 "bl log_capt_seq_override\n"
143 #endif
144 "bl shooting_expo_param_override\n"
145 " bl sub_fc0d36ac\n"
146 " ldr r0, [r4, #0x28]\n"
147 " cmp r0, #0\n"
148 " beq loc_fc0bd998\n"
149 " bl sub_fc0daf9e_my\n"
150 "loc_fc0bd998:\n"
151 " b loc_fc0bdb28\n"
152 "loc_fc0bd99a:\n"
153 " ldr r0, [r0, #0x10]\n"
154 " bl sub_fc0dae40_my\n"
155 " b loc_fc0bdb28\n"
156 "loc_fc0bd9a2:\n"
157 " movs r0, #1\n"
158 " bl sub_fc0d4adc\n"
159 " b loc_fc0bdb28\n"
160 "loc_fc0bd9aa:\n"
161 " bl sub_fc0d4534\n"
162 " b loc_fc0bd9b6\n"
163 "loc_fc0bd9b0:\n"
164 " ldr r0, [r0, #0xc]\n"
165 " bl sub_fc0d47da\n"
166 "loc_fc0bd9b6:\n"
167 " str r6, [r4, #0x28]\n"
168 " b loc_fc0bdb28\n"
169 "loc_fc0bd9ba:\n"
170 " bl sub_fc0d47e0\n"
171 " b loc_fc0bdb28\n"
172 "loc_fc0bd9c0:\n"
173 " bl sub_fc0d4a7c\n"
174 " bl sub_fc0d36ac\n"
175 " movs r0, #0\n"
176 " bl sub_fc0a9748\n"
177 " b loc_fc0bdb28\n"
178 "loc_fc0bd9d0:\n"
179 " ldr r0, [r4, #0x54]\n"
180 " bl sub_fc0f8f44\n"
181 " b loc_fc0bdb28\n"
182 "loc_fc0bd9d8:\n"
183 " bl sub_fc0f91d0\n"
184 " b loc_fc0bdb28\n"
185 "loc_fc0bd9de:\n"
186 " ldr r0, [r0, #0xc]\n"
187 " bl sub_fc0f921c\n"
188 " b loc_fc0bdb28\n"
189 ".ltorg\n"
190
191
192
193
194
195
196
197 "loc_fc0bd9f4:\n"
198 " bl sub_fc0f93ee\n"
199 " b loc_fc0bdb28\n"
200 "loc_fc0bd9fa:\n"
201 " bl sub_fc0f9438\n"
202 " b loc_fc0bdb28\n"
203 "loc_fc0bda00:\n"
204 " bl sub_fc0f97ee\n"
205 " b loc_fc0bdb28\n"
206 "loc_fc0bda06:\n"
207 " bl sub_fc0f9884\n"
208 " b loc_fc0bdb28\n"
209 "loc_fc0bda0c:\n"
210 " ldr r0, [r0, #0xc]\n"
211 " bl sub_fc0d47da\n"
212 " b loc_fc0bdb28\n"
213 "loc_fc0bda14:\n"
214 " bl sub_fc0da684\n"
215 " b loc_fc0bdb28\n"
216 "loc_fc0bda1a:\n"
217 " bl sub_fc0da886\n"
218 " b loc_fc0bdb28\n"
219 "loc_fc0bda20:\n"
220 " bl sub_fc0da930\n"
221 " b loc_fc0bdb28\n"
222 "loc_fc0bda26:\n"
223 " bl sub_fc0da9e8\n"
224 " b loc_fc0bdb28\n"
225 "loc_fc0bda2c:\n"
226 " movs r0, #0\n"
227 " b loc_fc0bda52\n"
228 "loc_fc0bda30:\n"
229 " b loc_fc0bdb1a\n"
230 "loc_fc0bda32:\n"
231 " bl sub_fc0dab8c\n"
232 " b loc_fc0bdb28\n"
233 "loc_fc0bda38:\n"
234 " bl sub_fc0dabec\n"
235 " b loc_fc0bdb28\n"
236 "loc_fc0bda3e:\n"
237 " bl sub_fc0dabf0\n"
238 " b loc_fc0bdb28\n"
239 "loc_fc0bda44:\n"
240 " bl sub_fc0dac00\n"
241 " b loc_fc0bdb28\n"
242 "loc_fc0bda4a:\n"
243 " bl sub_fc0dac8c\n"
244 " b loc_fc0bdb28\n"
245 "loc_fc0bda50:\n"
246 " movs r0, #1\n"
247 "loc_fc0bda52:\n"
248 " bl sub_fc0daa6c\n"
249 " b loc_fc0bdb28\n"
250 "loc_fc0bda58:\n"
251 " bl sub_fc0d4bd4\n"
252 " b loc_fc0bdb28\n"
253 "loc_fc0bda5e:\n"
254 " movs r0, #0\n"
255 " b loc_fc0bda64\n"
256 "loc_fc0bda62:\n"
257 " ldr r0, [r0, #0xc]\n"
258 "loc_fc0bda64:\n"
259 " bl sub_fc0d4c08\n"
260 " b loc_fc0bdb28\n"
261 "loc_fc0bda6a:\n"
262 " bl sub_fc110728\n"
263 " b loc_fc0bdb28\n"
264 "loc_fc0bda70:\n"
265 " ldr r1, =0x00059f82\n"
266 " movs r2, #2\n"
267 " movs r0, #0x75\n"
268 " bl sub_fc373838\n"
269 " lsls r0, r0, #0x1f\n"
270 " beq loc_fc0bda8c\n"
271 " movw r2, #0x51a\n"
272 " ldr r1, =0xfc0bd504\n"
273 " movs r0, #0\n"
274 " blx sub_fc302464\n"
275 "loc_fc0bda8c:\n"
276 " ldrh.w r0, [r4, #0x62]\n"
277 " cmp r0, #1\n"
278 " bne loc_fc0bdb28\n"
279 " bl sub_fc110722\n"
280 " b loc_fc0bdb28\n"
281 "loc_fc0bda9a:\n"
282 " bl sub_fc1107ac\n"
283 " b loc_fc0bdb28\n"
284 "loc_fc0bdaa0:\n"
285 " bl sub_fc1108c8\n"
286 " b loc_fc0bdb28\n"
287 "loc_fc0bdaa6:\n"
288 " bl sub_fc0d3eb8\n"
289 " b loc_fc0bdb28\n"
290 "loc_fc0bdaac:\n"
291 " bl sub_fc0d4f4a\n"
292 " b loc_fc0bdb28\n"
293 "loc_fc0bdab2:\n"
294 " bl sub_fc0d5004\n"
295 " b loc_fc0bdb28\n"
296 "loc_fc0bdab8:\n"
297 " ldr r0, [r0, #0xc]\n"
298 " bl sub_fc0dad6c\n"
299 " b loc_fc0bdb28\n"
300 "loc_fc0bdac0:\n"
301 " bl sub_fc0dadbe\n"
302 " b loc_fc0bdb28\n"
303 "loc_fc0bdac6:\n"
304 " bl sub_fc0d58f8\n"
305 " bl sub_fc0d66b2\n"
306 " ldrh.w r0, [r4, #0x1a4]\n"
307 " cmp r0, #4\n"
308 " beq loc_fc0bdae0\n"
309 " ldrh r0, [r4]\n"
310 " sub.w r1, r0, #0x8200\n"
311 " subs r1, #0x36\n"
312 " bne loc_fc0bdb28\n"
313 "loc_fc0bdae0:\n"
314 " bl sub_fc0d5004\n"
315 " bl sub_fc0d5336\n"
316 " b loc_fc0bdb28\n"
317 "loc_fc0bdaea:\n"
318 " movs r2, #0\n"
319 " movs r1, #0x11\n"
320 " b loc_fc0bdaf4\n"
321 "loc_fc0bdaf0:\n"
322 " movs r2, #0\n"
323 " movs r1, #0x10\n"
324 "loc_fc0bdaf4:\n"
325 " movs r0, #0\n"
326 " bl sub_fc0d4046\n"
327 " b loc_fc0bdb28\n"
328 "loc_fc0bdafc:\n"
329 " bl sub_fc111014\n"
330 " b loc_fc0bdb28\n"
331 "loc_fc0bdb02:\n"
332 " bl sub_fc111090\n"
333 " b loc_fc0bdb28\n"
334 "loc_fc0bdb08:\n"
335 " bl sub_fc1110d0\n"
336 " b loc_fc0bdb28\n"
337 "loc_fc0bdb0e:\n"
338 " bl sub_fc110f58\n"
339 " b loc_fc0bdb28\n"
340 "loc_fc0bdb14:\n"
341 " bl sub_fc110f5a\n"
342 " b loc_fc0bdb28\n"
343 "loc_fc0bdb1a:\n"
344 " movw r2, #0x588\n"
345 " ldr r1, =0xfc0bd504\n"
346 " movs r0, #0\n"
347 " blx sub_fc302464\n"
348 "loc_fc0bdb28:\n"
349 #ifdef CAPTSEQ_DEBUG_LOG
350
351 "ldr r0, [sp]\n"
352 "ldr r0, [r0]\n"
353 "bl log_capt_seq2\n"
354 #endif
355 " ldr r0, [sp]\n"
356 " ldr r1, [r0, #4]\n"
357 " ldr r0, [r5, #4]\n"
358 " blx sub_fc302354\n"
359 " ldr r7, [sp]\n"
360 " ldr r0, [r7, #8]\n"
361 " cbnz r0, loc_fc0bdb46\n"
362 " movw r2, #0x12b\n"
363 " ldr r1, =0xfc0bd504\n"
364 " movs r0, #0\n"
365 " blx sub_fc302464\n"
366 "loc_fc0bdb46:\n"
367 " str r6, [r7, #8]\n"
368 " b loc_fc0bd90e\n"
369 ".ltorg\n"
370 );
371 }
372
373
374 void __attribute__((naked,noinline)) sub_fc0daf9e_my() {
375 asm volatile (
376 " push {r4, lr}\n"
377 " bl sub_fc0f8b2c\n"
378 " mov r4, r0\n"
379 " bl sub_fc0d47e6\n"
380 " bl sub_fc143c98\n"
381 " mov r1, r4\n"
382 " bl sub_fc143ce6\n"
383 " movs r2, #4\n"
384 " movw r0, #0x116\n"
385 " add.w r1, r4, #0x34\n"
386 " bl sub_fc3736e6\n"
387 " movs r2, #4\n"
388 " movs r0, #0x30\n"
389 " add.w r1, r4, #0x38\n"
390 " bl sub_fc3736e6\n"
391 " movs r2, #4\n"
392 " movs r0, #0x44\n"
393 " add.w r1, r4, #8\n"
394 " bl sub_fc3736e6\n"
395 " bl sub_fc18afda\n"
396 " mvn r1, #0x1000\n"
397 " blx sub_fc302404\n"
398 " mov r0, r4\n"
399 " bl sub_fc18acac\n"
400 " bl sub_fc256ca2\n"
401 " bl sub_fc0ab14a\n"
402 " mov r0, r4\n"
403 " bl sub_fc11d80e_my\n"
404 " lsls r0, r0, #0x1f\n"
405 " beq loc_fc0db004\n"
406 " ldr r1, =0x000132fc\n"
407 " movs r0, #1\n"
408 " str r0, [r1]\n"
409 "loc_fc0db004:\n"
410 " pop {r4, pc}\n"
411 ".ltorg\n"
412 );
413 }
414
415
416 void __attribute__((naked,noinline)) sub_fc0dae40_my() {
417 asm volatile (
418 " push {r3, r4, r5, r6, r7, lr}\n"
419 " ldr r6, =0x00059f20\n"
420 " mov r5, r0\n"
421 " movs r4, #0\n"
422 " ldr r0, [r6, #0x28]\n"
423 " cbz r0, loc_fc0dae68\n"
424 " ldr r0, =0x000132fc\n"
425 " ldr r0, [r0]\n"
426 " cbz r0, loc_fc0dae54\n"
427 " movs r4, #0x1d\n"
428 "loc_fc0dae54:\n"
429 " mov r2, r5\n"
430 " movs r1, #2\n"
431 " mov r0, r4\n"
432 " bl sub_fc0d4046\n"
433 " mov r1, r4\n"
434 " mov r0, r5\n"
435 " bl sub_fc18b326\n"
436 " b loc_fc0daf94\n"
437 "loc_fc0dae68:\n"
438 " bl sub_fc143c98\n"
439 " mov r1, r5\n"
440 " bl sub_fc143ce6\n"
441 " movs r2, #4\n"
442 " movw r0, #0x116\n"
443 " add.w r1, r5, #0x34\n"
444 " bl sub_fc3736e6\n"
445 " movs r2, #4\n"
446 " movs r0, #0x30\n"
447 " add.w r1, r5, #0x38\n"
448 " bl sub_fc3736e6\n"
449 " ldr.w r0, [r6, #0x10c]\n"
450 " cbnz r0, loc_fc0daea2\n"
451 " ldrh.w r0, [r6, #0x1a2]\n"
452 " cmp r0, #3\n"
453 " beq loc_fc0daea8\n"
454 " ldr r0, [r5, #8]\n"
455 " cmp r0, #1\n"
456 " bhi loc_fc0daeb8\n"
457 " b loc_fc0daea8\n"
458 "loc_fc0daea2:\n"
459 " ldr r0, [r5, #0xc]\n"
460 " cmp r0, #1\n"
461 " bne loc_fc0daeb8\n"
462 "loc_fc0daea8:\n"
463 " movs r0, #0xc\n"
464 " bl sub_fc325ca4\n"
465 " lsls r0, r0, #0x1f\n"
466 " beq loc_fc0daeb8\n"
467 " bl sub_fc0d3eae\n"
468 " movs r4, #1\n"
469 "loc_fc0daeb8:\n"
470 " lsls r0, r4, #0x1f\n"
471 " bne loc_fc0daf82\n"
472 " ldr.w r0, [r6, #0xec]\n"
473 " cbz r0, loc_fc0daedc\n"
474 " ldrh.w r0, [r6, #0x1a2]\n"
475 " cmp r0, #3\n"
476 " beq loc_fc0daed0\n"
477 " ldr r0, [r5, #8]\n"
478 " cmp r0, #1\n"
479 " bhi loc_fc0daf22\n"
480 "loc_fc0daed0:\n"
481 " ldr.w r0, [r6, #0x10c]\n"
482 " cbz r0, loc_fc0daedc\n"
483 " ldr r0, [r5, #0xc]\n"
484 " cmp r0, #1\n"
485 " bhi loc_fc0daf22\n"
486 "loc_fc0daedc:\n"
487 " bl sub_fc111174\n"
488 " cbnz r0, loc_fc0daf22\n"
489 " movs r2, #2\n"
490 " mov r1, sp\n"
491 " movw r0, #0x110\n"
492 " bl sub_fc373838\n"
493 " lsls r0, r0, #0x1f\n"
494 " beq loc_fc0daefc\n"
495 " movs r2, #0xcb\n"
496 " movs r0, #0\n"
497 " ldr r1, =0xfc0db020\n"
498 " blx sub_fc302464\n"
499 "loc_fc0daefc:\n"
500 " ldrsh.w r0, [sp]\n"
501 " bl sub_fc130d60\n"
502 " bl sub_fc130c28\n"
503 " cmp r0, #1\n"
504 " bls loc_fc0daf14\n"
505 " movs r0, #0\n"
506 " bl sub_fc130cf0\n"
507 " b loc_fc0daf22\n"
508 "loc_fc0daf14:\n"
509 " bl sub_fc0d3eae\n"
510 " bl sub_fc325ce4\n"
511 " movs r4, #1\n"
512 " lsls r0, r4, #0x1f\n"
513 " bne loc_fc0daf82\n"
514 "loc_fc0daf22:\n"
515 " mov r0, r5\n"
516 " bl sub_fc11092e\n"
517 " mov r4, r0\n"
518 " lsls r0, r0, #0x1f\n"
519 " bne loc_fc0daf82\n"
520 " bl sub_fc18afda\n"
521 " mvn r1, #0x1000\n"
522 " blx sub_fc302404\n"
523 " bl sub_fc256ca2\n"
524 " bl sub_fc0ab14a\n"
525 " mov r0, r5\n"
526 " bl sub_fc11d540\n"
527 " mov r4, r0\n"
528 " lsls r0, r0, #0x1f\n"
529 " bne loc_fc0daf82\n"
530 " bl sub_fc0d47e6\n"
531 " mov r0, r5\n"
532 " bl sub_fc18acac\n"
533 " movs r0, #2\n"
534 " bl sub_fc0d61ba\n"
535 " ldr.w r0, [r6, #0xb0]\n"
536 " cbz r0, loc_fc0daf6c\n"
537 " mov r0, r5\n"
538 " bl sub_fc11ddf0\n"
539 " b loc_fc0daf94\n"
540 "loc_fc0daf6c:\n"
541 " ldr.w r0, [r6, #0xb4]\n"
542 " cmp r0, #0\n"
543 " mov r0, r5\n"
544 " beq loc_fc0daf7c\n"
545 " bl sub_fc11da6e\n"
546 " b loc_fc0daf94\n"
547 "loc_fc0daf7c:\n"
548 " bl sub_fc11d80e_my\n"
549 " b loc_fc0daf94\n"
550 "loc_fc0daf82:\n"
551 " movs r1, #2\n"
552 " mov r2, r5\n"
553 " mov r0, r4\n"
554 " bl sub_fc0d4046\n"
555 " mov r1, r4\n"
556 " mov r0, r5\n"
557 " bl sub_fc18b45c\n"
558 "loc_fc0daf94:\n"
559 " bl sub_fc0f942a\n"
560 " movs r0, #0\n"
561 " str r0, [r6, #0x28]\n"
562 " pop {r3, r4, r5, r6, r7, pc}\n"
563 ".ltorg\n"
564 );
565 }
566
567
568 void __attribute__((naked,noinline)) sub_fc11d80e_my() {
569 asm volatile (
570 " push.w {r2, r3, r4, r5, r6, r7, r8, sb, sl, lr}\n"
571 " ldr r6, =0xfc11d7e9\n"
572 " mov r5, r0\n"
573 " bl sub_fc18ac42\n"
574 " bl sub_fc0db464\n"
575 " ldr r7, =0x00059f20\n"
576 " ldr.w r0, [r7, #0xa4]\n"
577 " cbnz r0, loc_fc11d83c\n"
578 " ldrh.w r0, [r7, #0x1a2]\n"
579 " cmp r0, #3\n"
580 " beq loc_fc11d834\n"
581 " ldr r0, [r5, #8]\n"
582 " cmp r0, #1\n"
583 " bhi loc_fc11d83c\n"
584 "loc_fc11d834:\n"
585 " bl sub_fc0d4bf6\n"
586 " bl sub_fc0db046\n"
587 "loc_fc11d83c:\n"
588 " movs r2, #4\n"
589 " movw r0, #0x137\n"
590 " add r1, sp, #4\n"
591 " bl sub_fc373838\n"
592 " lsls r0, r0, #0x1f\n"
593 " beq loc_fc11d858\n"
594 " movs r0, #0\n"
595 " movw r2, #0x156\n"
596 " ldr r1, =0xfc11da18\n"
597 " blx sub_fc302464\n"
598 "loc_fc11d858:\n"
599 " BL wait_until_remote_button_is_released\n"
600 #ifdef CAPTSEQ_DEBUG_LOG
601 "bl log_remote_hook\n"
602 #endif
603 " ldr r0, [sp, #4]\n"
604 " ubfx r0, r0, #8, #8\n"
605 " cmp r0, #6\n"
606 " bne loc_fc11d868\n"
607 " ldr r0, =0xfc11d7e9\n"
608 " movs r1, #0\n"
609 " b loc_fc11d86c\n"
610 "loc_fc11d868:\n"
611 " ldr r0, =0xfc18a9fd\n"
612 " mov r1, r5\n"
613 "loc_fc11d86c:\n"
614 " bl sub_fc155364\n"
615 " ldr.w r0, [r7, #0x18c]\n"
616 " cbz r0, loc_fc11d87a\n"
617 " bl sub_fc18ab58\n"
618 "loc_fc11d87a:\n"
619 " movs r0, #0\n"
620 " bl sub_fc0be0b0\n"
621 " bl sub_fc111222\n"
622 " ldr.w r8, =0xfc11d7e9\n"
623 " mov r4, r0\n"
624 " lsls r0, r0, #0x1f\n"
625 " bne loc_fc11d98c\n"
626 "bl capt_seq_hook_set_nr\n"
627 #ifdef CAPTSEQ_DEBUG_LOG
628 "bl log_nr_call\n"
629 #endif
630 " mov r0, r5\n"
631 " bl sub_fc18adaa\n"
632 " mov r0, r5\n"
633 " bl sub_fc11112c\n"
634 " ldr r1, =0x0003eea0\n"
635 " movs r2, #4\n"
636 " movs r0, #0x90\n"
637 " bl sub_fc373838\n"
638 " lsls r0, r0, #0x1f\n"
639 " beq loc_fc11d8b4\n"
640 " movs r0, #0\n"
641 " movw r2, #0x171\n"
642 " ldr r1, =0xfc11da18\n"
643 " blx sub_fc302464\n"
644 "loc_fc11d8b4:\n"
645 " bl sub_fc0be1e4\n"
646 " bl sub_fc18ae3c\n"
647 " movs r1, #0\n"
648 " mov r0, r5\n"
649 " bl sub_fc11d7ea\n"
650 " mov r6, r0\n"
651 " ldr r0, [sp, #4]\n"
652 " ubfx r0, r0, #8, #8\n"
653 " cmp r0, #6\n"
654 " bne loc_fc11d8d4\n"
655 " ldr r2, =0xfc18ab27\n"
656 " b loc_fc11d8d6\n"
657 "loc_fc11d8d4:\n"
658 " ldr r2, =0xfc18ab3d\n"
659 "loc_fc11d8d6:\n"
660 " ldrh r0, [r5, #0x18]\n"
661 " ldr r4, =0x0003eea0\n"
662 " cbz r0, loc_fc11d8e4\n"
663 " cmp r0, #1\n"
664 " beq loc_fc11d8fa\n"
665 " cmp r0, #4\n"
666 " bne loc_fc11d94a\n"
667 "loc_fc11d8e4:\n"
668 " str r6, [sp]\n"
669 " mov r3, r2\n"
670 " ldr r1, [r5, #0x38]\n"
671 " mov r0, r5\n"
672 " ldr r2, [r4]\n"
673 " bl sub_fc18a850\n"
674 " mov r4, r0\n"
675 " bl sub_fc2b73c2\n"
676 " b loc_fc11d958\n"
677 "loc_fc11d8fa:\n"
678 " str r6, [sp]\n"
679 " mov r3, r2\n"
680 " ldr r1, [r5, #0x38]\n"
681 " mov sb, r4\n"
682 " ldr r2, [r4]\n"
683 " mov r0, r5\n"
684 " bl sub_fc18a8b0\n"
685 " movs r2, #1\n"
686 " mov r4, r0\n"
687 " movs r1, #0\n"
688 " movs r0, #0x45\n"
689 " bl sub_fc0ab2ec\n"
690 " lsls r0, r4, #0x1f\n"
691 " bne loc_fc11d958\n"
692 " ldr r0, =0xfc11d7e9\n"
693 " movs r1, #0\n"
694 " bl sub_fc155364\n"
695 " movs r1, #1\n"
696 " mov r0, r5\n"
697 " bl sub_fc11d7ea\n"
698 " mov r6, r0\n"
699 " ldr.w r0, [sb]\n"
700 " mov r4, sb\n"
701 " bl sub_fc18abc0\n"
702 " ldr r1, [r5, #0x38]\n"
703 " mov r3, r6\n"
704 " ldr r2, [r4]\n"
705 " mov r0, r5\n"
706 " bl sub_fc18a91e\n"
707 " mov r4, r0\n"
708 " bl sub_fc18a7fa\n"
709 " b loc_fc11d958\n"
710 "loc_fc11d94a:\n"
711 " movs r0, #0\n"
712 " movw r2, #0x1aa\n"
713 " ldr r1, =0xfc11da18\n"
714 " blx sub_fc302464\n"
715 " movs r4, #0x1d\n"
716 "loc_fc11d958:\n"
717 " bl sub_fc18ae40\n"
718 " lsls r0, r4, #0x1f\n"
719 " bne loc_fc11d9c2\n"
720 " mov r0, r5\n"
721 " bl sub_fc18ae56\n"
722 " ldr.w r0, [r7, #0x108]\n"
723 " cbnz r0, loc_fc11d98a\n"
724 " mov r0, r5\n"
725 " bl sub_fc11116e\n"
726 " cbnz r0, loc_fc11d98a\n"
727 " mov r0, r5\n"
728 " bl sub_fc18b59a\n"
729 " lsls r0, r0, #0x1f\n"
730 " beq loc_fc11d98a\n"
731 " movs r0, #0\n"
732 " movw r2, #0x1d0\n"
733 " ldr r1, =0xfc11da18\n"
734 " blx sub_fc302464\n"
735 "loc_fc11d98a:\n"
736 " b loc_fc11d98e\n"
737 "loc_fc11d98c:\n"
738 " b loc_fc11d9c2\n"
739 "loc_fc11d98e:\n"
740 #ifdef CAPTSEQ_DEBUG_LOG
741 "bl log_rh\n"
742 #endif
743 "BL capt_seq_hook_raw_here\n"
744 " mov r0, r5\n"
745 " bl sub_fc18ae2c\n"
746 " mov r0, r5\n"
747 " bl sub_fc18ae00\n"
748 " cmp r6, r8\n"
749 " beq loc_fc11d9c2\n"
750 " bl sub_fc18afda\n"
751 " movs r1, #4\n"
752 " movw sb, #0x1dd\n"
753 " ldr r3, =0xfc11da18\n"
754 " movw r2, #0x3a98\n"
755 " str.w sb, [sp]\n"
756 " bl sub_fc325e5c\n"
757 " cbz r0, loc_fc11d9c2\n"
758 " movs r0, #0\n"
759 " mov r2, sb\n"
760 " ldr r1, =0xfc11da18\n"
761 " blx sub_fc302464\n"
762 "loc_fc11d9c2:\n"
763 " ldr.w r0, [r7, #0x18c]\n"
764 " cbz r0, loc_fc11d9d2\n"
765 " movs r2, #1\n"
766 " movs r1, #0\n"
767 " movs r0, #0x46\n"
768 " bl sub_fc0ab2ec\n"
769 "loc_fc11d9d2:\n"
770 " movs r1, #2\n"
771 " mov r2, r5\n"
772 " mov r0, r4\n"
773 " bl sub_fc0d4046\n"
774 " ldr r0, [r7, #0x28]\n"
775 " cmp r0, #0\n"
776 " mov r0, r8\n"
777 " beq loc_fc11d9f8\n"
778 " cmp r6, r0\n"
779 " beq loc_fc11d9ec\n"
780 " movs r1, #1\n"
781 "loc_fc11d9ea:\n"
782 " b loc_fc11d9ee\n"
783 "loc_fc11d9ec:\n"
784 " movs r1, #0\n"
785 "loc_fc11d9ee:\n"
786 " mov r2, r4\n"
787 " mov r0, r5\n"
788 " bl sub_fc18b2e4\n"
789 " b loc_fc11da0a\n"
790 "loc_fc11d9f8:\n"
791 " cmp r6, r0\n"
792 " beq loc_fc11da00\n"
793 " movs r1, #1\n"
794 " b loc_fc11da02\n"
795 "loc_fc11da00:\n"
796 " movs r1, #0\n"
797 "loc_fc11da02:\n"
798 " mov r2, r4\n"
799 " mov r0, r5\n"
800 " bl sub_fc18b29e\n"
801 "loc_fc11da0a:\n"
802 " mov r0, r4\n"
803 " pop.w {r2, r3, r4, r5, r6, r7, r8, sb, sl, pc}\n"
804 ".ltorg\n"
805 );
806 }
807
808 #ifdef CAPTSEQ_DEBUG_LOG
809 void log_nr_call(void) {
810 _LogCameraEvent(0x60,"nr hook %d",_nrflag);
811 }
812 void log_remote_hook(void) {
813 _LogCameraEvent(0x60,"remote hook");
814 }
815 void log_rh(void) {
816 _LogCameraEvent(0x60,"raw hook");
817 }
818 #endif
819
820
821 void __attribute__((naked,noinline)) exp_drv_task() {
822 asm volatile (
823
824 " push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}\n"
825 " sub sp, #0x2c\n"
826 " ldr.w sb, =0x0000d2f8\n"
827 " ldr.w fp, =0xfffff400\n"
828 " movs r0, #0\n"
829 " ldr r6, =0x00066bd0\n"
830 " add.w r8, sp, #0x1c\n"
831 " movw sl, #0xbb8\n"
832 " str r0, [sp, #0xc]\n"
833 "loc_fc2bc88c:\n"
834 " ldr.w r0, [sb, #0x24]\n"
835 " movs r2, #0\n"
836 " add r1, sp, #0x28\n"
837 " mov r4, sb\n"
838 " blx sub_fc302304\n"
839 " ldr r0, [sp, #0xc]\n"
840 " cmp r0, #1\n"
841 " bne loc_fc2bc8c8\n"
842 " ldr r0, [sp, #0x28]\n"
843 " ldr r0, [r0]\n"
844 " cmp r0, #0x15\n"
845 "loc_fc2bc8a6:\n"
846 " beq loc_fc2bc984\n"
847 " cmp r0, #0x16\n"
848 " beq loc_fc2bc8a6\n"
849 " cmp r0, #0x17\n"
850 " beq loc_fc2bc8a6\n"
851 " cmp r0, #0x18\n"
852 " beq loc_fc2bc8a6\n"
853 " cmp r0, #0x19\n"
854 " beq loc_fc2bc8a6\n"
855 " cmp r0, #0x1a\n"
856 " beq loc_fc2bc8a6\n"
857 " cmp r0, #0x31\n"
858 " beq loc_fc2bc98a\n"
859 " movs r0, #0\n"
860 " add r1, sp, #0xc\n"
861 " bl sub_fc2bc5ae\n"
862 "loc_fc2bc8c8:\n"
863 " ldr r0, [sp, #0x28]\n"
864 " ldr r1, [r0]\n"
865 " cmp r1, #0x39\n"
866 " bne loc_fc2bc8e6\n"
867 " bl sub_fc2bd910\n"
868 " ldr.w r0, [sb, #0x20]\n"
869 " movs r1, #1\n"
870 " blx sub_fc302354\n"
871 " blx sub_fc30231c\n"
872 " add sp, #0x2c\n"
873 " b loc_fc2bc300\n"
874 "loc_fc2bc8e6:\n"
875 " cmp r1, #0x38\n"
876 " bne loc_fc2bc8f8\n"
877 "loc_fc2bc8ea:\n"
878 " add.w r0, r0, #0xac\n"
879 " ldrd r2, r1, [r0]\n"
880 " mov r0, r1\n"
881 " blx r2\n"
882 " b loc_fc2bcd6e\n"
883 "loc_fc2bc8f8:\n"
884 " cmp r1, #0x2f\n"
885 " bne loc_fc2bc92e\n"
886 " ldr r0, [r4, #0x20]\n"
887 " movs r1, #0x80\n"
888 " blx sub_fc302404\n"
889 " ldr r0, =0xfc2b8827\n"
890 " movs r1, #0x80\n"
891 " bl sub_fc318c76\n"
892 " ldr r0, [r4, #0x20]\n"
893 " movs r1, #0x80\n"
894 " mov r2, sl\n"
895 " blx sub_fc3022d4\n"
896 " lsls r0, r0, #0x1f\n"
897 " beq loc_fc2bc920\n"
898 " movw r2, #0x198a\n"
899 " b loc_fc2bc9f0\n"
900 "loc_fc2bc920:\n"
901 " ldr r1, [sp, #0x28]\n"
902 " add.w r1, r1, #0xac\n"
903 " ldrd r1, r0, [r1]\n"
904 " blx r1\n"
905 " b loc_fc2bcd6e\n"
906 "loc_fc2bc92e:\n"
907 " cmp r1, #0x30\n"
908 " bne loc_fc2bc986\n"
909 " add r1, sp, #0xc\n"
910 " bl sub_fc2bc5ae\n"
911 " movw r5, #0x100\n"
912 " ldr r0, [r4, #0x20]\n"
913 " mov r1, r5\n"
914 " blx sub_fc302404\n"
915 " ldr r0, =0xfc2b8831\n"
916 " mov r1, r5\n"
917 " bl sub_fc318e20\n"
918 " ldr r0, [r4, #0x20]\n"
919 " mov r2, sl\n"
920 " mov r1, r5\n"
921 " blx sub_fc3022d4\n"
922 " lsls r0, r0, #0x1f\n"
923 " beq loc_fc2bc920\n"
924 " movw r2, #0x1994\n"
925 " b loc_fc2bc9f0\n"
926
927
928
929
930
931
932
933
934
935
936
937
938
939 "loc_fc2bc984:\n"
940 " b loc_fc2bc9fa\n"
941 "loc_fc2bc986:\n"
942 " cmp r1, #0x31\n"
943 " bne loc_fc2bc994\n"
944 "loc_fc2bc98a:\n"
945 " ldr r0, [sp, #0x28]\n"
946 " add r1, sp, #0xc\n"
947 " bl sub_fc2bc5ae\n"
948 " b loc_fc2bc920\n"
949 "loc_fc2bc994:\n"
950 " cmp r1, #0x32\n"
951 " bne loc_fc2bc9ae\n"
952 " bl sub_fc2bc5f2\n"
953 " ldr r1, [sp, #0x28]\n"
954 " add.w r1, r1, #0xac\n"
955 " ldrd r1, r0, [r1]\n"
956 " blx r1\n"
957 " bl sub_fc20cffe\n"
958 " b loc_fc2bcd6e\n"
959 "loc_fc2bc9ae:\n"
960 " cmp r1, #0x33\n"
961 " beq loc_fc2bc8ea\n"
962 " cmp r1, #0x36\n"
963 " bne loc_fc2bc9c4\n"
964 " bl sub_fc36073c\n"
965 " bl sub_fc20d308\n"
966 " bl sub_fc20cffe\n"
967 " b loc_fc2bc920\n"
968 "loc_fc2bc9c4:\n"
969 " cmp r1, #0x37\n"
970 " bne loc_fc2bc9fa\n"
971 " ldr r0, [r4, #0x20]\n"
972 " movs r1, #4\n"
973 " blx sub_fc302404\n"
974 " ldr r1, =0xfc2b8845\n"
975 " movs r2, #4\n"
976 " mov r0, fp\n"
977 " bl sub_fc2bd962\n"
978 " bl sub_fc3604a0\n"
979 " ldr r0, [r4, #0x20]\n"
980 " movs r1, #4\n"
981 " mov r2, sl\n"
982 " blx sub_fc302454\n"
983 " lsls r0, r0, #0x1f\n"
984 " beq loc_fc2bc920\n"
985 " movw r2, #0x1a77\n"
986 "loc_fc2bc9f0:\n"
987 " ldr r1, =0xfc2b8c0c\n"
988 " movs r0, #0\n"
989 " blx sub_fc302464\n"
990 " b loc_fc2bc920\n"
991 "loc_fc2bc9fa:\n"
992 " ldr r0, [sp, #0x28]\n"
993 " movs r5, #1\n"
994 " ldr r1, [r0]\n"
995 " cmp r1, #0x13\n"
996 " beq loc_fc2bca08\n"
997 " cmp r1, #0x14\n"
998 " bne loc_fc2bca46\n"
999 "loc_fc2bca08:\n"
1000 " ldr.w r1, [r0, #0x94]\n"
1001 " mov r4, r8\n"
1002 " add.w r1, r1, r1, lsl #1\n"
1003 " add.w r1, r0, r1, lsl #2\n"
1004 " subs r1, #8\n"
1005 " ldm r1!, {r2, r3, r7}\n"
1006 " stm r4!, {r2, r3, r7}\n"
1007 " bl sub_fc2baf26\n"
1008 " ldr r0, [sp, #0x28]\n"
1009 " add.w r0, r0, #0x94\n"
1010 " ldrd r3, r2, [r0, #0x18]\n"
1011 " ldr r1, [r0]\n"
1012 " sub.w r0, r0, #0x90\n"
1013 " blx r3\n"
1014 " ldr r0, [sp, #0x28]\n"
1015 " bl sub_fc2bdb8c\n"
1016 " ldr r0, [sp, #0x28]\n"
1017 " add.w r0, r0, #0x94\n"
1018 " ldr r1, [r0]\n"
1019 " ldrd r3, r2, [r0, #0x20]\n"
1020 " b loc_fc2bcc90\n"
1021 "loc_fc2bca46:\n"
1022 " cmp r1, #0x15\n"
1023 " beq loc_fc2bca5e\n"
1024 " cmp r1, #0x16\n"
1025 " beq loc_fc2bca5e\n"
1026 " cmp r1, #0x17\n"
1027 " beq loc_fc2bca5e\n"
1028 " cmp r1, #0x18\n"
1029 " beq loc_fc2bca5e\n"
1030 " cmp r1, #0x19\n"
1031 " beq loc_fc2bca5e\n"
1032 " cmp r1, #0x1a\n"
1033 " bne loc_fc2bcaca\n"
1034 "loc_fc2bca5e:\n"
1035 " bl sub_fc36073c\n"
1036 " ldr r0, [sp, #0x28]\n"
1037 " add r3, sp, #0xc\n"
1038 " add r1, sp, #0x1c\n"
1039 " mov r2, sp\n"
1040 " bl sub_fc2bb104\n"
1041 " cmp r0, #1\n"
1042 " mov r4, r0\n"
1043 " beq loc_fc2bca78\n"
1044 " cmp r4, #5\n"
1045 " bne loc_fc2bca98\n"
1046 "loc_fc2bca78:\n"
1047 " ldr r0, [sp, #0x28]\n"
1048 " mov r2, r4\n"
1049 " add.w r0, r0, #0x94\n"
1050 " ldrd r7, r3, [r0, #0x18]\n"
1051 " ldr r1, [r0]\n"
1052 " sub.w r0, r0, #0x90\n"
1053 " blx r7\n"
1054 " ldr r2, [sp, #0xc]\n"
1055 " mov r1, r4\n"
1056 " ldr r0, [sp, #0x28]\n"
1057 " bl sub_fc2bc56c\n"
1058 "loc_fc2bca96:\n"
1059 " b loc_fc2bcc96\n"
1060 "loc_fc2bca98:\n"
1061 " cmp r4, #2\n"
1062 " beq loc_fc2bcaa0\n"
1063 " cmp r4, #6\n"
1064 " bne loc_fc2bcab4\n"
1065 "loc_fc2bcaa0:\n"
1066 " ldr r0, [sp, #0x28]\n"
1067 " add r1, sp, #0x1c\n"
1068 " mov r2, sp\n"
1069 " bl sub_fc2bc304\n"
1070 " ldr r2, [sp, #0xc]\n"
1071 " mov r1, r4\n"
1072 " ldr r0, [sp, #0x28]\n"
1073 " bl sub_fc2bc56c\n"
1074 "loc_fc2bcab4:\n"
1075 " ldr r0, [sp, #0x28]\n"
1076 " mov r2, r4\n"
1077 " add.w r0, r0, #0x94\n"
1078 " ldrd r7, r3, [r0, #0x18]\n"
1079 " ldr r1, [r0]\n"
1080 " sub.w r0, r0, #0x90\n"
1081 " blx r7\n"
1082 " b loc_fc2bcc96\n"
1083 "loc_fc2bcaca:\n"
1084 " cmp r1, #0x2b\n"
1085 " beq loc_fc2bcad2\n"
1086 " cmp r1, #0x2c\n"
1087 " bne loc_fc2bcb40\n"
1088 "loc_fc2bcad2:\n"
1089 " ldr.w r1, [r0, #0x94]\n"
1090 " mov r7, r8\n"
1091 " add.w r1, r1, r1, lsl #1\n"
1092 " add.w r1, r0, r1, lsl #2\n"
1093 " subs r1, #8\n"
1094 " ldm r1, {r1, r2, r3}\n"
1095 " stm r7!, {r1, r2, r3}\n"
1096 " bl sub_fc2ba2ca\n"
1097 " ldr r0, [sp, #0x28]\n"
1098 " add.w r0, r0, #0x94\n"
1099 " ldrd r3, r2, [r0, #0x18]\n"
1100 " ldr r1, [r0]\n"
1101 " sub.w r0, r0, #0x90\n"
1102 " blx r3\n"
1103 " bl sub_fc36073c\n"
1104 " bl sub_fc20d308\n"
1105 " bl sub_fc20cffe\n"
1106 " ldr r0, [r4, #0x20]\n"
1107 " movs r1, #2\n"
1108 " mov r7, sl\n"
1109 " mov r2, sl\n"
1110 " blx sub_fc3022d4\n"
1111 " lsls r0, r0, #0x1f\n"
1112 " beq loc_fc2bcb24\n"
1113 " ldr r1, =0xfc2b8c0c\n"
1114 " movs r0, #0\n"
1115 " movw r2, #0xeae\n"
1116 " blx sub_fc302464\n"
1117 "loc_fc2bcb24:\n"
1118 " ldr r0, [r4, #0x20]\n"
1119 " movs r1, #0x20\n"
1120 " mov r2, r7\n"
1121 " blx sub_fc3022d4\n"
1122 " lsls r0, r0, #0x1f\n"
1123 " beq loc_fc2bca96\n"
1124 " ldr r1, =0xfc2b8c0c\n"
1125 " movs r0, #0\n"
1126 " movw r2, #0xeb1\n"
1127 " blx sub_fc302464\n"
1128 " b loc_fc2bcc96\n"
1129 "loc_fc2bcb40:\n"
1130 " adds r1, r0, #4\n"
1131 " mov r4, r8\n"
1132 " ldm r1!, {r2, r3, r7}\n"
1133 " stm r4!, {r2, r3, r7}\n"
1134 " ldr r1, [r0]\n"
1135 " cmp r1, #0x2f\n"
1136 " bhs loc_fc2bcb86\n"
1137 " tbb [pc, r1]\n"
1138 "branchtable_fc2bcb52:\n"
1139 " .byte((loc_fc2bcb82 - branchtable_fc2bcb52) / 2)\n"
1140 " .byte((loc_fc2bcb82 - branchtable_fc2bcb52) / 2)\n"
1141 " .byte((loc_fc2bcb88 - branchtable_fc2bcb52) / 2)\n"
1142 " .byte((loc_fc2bcb8e - branchtable_fc2bcb52) / 2)\n"
1143 " .byte((loc_fc2bcb8e - branchtable_fc2bcb52) / 2)\n"
1144 " .byte((loc_fc2bcb8e - branchtable_fc2bcb52) / 2)\n"
1145 " .byte((loc_fc2bcb82 - branchtable_fc2bcb52) / 2)\n"
1146 " .byte((loc_fc2bcb88 - branchtable_fc2bcb52) / 2)\n"
1147 " .byte((loc_fc2bcb8e - branchtable_fc2bcb52) / 2)\n"
1148 " .byte((loc_fc2bcb8e - branchtable_fc2bcb52) / 2)\n"
1149 " .byte((loc_fc2bcba0 - branchtable_fc2bcb52) / 2)\n"
1150 " .byte((loc_fc2bcba0 - branchtable_fc2bcb52) / 2)\n"
1151 " .byte((loc_fc2bcba0 - branchtable_fc2bcb52) / 2)\n"
1152 " .byte((loc_fc2bcc74 - branchtable_fc2bcb52) / 2)\n"
1153 " .byte((loc_fc2bcc7a - branchtable_fc2bcb52) / 2)\n"
1154 " .byte((loc_fc2bcc7a - branchtable_fc2bcb52) / 2)\n"
1155 " .byte((loc_fc2bcc7a - branchtable_fc2bcb52) / 2)\n"
1156 " .byte((loc_fc2bcc7a - branchtable_fc2bcb52) / 2)\n"
1157 " .byte((loc_fc2bcc80 - branchtable_fc2bcb52) / 2)\n"
1158 " .byte((loc_fc2bcc84 - branchtable_fc2bcb52) / 2)\n"
1159 " .byte((loc_fc2bcc84 - branchtable_fc2bcb52) / 2)\n"
1160 " .byte((loc_fc2bcc84 - branchtable_fc2bcb52) / 2)\n"
1161 " .byte((loc_fc2bcc84 - branchtable_fc2bcb52) / 2)\n"
1162 " .byte((loc_fc2bcc84 - branchtable_fc2bcb52) / 2)\n"
1163 " .byte((loc_fc2bcc84 - branchtable_fc2bcb52) / 2)\n"
1164 " .byte((loc_fc2bcc84 - branchtable_fc2bcb52) / 2)\n"
1165 " .byte((loc_fc2bcc84 - branchtable_fc2bcb52) / 2)\n"
1166 " .byte((loc_fc2bcb94 - branchtable_fc2bcb52) / 2)\n"
1167 " .byte((loc_fc2bcb9a - branchtable_fc2bcb52) / 2)\n"
1168 " .byte((loc_fc2bcb9a - branchtable_fc2bcb52) / 2)\n"
1169 " .byte((loc_fc2bcb9a - branchtable_fc2bcb52) / 2)\n"
1170 " .byte((loc_fc2bcba8 - branchtable_fc2bcb52) / 2)\n"
1171 " .byte((loc_fc2bcba8 - branchtable_fc2bcb52) / 2)\n"
1172 " .byte((loc_fc2bcba8 - branchtable_fc2bcb52) / 2)\n"
1173 " .byte((loc_fc2bcba8 - branchtable_fc2bcb52) / 2)\n"
1174 " .byte((loc_fc2bcbae - branchtable_fc2bcb52) / 2)\n"
1175 " .byte((loc_fc2bcbd8 - branchtable_fc2bcb52) / 2)\n"
1176 " .byte((loc_fc2bcc02 - branchtable_fc2bcb52) / 2)\n"
1177 " .byte((loc_fc2bcc06 - branchtable_fc2bcb52) / 2)\n"
1178 " .byte((loc_fc2bcc0e - branchtable_fc2bcb52) / 2)\n"
1179 " .byte((loc_fc2bcc38 - branchtable_fc2bcb52) / 2)\n"
1180 " .byte((loc_fc2bcc62 - branchtable_fc2bcb52) / 2)\n"
1181 " .byte((loc_fc2bcc62 - branchtable_fc2bcb52) / 2)\n"
1182 " .byte((loc_fc2bcc84 - branchtable_fc2bcb52) / 2)\n"
1183 " .byte((loc_fc2bcc84 - branchtable_fc2bcb52) / 2)\n"
1184 " .byte((loc_fc2bcc68 - branchtable_fc2bcb52) / 2)\n"
1185 " .byte((loc_fc2bcc6e - branchtable_fc2bcb52) / 2)\n"
1186 ".align 1\n"
1187 "loc_fc2bcb82:\n"
1188 " bl sub_fc2b8d50\n"
1189 "loc_fc2bcb86:\n"
1190 " b loc_fc2bcc84\n"
1191 "loc_fc2bcb88:\n"
1192 " bl sub_fc2b8fc8\n"
1193 " b loc_fc2bcc84\n"
1194 "loc_fc2bcb8e:\n"
1195 " bl sub_fc2b91ec\n"
1196 " b loc_fc2bcc84\n"
1197 "loc_fc2bcb94:\n"
1198 " bl sub_fc2b94a0\n"
1199 " b loc_fc2bcc84\n"
1200 "loc_fc2bcb9a:\n"
1201 " bl sub_fc2b965c\n"
1202 " b loc_fc2bcc84\n"
1203 "loc_fc2bcba0:\n"
1204 " bl sub_fc2b99c8_my\n"
1205 " movs r5, #0\n"
1206 " b loc_fc2bcc84\n"
1207 "loc_fc2bcba8:\n"
1208 " bl sub_fc2b9acc\n"
1209 " b loc_fc2bcc84\n"
1210 "loc_fc2bcbae:\n"
1211 " ldrh r1, [r0, #4]\n"
1212 " strh.w r1, [sp, #0x1c]\n"
1213 " ldrh r1, [r6, #2]\n"
1214 " strh.w r1, [sp, #0x1e]\n"
1215 " ldrh r1, [r6, #4]\n"
1216 " strh.w r1, [sp, #0x20]\n"
1217 " ldrh r1, [r6, #6]\n"
1218 " strh.w r1, [sp, #0x22]\n"
1219 " ldrh r1, [r0, #0xc]\n"
1220 " strh.w r1, [sp, #0x24]\n"
1221 " ldrh r1, [r6, #0xa]\n"
1222 " strh.w r1, [sp, #0x26]\n"
1223 " bl sub_fc2b9fb8\n"
1224 " b loc_fc2bcc84\n"
1225 "loc_fc2bcbd8:\n"
1226 " ldrh r1, [r0, #4]\n"
1227 " strh.w r1, [sp, #0x1c]\n"
1228 " ldrh r1, [r6, #2]\n"
1229 " strh.w r1, [sp, #0x1e]\n"
1230 " ldrh r1, [r6, #4]\n"
1231 " strh.w r1, [sp, #0x20]\n"
1232 " ldrh r1, [r6, #6]\n"
1233 " strh.w r1, [sp, #0x22]\n"
1234 " ldrh r1, [r6, #8]\n"
1235 " strh.w r1, [sp, #0x24]\n"
1236 " ldrh r1, [r6, #0xa]\n"
1237 " strh.w r1, [sp, #0x26]\n"
1238 " bl sub_fc2bd9da\n"
1239 " b loc_fc2bcc84\n"
1240 "loc_fc2bcc02:\n"
1241 " movs r1, #1\n"
1242 " b loc_fc2bcc08\n"
1243 "loc_fc2bcc06:\n"
1244 " movs r1, #0\n"
1245 "loc_fc2bcc08:\n"
1246 " bl sub_fc2ba07a\n"
1247 " b loc_fc2bcc84\n"
1248 "loc_fc2bcc0e:\n"
1249 " ldrh r1, [r6]\n"
1250 " strh.w r1, [sp, #0x1c]\n"
1251 " ldrh r1, [r0, #6]\n"
1252 " strh.w r1, [sp, #0x1e]\n"
1253 " ldrh r1, [r6, #4]\n"
1254 " strh.w r1, [sp, #0x20]\n"
1255 " ldrh r1, [r6, #6]\n"
1256 " strh.w r1, [sp, #0x22]\n"
1257 " ldrh r1, [r6, #8]\n"
1258 " strh.w r1, [sp, #0x24]\n"
1259 " ldrh r1, [r6, #0xa]\n"
1260 " strh.w r1, [sp, #0x26]\n"
1261 " bl sub_fc2bdaaa\n"
1262 " b loc_fc2bcc84\n"
1263 "loc_fc2bcc38:\n"
1264 " ldrh r1, [r6]\n"
1265 " strh.w r1, [sp, #0x1c]\n"
1266 " ldrh r1, [r6, #2]\n"
1267 " strh.w r1, [sp, #0x1e]\n"
1268 " ldrh r1, [r6, #4]\n"
1269 " strh.w r1, [sp, #0x20]\n"
1270 " ldrh r1, [r6, #6]\n"
1271 " strh.w r1, [sp, #0x22]\n"
1272 " ldrh r1, [r0, #0xc]\n"
1273 " strh.w r1, [sp, #0x24]\n"
1274 " ldrh r1, [r6, #0xa]\n"
1275 " strh.w r1, [sp, #0x26]\n"
1276 " bl sub_fc2bdb1e\n"
1277 " b loc_fc2bcc84\n"
1278 "loc_fc2bcc62:\n"
1279 " bl sub_fc2ba0be\n"
1280 " b loc_fc2bcc84\n"
1281 "loc_fc2bcc68:\n"
1282 " bl sub_fc2ba67c\n"
1283 " b loc_fc2bcc84\n"
1284 "loc_fc2bcc6e:\n"
1285 " bl sub_fc2ba8c6\n"
1286 " b loc_fc2bcc84\n"
1287 "loc_fc2bcc74:\n"
1288 " bl sub_fc2baae2\n"
1289 " b loc_fc2bcc84\n"
1290 "loc_fc2bcc7a:\n"
1291 " bl sub_fc2bac40\n"
1292 " b loc_fc2bcc84\n"
1293 "loc_fc2bcc80:\n"
1294 " bl sub_fc2bad64\n"
1295 "loc_fc2bcc84:\n"
1296 " ldr r0, [sp, #0x28]\n"
1297 " add.w r0, r0, #0x94\n"
1298 " ldrd r3, r2, [r0, #0x18]\n"
1299 " ldr r1, [r0]\n"
1300 "loc_fc2bcc90:\n"
1301 " sub.w r0, r0, #0x90\n"
1302 " blx r3\n"
1303 "loc_fc2bcc96:\n"
1304 " ldr r0, [sp, #0x28]\n"
1305 " ldr r0, [r0]\n"
1306 " cmp r0, #0x11\n"
1307 " beq loc_fc2bccba\n"
1308 " bgt loc_fc2bccae\n"
1309 " cmp r0, #1\n"
1310 " beq loc_fc2bccba\n"
1311 " cmp r0, #4\n"
1312 " beq loc_fc2bccba\n"
1313 " cmp r0, #0xf\n"
1314 " bne loc_fc2bccec\n"
1315 " b loc_fc2bccba\n"
1316 "loc_fc2bccae:\n"
1317 " cmp r0, #0x14\n"
1318 " beq loc_fc2bccba\n"
1319 " cmp r0, #0x1a\n"
1320 " beq loc_fc2bccba\n"
1321 " cmp r0, #0x1d\n"
1322 " bne loc_fc2bccec\n"
1323 "loc_fc2bccba:\n"
1324 " ldrsh.w r0, [r6]\n"
1325 " mov r2, fp\n"
1326 " cmp r0, fp\n"
1327 " beq loc_fc2bcccc\n"
1328 " ldrsh.w r1, [r6, #8]\n"
1329 " cmp r1, r2\n"
1330 " bne loc_fc2bcce4\n"
1331 "loc_fc2bcccc:\n"
1332 " add r0, sp, #0x10\n"
1333 " bl sub_fc36097a\n"
1334 " ldrh.w r0, [sp, #0x10]\n"
1335 " strh.w r0, [sp, #0x1c]\n"
1336 " ldrh.w r0, [sp, #0x18]\n"
1337 " strh.w r0, [sp, #0x24]\n"
1338 " b loc_fc2bccec\n"
1339 "loc_fc2bcce4:\n"
1340 " strh.w r0, [sp, #0x1c]\n"
1341 " strh.w r1, [sp, #0x24]\n"
1342 "loc_fc2bccec:\n"
1343 " cmp r5, #1\n"
1344 " ldr r0, [sp, #0x28]\n"
1345 " bne loc_fc2bcd24\n"
1346 " movs r2, #0xc\n"
1347 " ldr.w r1, [r0, #0x94]\n"
1348 " add.w r1, r1, r1, lsl #1\n"
1349 " add.w r4, r0, r1, lsl #2\n"
1350 " ldr r0, =0x00066bd0\n"
1351 " subs r4, #8\n"
1352 " add r1, sp, #0x1c\n"
1353 " blx sub_fc30245c\n"
1354 " ldr r0, =0x00066bd0\n"
1355 " movs r2, #0xc\n"
1356 " add r1, sp, #0x1c\n"
1357 " adds r0, #0xc\n"
1358 " blx sub_fc30245c\n"
1359 " ldr r0, =0x00066bd0\n"
1360 " movs r2, #0xc\n"
1361 " mov r1, r4\n"
1362 " adds r0, #0x18\n"
1363 " blx sub_fc30245c\n"
1364 " b loc_fc2bcd6e\n"
1365 "loc_fc2bcd24:\n"
1366 " ldr r0, [r0]\n"
1367 " mov.w r3, #1\n"
1368 " cmp r0, #0xc\n"
1369 " bne loc_fc2bcd4e\n"
1370 " movs r2, #0\n"
1371 " mov r1, r3\n"
1372 " strd r2, r3, [sp]\n"
1373 " movs r0, #0\n"
1374 " mov r2, r3\n"
1375 " bl sub_fc2b8b50\n"
1376 " movs r3, #1\n"
1377 " movs r2, #0\n"
1378 " mov r1, r3\n"
1379 " movs r0, #0\n"
1380 " strd r2, r3, [sp]\n"
1381 " mov r2, r3\n"
1382 " b loc_fc2bcd6a\n"
1383 "loc_fc2bcd4e:\n"
1384 " movs r2, #1\n"
1385 " strd r2, r3, [sp]\n"
1386 " mov r3, r2\n"
1387 " mov r1, r2\n"
1388 " mov r0, r2\n"
1389 " bl sub_fc2b8b50\n"
1390 " movs r3, #1\n"
1391 " str r3, [sp]\n"
1392 " mov r2, r3\n"
1393 " mov r1, r3\n"
1394 " mov r0, r3\n"
1395 " str r3, [sp, #4]\n"
1396 "loc_fc2bcd6a:\n"
1397 " bl sub_fc2b8c90\n"
1398 "loc_fc2bcd6e:\n"
1399 " ldr r0, [sp, #0x28]\n"
1400 " bl sub_fc2bd910\n"
1401 " b loc_fc2bc88c\n"
1402
1403 "loc_fc2bc300:\n"
1404 " pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}\n"
1405 ".ltorg\n"
1406 );
1407 }
1408
1409
1410 void __attribute__((naked,noinline)) sub_fc2b99c8_my() {
1411 asm volatile (
1412 " push.w {r4, r5, r6, r7, r8, lr}\n"
1413 " ldr r7, =0x0000d2f8\n"
1414 " movs r1, #0x3e\n"
1415 " mov r4, r0\n"
1416 " ldr r0, [r7, #0x20]\n"
1417 " blx sub_fc302404\n"
1418 " movs r2, #0\n"
1419 " ldrsh.w r0, [r4, #4]\n"
1420 " movs r3, #1\n"
1421 " mov r1, r2\n"
1422 " bl sub_fc2b888e\n"
1423 " mov r6, r0\n"
1424 " ldrsh.w r0, [r4, #6]\n"
1425 " bl sub_fc2b8a16\n"
1426 " ldrsh.w r0, [r4, #8]\n"
1427 " bl sub_fc2b8a5a\n"
1428 " ldrsh.w r0, [r4, #0xa]\n"
1429 " bl sub_fc2b8a9e\n"
1430 " ldrsh.w r0, [r4, #0xc]\n"
1431 " movs r1, #0\n"
1432 " bl sub_fc2b8ae2\n"
1433 " mov r5, r0\n"
1434 " ldr r0, [r4]\n"
1435 " ldr.w r8, =0x00066be8\n"
1436 " cmp r0, #0xc\n"
1437 " bne loc_fc2b9a1c\n"
1438 " movs r6, #0\n"
1439 " mov r5, r6\n"
1440 " b loc_fc2b9a34\n"
1441 "loc_fc2b9a1c:\n"
1442 " cmp r6, #1\n"
1443 " bne loc_fc2b9a34\n"
1444 " ldrsh.w r0, [r4, #4]\n"
1445 " movs r2, #2\n"
1446 " ldr r1, =0xfc2b881d\n"
1447 " bl sub_fc318c90\n"
1448 " strh r0, [r4, #4]\n"
1449 " movs r0, #0\n"
1450 " str r0, [r7, #0x2c]\n"
1451 " b loc_fc2b9a3a\n"
1452 "loc_fc2b9a34:\n"
1453 " ldrh.w r0, [r8]\n"
1454 " strh r0, [r4, #4]\n"
1455 "loc_fc2b9a3a:\n"
1456 " cmp r5, #1\n"
1457 " bne loc_fc2b9a4c\n"
1458 " ldrsh.w r0, [r4, #0xc]\n"
1459 " movs r2, #0x20\n"
1460 " ldr r1, =0xfc2b8879\n"
1461 " bl sub_fc2bd986\n"
1462 " b loc_fc2b9a50\n"
1463 "loc_fc2b9a4c:\n"
1464 " ldrh.w r0, [r8, #8]\n"
1465 "loc_fc2b9a50:\n"
1466 " strh r0, [r4, #0xc]\n"
1467 " ldrsh.w r0, [r4, #6]\n"
1468 " bl sub_fc3604fa_my\n"
1469 " ldr pc,=0xfc2b9a5b\n"
1470 ".ltorg\n"
1471 );
1472 }
1473
1474 void __attribute__((naked,noinline)) sub_fc3604fa_my() {
1475 asm volatile (
1476 " push {r4, r5, r6, lr}\n"
1477 " ldr r5, =0x0000cd28\n"
1478 " mov r4, r0\n"
1479 " ldr r0, [r5, #4]\n"
1480 " cmp r0, #1\n"
1481 " beq loc_fc360512\n"
1482 " movs r0, #0\n"
1483 " movw r2, #0x16b\n"
1484 " ldr r1, =0xfc3605b8\n"
1485 " blx sub_fc302464\n"
1486 "loc_fc360512:\n"
1487 " ldr r0, =0xfffff400\n"
1488 " cmp r4, r0\n"
1489 " bne loc_fc36051c\n"
1490 " ldrsh.w r4, [r5, #2]\n"
1491 "loc_fc36051c:\n"
1492 " strh r4, [r5, #2]\n"
1493 " cmp r4, r0\n"
1494 " bne loc_fc36052e\n"
1495 " movs r0, #0\n"
1496 " movw r2, #0x171\n"
1497 " ldr r1, =0xfc3605b8\n"
1498 " blx sub_fc302464\n"
1499 "loc_fc36052e:\n"
1500 " mov r0, r4\n"
1501 " bl apex2us\n"
1502
1503
1504
1505
1506 " bl sub_fc15fa3a\n"
1507 " lsls r0, r0, #0x1f\n"
1508 " beq loc_fc360554\n"
1509 " pop.w {r4, r5, r6, lr}\n"
1510 " movs r0, #0\n"
1511 " movw r2, #0x176\n"
1512 " ldr r1, =0xfc3605b8\n"
1513
1514 " ldr pc, =0xfc301949\n"
1515 "loc_fc360554:\n"
1516 " pop {r4, r5, r6, pc}\n"
1517 ".ltorg\n"
1518 );
1519 }
1520