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_fc11d806_my
- log_nr_call
- log_remote_hook
- log_rh
- exp_drv_task
- sub_fc2b9998_my
- sub_fc3604ca_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, =0x059F20\n"
50 " movs r6, #0\n"
51 " ldr r5, =0x0b378\n"
52 "loc_fc0bd90e:\n"
53 " movs r2, #0\n"
54 " mov r1, sp\n"
55 " ldr r0, [r5,#8]\n"
56 " blx sub_FC3022D4\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_FC302434\n"
63 " blx sub_FC3022EC\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_FC18B492\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 " bcs loc_fc0bda30\n"
88 " tbb.w [pc,r1]\n"
89 "branchtable_fc0bd950:\n"
90 ".byte((loc_fc0bd984 - branchtable_fc0bd950) / 2)\n"
91 ".byte((loc_fc0bd99a - branchtable_fc0bd950) / 2)\n"
92 ".byte((loc_fc0bd9a2 - branchtable_fc0bd950) / 2)\n"
93 ".byte((loc_fc0bd9b0 - branchtable_fc0bd950) / 2)\n"
94 ".byte((loc_fc0bd9aa - branchtable_fc0bd950) / 2)\n"
95 ".byte((loc_fc0bd9ba - branchtable_fc0bd950) / 2)\n"
96 ".byte((loc_fc0bd9c0 - branchtable_fc0bd950) / 2)\n"
97 ".byte((loc_fc0bda0c - branchtable_fc0bd950) / 2)\n"
98 ".byte((loc_fc0bd9d0 - branchtable_fc0bd950) / 2)\n"
99 ".byte((loc_fc0bd9d8 - branchtable_fc0bd950) / 2)\n"
100 ".byte((loc_fc0bd9de - branchtable_fc0bd950) / 2)\n"
101 ".byte((loc_fc0bd9f4 - branchtable_fc0bd950) / 2)\n"
102 ".byte((loc_fc0bd9fa - branchtable_fc0bd950) / 2)\n"
103 ".byte((loc_fc0bda00 - branchtable_fc0bd950) / 2)\n"
104 ".byte((loc_fc0bda06 - branchtable_fc0bd950) / 2)\n"
105 ".byte((loc_fc0bda14 - branchtable_fc0bd950) / 2)\n"
106 ".byte((loc_fc0bda1a - branchtable_fc0bd950) / 2)\n"
107 ".byte((loc_fc0bda20 - branchtable_fc0bd950) / 2)\n"
108 ".byte((loc_fc0bda26 - branchtable_fc0bd950) / 2)\n"
109 ".byte((loc_fc0bda2c - branchtable_fc0bd950) / 2)\n"
110 ".byte((loc_fc0bda32 - branchtable_fc0bd950) / 2)\n"
111 ".byte((loc_fc0bda38 - branchtable_fc0bd950) / 2)\n"
112 ".byte((loc_fc0bda3e - branchtable_fc0bd950) / 2)\n"
113 ".byte((loc_fc0bda44 - branchtable_fc0bd950) / 2)\n"
114 ".byte((loc_fc0bda4a - branchtable_fc0bd950) / 2)\n"
115 ".byte((loc_fc0bda50 - branchtable_fc0bd950) / 2)\n"
116 ".byte((loc_fc0bda58 - branchtable_fc0bd950) / 2)\n"
117 ".byte((loc_fc0bda5e - branchtable_fc0bd950) / 2)\n"
118 ".byte((loc_fc0bda62 - branchtable_fc0bd950) / 2)\n"
119 ".byte((loc_fc0bda6a - branchtable_fc0bd950) / 2)\n"
120 ".byte((loc_fc0bda70 - branchtable_fc0bd950) / 2)\n"
121 ".byte((loc_fc0bda9a - branchtable_fc0bd950) / 2)\n"
122 ".byte((loc_fc0bdaa0 - branchtable_fc0bd950) / 2)\n"
123 ".byte((loc_fc0bdaa6 - branchtable_fc0bd950) / 2)\n"
124 ".byte((loc_fc0bdaac - branchtable_fc0bd950) / 2)\n"
125 ".byte((loc_fc0bdab2 - branchtable_fc0bd950) / 2)\n"
126 ".byte((loc_fc0bdab8 - branchtable_fc0bd950) / 2)\n"
127 ".byte((loc_fc0bdac0 - branchtable_fc0bd950) / 2)\n"
128 ".byte((loc_fc0bdac6 - branchtable_fc0bd950) / 2)\n"
129 ".byte((loc_fc0bdaea - branchtable_fc0bd950) / 2)\n"
130 ".byte((loc_fc0bdaf0 - branchtable_fc0bd950) / 2)\n"
131 ".byte((loc_fc0bdb28 - branchtable_fc0bd950) / 2)\n"
132 ".byte((loc_fc0bdafc - branchtable_fc0bd950) / 2)\n"
133 ".byte((loc_fc0bdb02 - branchtable_fc0bd950) / 2)\n"
134 ".byte((loc_fc0bdb08 - branchtable_fc0bd950) / 2)\n"
135 ".byte((loc_fc0bdb0e - branchtable_fc0bd950) / 2)\n"
136 ".byte((loc_fc0bdb14 - branchtable_fc0bd950) / 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 "loc_fc0bd9f4:\n"
196 " bl sub_fc0f93ee\n"
197 " b loc_fc0bdb28\n"
198 "loc_fc0bd9fa:\n"
199 " bl sub_fc0f9438\n"
200 " b loc_fc0bdb28\n"
201 "loc_fc0bda00:\n"
202 " bl sub_fc0f97ee\n"
203 " b loc_fc0bdb28\n"
204 "loc_fc0bda06:\n"
205 " bl sub_fc0f9884\n"
206 " b loc_fc0bdb28\n"
207 "loc_fc0bda0c:\n"
208 " ldr r0, [r0,#0xc]\n"
209 " bl sub_fc0d47da\n"
210 " b loc_fc0bdb28\n"
211 "loc_fc0bda14:\n"
212 " bl sub_fc0da684\n"
213 " b loc_fc0bdb28\n"
214 "loc_fc0bda1a:\n"
215 " bl sub_fc0da886\n"
216 " b loc_fc0bdb28\n"
217 "loc_fc0bda20:\n"
218 " bl sub_fc0da930\n"
219 " b loc_fc0bdb28\n"
220 "loc_fc0bda26:\n"
221 " bl sub_fc0da9e8\n"
222 " b loc_fc0bdb28\n"
223 "loc_fc0bda2c:\n"
224 " movs r0, #0\n"
225 " b loc_fc0bda52\n"
226 "loc_fc0bda30:\n"
227 " b loc_fc0bdb1a\n"
228 "loc_fc0bda32:\n"
229 " bl sub_fc0dab8c\n"
230 " b loc_fc0bdb28\n"
231 "loc_fc0bda38:\n"
232 " bl sub_fc0dabec\n"
233 " b loc_fc0bdb28\n"
234 "loc_fc0bda3e:\n"
235 " bl sub_fc0dabf0\n"
236 " b loc_fc0bdb28\n"
237 "loc_fc0bda44:\n"
238 " bl sub_fc0dac00\n"
239 " b loc_fc0bdb28\n"
240 "loc_fc0bda4a:\n"
241 " bl sub_fc0dac8c\n"
242 " b loc_fc0bdb28\n"
243 "loc_fc0bda50:\n"
244 " movs r0, #1\n"
245 "loc_fc0bda52:\n"
246 " bl sub_fc0daa6c\n"
247 " b loc_fc0bdb28\n"
248 "loc_fc0bda58:\n"
249 " bl sub_fc0d4bd4\n"
250 " b loc_fc0bdb28\n"
251 "loc_fc0bda5e:\n"
252 " movs r0, #0\n"
253 " b loc_fc0bda64\n"
254 "loc_fc0bda62:\n"
255 " ldr r0, [r0,#0xc]\n"
256 "loc_fc0bda64:\n"
257 " bl sub_fc0d4c08\n"
258 " b loc_fc0bdb28\n"
259 "loc_fc0bda6a:\n"
260 " bl sub_FC110720\n"
261 " b loc_fc0bdb28\n"
262 "loc_fc0bda70:\n"
263 " ldr r1, =0x00059F82\n"
264 " movs r2, #2\n"
265 " movs r0, #0x75\n"
266 " bl sub_FC373808\n"
267 " lsls r0, r0, #0x1f\n"
268 " beq loc_fc0bda8c\n"
269 " movw r2, #0x51a\n"
270 " ldr r1, =0xfc0bd504\n"
271 " movs r0, #0\n"
272 " blx sub_FC302434\n"
273 "loc_fc0bda8c:\n"
274 " ldrh.w r0, [r4,#0x62]\n"
275 " cmp r0, #1\n"
276 " bne loc_fc0bdb28\n"
277 " bl sub_FC11071A\n"
278 " b loc_fc0bdb28\n"
279 "loc_fc0bda9a:\n"
280 " bl sub_FC1107A4\n"
281 " b loc_fc0bdb28\n"
282 "loc_fc0bdaa0:\n"
283 " bl sub_FC1108C0\n"
284 " b loc_fc0bdb28\n"
285 "loc_fc0bdaa6:\n"
286 " bl sub_fc0d3eb8\n"
287 " b loc_fc0bdb28\n"
288 "loc_fc0bdaac:\n"
289 " bl sub_fc0d4f4a\n"
290 " b loc_fc0bdb28\n"
291 "loc_fc0bdab2:\n"
292 " bl sub_fc0d5004\n"
293 " b loc_fc0bdb28\n"
294 "loc_fc0bdab8:\n"
295 " ldr r0, [r0,#0xc]\n"
296 " bl sub_fc0dad6c\n"
297 " b loc_fc0bdb28\n"
298 "loc_fc0bdac0:\n"
299 " bl sub_fc0dadbe\n"
300 " b loc_fc0bdb28\n"
301 "loc_fc0bdac6:\n"
302 " bl sub_fc0d58f8\n"
303 " bl sub_fc0d66b2\n"
304 " ldrh.w r0, [r4,#0x1a4]\n"
305 " cmp r0, #4\n"
306 " beq loc_fc0bdae0\n"
307 " ldrh r0, [r4]\n"
308 " sub.w r1, r0, #0x8200\n"
309 " subs r1, #0x36\n"
310 " bne loc_fc0bdb28\n"
311 "loc_fc0bdae0:\n"
312 " bl sub_fc0d5004\n"
313 " bl sub_fc0d5336\n"
314 " b loc_fc0bdb28\n"
315 "loc_fc0bdaea:\n"
316 " movs r2, #0\n"
317 " movs r1, #0x11\n"
318 " b loc_fc0bdaf4\n"
319 "loc_fc0bdaf0:\n"
320 " movs r2, #0\n"
321 " movs r1, #0x10\n"
322 "loc_fc0bdaf4:\n"
323 " movs r0, #0\n"
324 " bl sub_fc0d4046\n"
325 " b loc_fc0bdb28\n"
326 "loc_fc0bdafc:\n"
327 " bl sub_FC11100C\n"
328 " b loc_fc0bdb28\n"
329 "loc_fc0bdb02:\n"
330 " bl sub_FC111088\n"
331 " b loc_fc0bdb28\n"
332 "loc_fc0bdb08:\n"
333 " bl sub_FC1110C8\n"
334 " b loc_fc0bdb28\n"
335 "loc_fc0bdb0e:\n"
336 " bl sub_FC110F50\n"
337 " b loc_fc0bdb28\n"
338 "loc_fc0bdb14:\n"
339 " bl sub_FC110F52\n"
340 " b loc_fc0bdb28\n"
341 "loc_fc0bdb1a:\n"
342 " movw r2, #0x588\n"
343 " ldr r1, =0xfc0bd504\n"
344 " movs r0, #0\n"
345 " blx sub_FC302434\n"
346 "loc_fc0bdb28:\n"
347 #ifdef CAPTSEQ_DEBUG_LOG
348
349 "ldr r0, [sp]\n"
350 "ldr r0, [r0]\n"
351 "bl log_capt_seq2\n"
352 #endif
353 " ldr r0, [sp]\n"
354 " ldr r1, [r0,#4]\n"
355 " ldr r0, [r5,#4]\n"
356 " blx sub_FC302324\n"
357 " ldr r7, [sp]\n"
358 " ldr r0, [r7,#8]\n"
359 " cbnz r0, loc_fc0bdb46\n"
360 " movw r2, #0x12b\n"
361 " ldr r1, =0xfc0bd504\n"
362 " movs r0, #0\n"
363 " blx sub_FC302434\n"
364 "loc_fc0bdb46:\n"
365 " str r6, [r7,#8]\n"
366 " b loc_fc0bd90e\n"
367 ".ltorg\n"
368 );
369 }
370
371
372 void __attribute__((naked,noinline)) sub_fc0daf9e_my() {
373 asm volatile (
374 " push {r4,lr}\n"
375 " bl sub_fc0f8b2c\n"
376 " mov r4, r0\n"
377 " bl sub_fc0d47e6\n"
378 " bl sub_fc143c90\n"
379 " mov r1, r4\n"
380 " bl sub_fc143cde\n"
381 " movs r2, #4\n"
382 " movw r0, #0x116\n"
383 " add.w r1, r4, #0x34\n"
384 " bl sub_fc3736b6\n"
385 " movs r2, #4\n"
386 " movs r0, #0x30\n"
387 " add.w r1, r4, #0x38\n"
388 " bl sub_fc3736b6\n"
389 " movs r2, #4\n"
390 " movs r0, #0x44\n"
391 " add.w r1, r4, #8\n"
392 " bl sub_fc3736b6\n"
393 " bl sub_fc18afd2\n"
394 " mov r1, #0xffffefff\n"
395 " blx sub_fc3023d4\n"
396 " mov r0, r4\n"
397 " bl sub_fc18aca4\n"
398 " bl sub_fc256c72\n"
399 " bl sub_fc0ab14a\n"
400 " mov r0, r4\n"
401 " bl sub_fc11d806_my\n"
402 " lsls r0, r0, #0x1f\n"
403 " beq locret_fc0db004\n"
404 " ldr r1, =0x132fc\n"
405 " movs r0, #1\n"
406 " str r0, [r1]\n"
407 " locret_fc0db004:\n"
408 " pop {r4,pc}\n"
409 ".ltorg\n"
410 );
411 }
412
413
414 void __attribute__((naked,noinline)) sub_fc0dae40_my() {
415 asm volatile (
416 " push {r3-r7,lr}\n"
417 " ldr r6, =0x59f20\n"
418 " mov r5, r0\n"
419 " movs r4, #0\n"
420 " ldr r0, [r6,#0x28]\n"
421 " cbz r0, loc_fc0dae68\n"
422 " ldr r0, =0x132fc\n"
423 " ldr r0, [r0]\n"
424 " cbz r0, loc_fc0dae54\n"
425 " movs r4, #0x1d\n"
426 " loc_fc0dae54:\n"
427 " mov r2, r5\n"
428 " movs r1, #2\n"
429 " mov r0, r4\n"
430 " bl sub_fc0d4046\n"
431 " mov r1, r4\n"
432 " mov r0, r5\n"
433 " bl sub_fc18b31e\n"
434 " b loc_fc0daf94\n"
435 " loc_fc0dae68:\n"
436 " bl sub_fc143c90\n"
437 " mov r1, r5\n"
438 " bl sub_fc143cde\n"
439 " movs r2, #4\n"
440 " movw r0, #0x116\n"
441 " add.w r1, r5, #0x34\n"
442 " bl sub_fc3736b6\n"
443 " movs r2, #4\n"
444 " movs r0, #0x30\n"
445 " add.w r1, r5, #0x38\n"
446 " bl sub_fc3736b6\n"
447 " ldr.w r0, [r6,#0x10c]\n"
448 " cbnz r0, loc_fc0daea2\n"
449 " ldrh.w r0, [r6,#0x1a2]\n"
450 " cmp r0, #3\n"
451 " beq loc_fc0daea8\n"
452 " ldr r0, [r5,#8]\n"
453 " cmp r0, #1\n"
454 " bhi loc_fc0daeb8\n"
455 " b loc_fc0daea8\n"
456 " loc_fc0daea2:\n"
457 " ldr r0, [r5,#0xc]\n"
458 " cmp r0, #1\n"
459 " bne loc_fc0daeb8\n"
460 " loc_fc0daea8:\n"
461 " movs r0, #0xc\n"
462 " bl sub_fc325c74\n"
463 " lsls r0, r0, #0x1f\n"
464 " beq loc_fc0daeb8\n"
465 " bl sub_fc0d3eae\n"
466 " movs r4, #1\n"
467 " loc_fc0daeb8:\n"
468 " lsls r0, r4, #0x1f\n"
469 " bne loc_fc0daf82\n"
470 " ldr.w r0, [r6,#0xec]\n"
471 " cbz r0, loc_fc0daedc\n"
472 " ldrh.w r0, [r6,#0x1a2]\n"
473 " cmp r0, #3\n"
474 " beq loc_fc0daed0\n"
475 " ldr r0, [r5,#8]\n"
476 " cmp r0, #1\n"
477 " bhi loc_fc0daf22\n"
478 " loc_fc0daed0:\n"
479 " ldr.w r0, [r6,#0x10c]\n"
480 " cbz r0, loc_fc0daedc\n"
481 " ldr r0, [r5,#0xc]\n"
482 " cmp r0, #1\n"
483 " bhi loc_fc0daf22\n"
484 " loc_fc0daedc:\n"
485 " bl sub_fc11116c\n"
486 " cbnz r0, loc_fc0daf22\n"
487 " movs r2, #2\n"
488 " mov r1, sp\n"
489 " movw r0, #0x110\n"
490 " bl sub_fc373808\n"
491 " lsls r0, r0, #0x1f\n"
492 " beq loc_fc0daefc\n"
493 " movs r2, #0xcb\n"
494 " movs r0, #0\n"
495 " ldr r1, =0xfc0db020\n"
496 " blx sub_fc302434\n"
497 " loc_fc0daefc:\n"
498 " ldrsh.w r0, [sp]\n"
499 " bl sub_fc130d58\n"
500 " bl sub_fc130c20\n"
501 " cmp r0, #1\n"
502 " bls loc_fc0daf14\n"
503 " movs r0, #0\n"
504 " bl sub_fc130ce8\n"
505 " b loc_fc0daf22\n"
506 " loc_fc0daf14:\n"
507 " bl sub_fc0d3eae\n"
508 " bl sub_fc325cb4\n"
509 " movs r4, #1\n"
510 " lsls r0, r4, #0x1f\n"
511 " bne loc_fc0daf82\n"
512 " loc_fc0daf22:\n"
513 " mov r0, r5\n"
514 " bl sub_fc110926\n"
515 " mov r4, r0\n"
516 " lsls r0, r0, #0x1f\n"
517 " bne loc_fc0daf82\n"
518 " bl sub_fc18afd2\n"
519 " mov r1, #0xffffefff\n"
520 " blx sub_fc3023d4\n"
521 " bl sub_fc256c72\n"
522 " bl sub_fc0ab14a\n"
523 " mov r0, r5\n"
524 " bl sub_fc11d538\n"
525 " mov r4, r0\n"
526 " lsls r0, r0, #0x1f\n"
527 " bne loc_fc0daf82\n"
528 " bl sub_fc0d47e6\n"
529 " mov r0, r5\n"
530 " bl sub_fc18aca4\n"
531 " movs r0, #2\n"
532 " bl sub_fc0d61ba\n"
533 " ldr.w r0, [r6,#0xb0]\n"
534 " cbz r0, loc_fc0daf6c\n"
535 " mov r0, r5\n"
536 " bl sub_fc11dde8\n"
537 " b loc_fc0daf94\n"
538 " loc_fc0daf6c:\n"
539 " ldr.w r0, [r6,#0xb4]\n"
540 " cmp r0, #0\n"
541 " mov r0, r5\n"
542 " beq loc_fc0daf7c\n"
543 " bl sub_fc11da66\n"
544 " b loc_fc0daf94\n"
545 " loc_fc0daf7c:\n"
546 " bl sub_fc11d806_my\n"
547 " b loc_fc0daf94\n"
548 " loc_fc0daf82:\n"
549 " movs r1, #2\n"
550 " mov r2, r5\n"
551 " mov r0, r4\n"
552 " bl sub_fc0d4046\n"
553 " mov r1, r4\n"
554 " mov r0, r5\n"
555 " bl sub_fc18b454\n"
556 " loc_fc0daf94:\n"
557 " bl sub_fc0f942a\n"
558 " movs r0, #0\n"
559 " str r0, [r6,#0x28]\n"
560 " pop {r3-r7,pc}\n"
561 ".ltorg\n"
562 );
563 }
564
565
566 void __attribute__((naked,noinline)) sub_fc11d806_my() {
567 asm volatile (
568 " push.w {r2-r10,lr}\n"
569 " ldr r6, =0xfc11d7e1\n"
570 " mov r5, r0\n"
571 " bl sub_fc18ac3a\n"
572 " bl sub_fc0db464\n"
573 " ldr r7, =0x59f20\n"
574 " ldr.w r0, [r7,#0xa4]\n"
575 " cbnz r0, loc_fc11d834\n"
576 " ldrh.w r0, [r7,#0x1a2]\n"
577 " cmp r0, #3\n"
578 " beq loc_fc11d82c\n"
579 " ldr r0, [r5,#8]\n"
580 " cmp r0, #1\n"
581 " bhi loc_fc11d834\n"
582 " loc_fc11d82c:\n"
583 " bl sub_fc0d4bf6\n"
584 " bl sub_fc0db046\n"
585 " loc_fc11d834:\n"
586 " movs r2, #4\n"
587 " movw r0, #0x137\n"
588 " add r1, sp, #4\n"
589 " bl sub_fc373808\n"
590 " lsls r0, r0, #0x1f\n"
591 " beq loc_fc11d850\n"
592 " movs r0, #0\n"
593 " movw r2, #0x156\n"
594 " ldr r1, =0xfc11da10\n"
595 " blx sub_fc302434\n"
596 " loc_fc11d850:\n"
597 " BL wait_until_remote_button_is_released\n"
598 #ifdef CAPTSEQ_DEBUG_LOG
599 "bl log_remote_hook\n"
600 #endif
601 " ldr r0, [sp,#4]\n"
602 " ubfx.w r0, r0, #8, #8\n"
603 " cmp r0, #6\n"
604 " bne loc_fc11d860\n"
605 " ldr r0, =0xfc11d7e1\n"
606 " movs r1, #0\n"
607 " b loc_fc11d864\n"
608 " loc_fc11d860:\n"
609 " ldr r0, =0xfc18a9f5\n"
610 " mov r1, r5\n"
611 " loc_fc11d864:\n"
612 " bl sub_fc15535c\n"
613 " ldr.w r0, [r7,#0x18c]\n"
614 " cbz r0, loc_fc11d872\n"
615 " bl sub_fc18ab50\n"
616 " loc_fc11d872:\n"
617 " movs r0, #0\n"
618 " bl sub_fc0be0b0\n"
619 " bl sub_fc11121a\n"
620 " ldr.w r8, =0xfc11d7e1\n"
621 " mov r4, r0\n"
622 " lsls r0, r0, #0x1f\n"
623 " bne loc_fc11d984\n"
624 "bl capt_seq_hook_set_nr\n"
625 #ifdef CAPTSEQ_DEBUG_LOG
626 "bl log_nr_call\n"
627 #endif
628 " mov r0, r5\n"
629 " bl sub_fc18ada2\n"
630 " mov r0, r5\n"
631 " bl sub_fc111124\n"
632 " ldr r1, =0x3eea0\n"
633 " movs r2, #4\n"
634 " movs r0, #0x90\n"
635 " bl sub_fc373808\n"
636 " lsls r0, r0, #0x1f\n"
637 " beq loc_fc11d8ac\n"
638 " movs r0, #0\n"
639 " movw r2, #0x171\n"
640 " ldr r1, =0xfc11da10\n"
641 " blx sub_fc302434\n"
642 " loc_fc11d8ac:\n"
643 " bl sub_fc0be1e4\n"
644 " bl sub_fc18ae34\n"
645 " movs r1, #0\n"
646 " mov r0, r5\n"
647 " bl sub_fc11d7e2\n"
648 " mov r6, r0\n"
649 " ldr r0, [sp,#4]\n"
650 " ubfx.w r0, r0, #8, #8\n"
651 " cmp r0, #6\n"
652 " bne loc_fc11d8cc\n"
653 " ldr r2, =0xfc18ab1f\n"
654 " b loc_fc11d8ce\n"
655 " loc_fc11d8cc:\n"
656 " ldr r2, =0xfc18ab35\n"
657 " loc_fc11d8ce:\n"
658 " ldrh r0, [r5,#0x18]\n"
659 " ldr r4, =0x3eea0\n"
660 " cbz r0, loc_fc11d8dc\n"
661 " cmp r0, #1\n"
662 " beq loc_fc11d8f2\n"
663 " cmp r0, #4\n"
664 " bne loc_fc11d942\n"
665 " loc_fc11d8dc:\n"
666 " str r6, [sp]\n"
667 " mov r3, r2\n"
668 " ldr r1, [r5,#0x38]\n"
669 " mov r0, r5\n"
670 " ldr r2, [r4]\n"
671 " bl sub_fc18a848\n"
672 " mov r4, r0\n"
673 " bl sub_fc2b7392\n"
674 " b loc_fc11d950\n"
675 " loc_fc11d8f2:\n"
676 " str r6, [sp]\n"
677 " mov r3, r2\n"
678 " ldr r1, [r5,#0x38]\n"
679 " mov r9, r4\n"
680 " ldr r2, [r4]\n"
681 " mov r0, r5\n"
682 " bl sub_fc18a8a8\n"
683 " movs r2, #1\n"
684 " mov r4, r0\n"
685 " movs r1, #0\n"
686 " movs r0, #0x45\n"
687 " bl sub_fc0ab2ec\n"
688 " lsls r0, r4, #0x1f\n"
689 " bne loc_fc11d950\n"
690 " ldr r0, =0xfc11d7e1\n"
691 " movs r1, #0\n"
692 " bl sub_fc15535c\n"
693 " movs r1, #1\n"
694 " mov r0, r5\n"
695 " bl sub_fc11d7e2\n"
696 " mov r6, r0\n"
697 " ldr.w r0, [r9]\n"
698 " mov r4, r9\n"
699 " bl sub_fc18abb8\n"
700 " ldr r1, [r5,#0x38]\n"
701 " mov r3, r6\n"
702 " ldr r2, [r4]\n"
703 " mov r0, r5\n"
704 " bl sub_fc18a916\n"
705 " mov r4, r0\n"
706 " bl sub_fc18a7f2\n"
707 " b loc_fc11d950\n"
708 " loc_fc11d942:\n"
709 " movs r0, #0\n"
710 " movw r2, #0x1aa\n"
711 " ldr r1, =0xfc11da10\n"
712 " blx sub_fc302434\n"
713 " movs r4, #0x1d\n"
714 " loc_fc11d950:\n"
715 " bl sub_fc18ae38\n"
716 " lsls r0, r4, #0x1f\n"
717 " bne loc_fc11d9ba\n"
718 " mov r0, r5\n"
719 " bl sub_fc18ae4e\n"
720 " ldr.w r0, [r7,#0x108]\n"
721 " cbnz r0, loc_fc11d982\n"
722 " mov r0, r5\n"
723 " bl sub_fc111166\n"
724 " cbnz r0, loc_fc11d982\n"
725 " mov r0, r5\n"
726 " bl sub_fc18b592\n"
727 " lsls r0, r0, #0x1f\n"
728 " beq loc_fc11d982\n"
729 " movs r0, #0\n"
730 " movw r2, #0x1d0\n"
731 " ldr r1, =0xfc11da10\n"
732 " blx sub_fc302434\n"
733 " loc_fc11d982:\n"
734 " b loc_fc11d986\n"
735 " loc_fc11d984:\n"
736 " b loc_fc11d9ba\n"
737 " loc_fc11d986:\n"
738 #ifdef CAPTSEQ_DEBUG_LOG
739 "bl log_rh\n"
740 #endif
741 "BL capt_seq_hook_raw_here\n"
742 " mov r0, r5\n"
743 " bl sub_fc18ae24\n"
744 " mov r0, r5\n"
745 " bl sub_fc18adf8\n"
746 " cmp r6, r8\n"
747 " beq loc_fc11d9ba\n"
748 " bl sub_fc18afd2\n"
749 " movs r1, #4\n"
750 " movw r9, #0x1dd\n"
751 " ldr r3, =0xfc11da10\n"
752 " movw r2, #0x3a98\n"
753 " str.w r9, [sp]\n"
754 " bl sub_fc325e2c\n"
755 " cbz r0, loc_fc11d9ba\n"
756 " movs r0, #0\n"
757 " mov r2, r9\n"
758 " ldr r1, =0xfc11da10\n"
759 " blx sub_fc302434\n"
760 " loc_fc11d9ba:\n"
761 " ldr.w r0, [r7,#0x18c]\n"
762 " cbz r0, loc_fc11d9ca\n"
763 " movs r2, #1\n"
764 " movs r1, #0\n"
765 " movs r0, #0x46\n"
766 " bl sub_fc0ab2ec\n"
767 " loc_fc11d9ca:\n"
768 " movs r1, #2\n"
769 " mov r2, r5\n"
770 " mov r0, r4\n"
771 " bl sub_fc0d4046\n"
772 " ldr r0, [r7,#0x28]\n"
773 " cmp r0, #0\n"
774 " mov r0, r8\n"
775 " beq loc_fc11d9f0\n"
776 " cmp r6, r0\n"
777 " beq loc_fc11d9e4\n"
778 " movs r1, #1\n"
779 " b loc_fc11d9e6\n"
780 " loc_fc11d9e4:\n"
781 " movs r1, #0\n"
782 " loc_fc11d9e6:\n"
783 " mov r2, r4\n"
784 " mov r0, r5\n"
785 " bl sub_fc18b2dc\n"
786 " b loc_fc11da02\n"
787 " loc_fc11d9f0:\n"
788 " cmp r6, r0\n"
789 " beq loc_fc11d9f8\n"
790 " movs r1, #1\n"
791 " b loc_fc11d9fa\n"
792 " loc_fc11d9f8:\n"
793 " movs r1, #0\n"
794 " loc_fc11d9fa:\n"
795 " mov r2, r4\n"
796 " mov r0, r5\n"
797 " bl sub_fc18b296\n"
798 " loc_fc11da02:\n"
799 " mov r0, r4\n"
800 " pop.w {r2-r10,pc}\n"
801 ".ltorg\n"
802 );
803 }
804
805 #ifdef CAPTSEQ_DEBUG_LOG
806 void log_nr_call(void) {
807 _LogCameraEvent(0x60,"nr hook %d",_nrflag);
808 }
809 void log_remote_hook(void) {
810 _LogCameraEvent(0x60,"remote hook");
811 }
812 void log_rh(void) {
813 _LogCameraEvent(0x60,"raw hook");
814 }
815 #endif
816
817
818 void __attribute__((naked,noinline)) exp_drv_task() {
819 asm volatile (
820
821 " push.w {r4-r11,lr}\n"
822 " sub sp, sp, #0x2c\n"
823 " ldr.w r9, =0xd2f8\n"
824 " ldr.w r11, =0xfffff400\n"
825 " movs r0, #0\n"
826 " ldr r6, =0x66bd0\n"
827 " add.w r8, sp, #0x1c\n"
828 " movw r10, #0xbb8\n"
829 " str r0, [sp,#0xc]\n"
830 " loc_fc2bc85c:\n"
831 " ldr.w r0, [r9,#0x24]\n"
832 " movs r2, #0\n"
833 " add r1, sp, #0x28\n"
834 " mov r4, r9\n"
835 " blx sub_fc3022d4\n"
836 " ldr r0, [sp,#0xc]\n"
837 " cmp r0, #1\n"
838 " bne loc_fc2bc898\n"
839 " ldr r0, [sp,#0x28]\n"
840 " ldr r0, [r0]\n"
841 " cmp r0, #0x15\n"
842 " loc_fc2bc876:\n"
843 " beq loc_fc2bc954\n"
844 " cmp r0, #0x16\n"
845 " beq loc_fc2bc876\n"
846 " cmp r0, #0x17\n"
847 " beq loc_fc2bc876\n"
848 " cmp r0, #0x18\n"
849 " beq loc_fc2bc876\n"
850 " cmp r0, #0x19\n"
851 " beq loc_fc2bc876\n"
852 " cmp r0, #0x1a\n"
853 " beq loc_fc2bc876\n"
854 " cmp r0, #0x31\n"
855 " beq loc_fc2bc95a\n"
856 " movs r0, #0\n"
857 " add r1, sp, #0xc\n"
858 " bl sub_fc2bc57e\n"
859 " loc_fc2bc898:\n"
860 " ldr r0, [sp,#0x28]\n"
861 " ldr r1, [r0]\n"
862 " cmp r1, #0x39\n"
863 " bne loc_fc2bc8b6\n"
864 " bl sub_fc2bd8e0\n"
865 " ldr.w r0, [r9,#0x20]\n"
866 " movs r1, #1\n"
867 " blx sub_fc302324\n"
868 " blx sub_fc3022ec\n"
869 " add sp, sp, #0x2c\n"
870 " b locret_fc2bc2d0\n"
871 " loc_fc2bc8b6:\n"
872 " cmp r1, #0x38\n"
873 " bne loc_fc2bc8c8\n"
874 " loc_fc2bc8ba:\n"
875 " add.w r0, r0, #0xac\n"
876 " ldrd.w r2, r1, [r0]\n"
877 " mov r0, r1\n"
878 " blx r2\n"
879 " b loc_fc2bcd3e\n"
880 " loc_fc2bc8c8:\n"
881 " cmp r1, #0x2f\n"
882 " bne loc_fc2bc8fe\n"
883 " ldr r0, [r4,#0x20]\n"
884 " movs r1, #0x80\n"
885 " blx sub_fc3023d4\n"
886 " ldr r0, =0xfc2b87f7\n"
887 " movs r1, #0x80\n"
888 " bl sub_fc318c46\n"
889 " ldr r0, [r4,#0x20]\n"
890 " movs r1, #0x80\n"
891 " mov r2, r10\n"
892 " blx sub_fc3022a4\n"
893 " lsls r0, r0, #0x1f\n"
894 " beq loc_fc2bc8f0\n"
895 " movw r2, #0x198a\n"
896 " b loc_fc2bc9c0\n"
897 " loc_fc2bc8f0:\n"
898 " ldr r1, [sp,#0x28]\n"
899 " add.w r1, r1, #0xac\n"
900 " ldrd.w r1, r0, [r1]\n"
901 " blx r1\n"
902 " b loc_fc2bcd3e\n"
903 " loc_fc2bc8fe:\n"
904 " cmp r1, #0x30\n"
905 " bne loc_fc2bc956\n"
906 " add r1, sp, #0xc\n"
907 " bl sub_fc2bc57e\n"
908 " movw r5, #0x100\n"
909 " ldr r0, [r4,#0x20]\n"
910 " mov r1, r5\n"
911 " blx sub_fc3023d4\n"
912 " ldr r0, =0xfc2b8801\n"
913 " mov r1, r5\n"
914 " bl sub_fc318df0\n"
915 " ldr r0, [r4,#0x20]\n"
916 " mov r2, r10\n"
917 " mov r1, r5\n"
918 " blx sub_fc3022a4\n"
919 " lsls r0, r0, #0x1f\n"
920 " beq loc_fc2bc8f0\n"
921 " movw r2, #0x1994\n"
922 " b loc_fc2bc9c0\n"
923
924
925
926
927
928
929
930
931
932 " loc_fc2bc954:\n"
933 " b loc_fc2bc9ca\n"
934 " loc_fc2bc956:\n"
935 " cmp r1, #0x31\n"
936 " bne loc_fc2bc964\n"
937 " loc_fc2bc95a:\n"
938 " ldr r0, [sp,#0x28]\n"
939 " add r1, sp, #0xc\n"
940 " bl sub_fc2bc57e\n"
941 " b loc_fc2bc8f0\n"
942 " loc_fc2bc964:\n"
943 " cmp r1, #0x32\n"
944 " bne loc_fc2bc97e\n"
945 " bl sub_fc2bc5c2\n"
946 " ldr r1, [sp,#0x28]\n"
947 " add.w r1, r1, #0xac\n"
948 " ldrd.w r1, r0, [r1]\n"
949 " blx r1\n"
950 " bl sub_fc20cfce\n"
951 " b loc_fc2bcd3e\n"
952 " loc_fc2bc97e:\n"
953 " cmp r1, #0x33\n"
954 " beq loc_fc2bc8ba\n"
955 " cmp r1, #0x36\n"
956 " bne loc_fc2bc994\n"
957 " bl sub_fc36070c\n"
958 " bl sub_fc20d2d8\n"
959 " bl sub_fc20cfce\n"
960 " b loc_fc2bc8f0\n"
961 " loc_fc2bc994:\n"
962 " cmp r1, #0x37\n"
963 " bne loc_fc2bc9ca\n"
964 " ldr r0, [r4,#0x20]\n"
965 " movs r1, #4\n"
966 " blx sub_fc3023d4\n"
967 " ldr r1, =0xfc2b8815\n"
968 " movs r2, #4\n"
969 " mov r0, r11\n"
970 " bl sub_fc2bd932\n"
971 " bl sub_fc360470\n"
972 " ldr r0, [r4,#0x20]\n"
973 " movs r1, #4\n"
974 " mov r2, r10\n"
975 " blx sub_fc302424\n"
976 " lsls r0, r0, #0x1f\n"
977 " beq loc_fc2bc8f0\n"
978 " movw r2, #0x1a77\n"
979 " loc_fc2bc9c0:\n"
980 " ldr r1, =0xfc2b8bdc\n"
981 " movs r0, #0\n"
982 " blx sub_fc302434\n"
983 " b loc_fc2bc8f0\n"
984 " loc_fc2bc9ca:\n"
985 " ldr r0, [sp,#0x28]\n"
986 " movs r5, #1\n"
987 " ldr r1, [r0]\n"
988 " cmp r1, #0x13\n"
989 " beq loc_fc2bc9d8\n"
990 " cmp r1, #0x14\n"
991 " bne loc_fc2bca16\n"
992 " loc_fc2bc9d8:\n"
993 " ldr.w r1, [r0,#0x94]\n"
994 " mov r4, r8\n"
995 " add.w r1, r1, r1,lsl#1\n"
996 " add.w r1, r0, r1,lsl#2\n"
997 " subs r1, #8\n"
998 " ldmia r1!, {r2,r3,r7}\n"
999 " stmia r4!, {r2,r3,r7}\n"
1000 " bl sub_fc2baef6\n"
1001 " ldr r0, [sp,#0x28]\n"
1002 " add.w r0, r0, #0x94\n"
1003 " ldrd.w r3, r2, [r0,#0x18]\n"
1004 " ldr r1, [r0]\n"
1005 " sub.w r0, r0, #0x90\n"
1006 " blx r3\n"
1007 " ldr r0, [sp,#0x28]\n"
1008 " bl sub_fc2bdb5c\n"
1009 " ldr r0, [sp,#0x28]\n"
1010 " add.w r0, r0, #0x94\n"
1011 " ldr r1, [r0]\n"
1012 " ldrd.w r3, r2, [r0,#0x20]\n"
1013 " b loc_fc2bcc60\n"
1014 " loc_fc2bca16:\n"
1015 " cmp r1, #0x15\n"
1016 " beq loc_fc2bca2e\n"
1017 " cmp r1, #0x16\n"
1018 " beq loc_fc2bca2e\n"
1019 " cmp r1, #0x17\n"
1020 " beq loc_fc2bca2e\n"
1021 " cmp r1, #0x18\n"
1022 " beq loc_fc2bca2e\n"
1023 " cmp r1, #0x19\n"
1024 " beq loc_fc2bca2e\n"
1025 " cmp r1, #0x1a\n"
1026 " bne loc_fc2bca9a\n"
1027 " loc_fc2bca2e:\n"
1028 " bl sub_fc36070c\n"
1029 " ldr r0, [sp,#0x28]\n"
1030 " add r3, sp, #0xc\n"
1031 " add r1, sp, #0x1c\n"
1032 " mov r2, sp\n"
1033 " bl sub_fc2bb0d4\n"
1034 " cmp r0, #1\n"
1035 " mov r4, r0\n"
1036 " beq loc_fc2bca48\n"
1037 " cmp r4, #5\n"
1038 " bne loc_fc2bca68\n"
1039 " loc_fc2bca48:\n"
1040 " ldr r0, [sp,#0x28]\n"
1041 " mov r2, r4\n"
1042 " add.w r0, r0, #0x94\n"
1043 " ldrd.w r7, r3, [r0,#0x18]\n"
1044 " ldr r1, [r0]\n"
1045 " sub.w r0, r0, #0x90\n"
1046 " blx r7\n"
1047 " ldr r2, [sp,#0xc]\n"
1048 " mov r1, r4\n"
1049 " ldr r0, [sp,#0x28]\n"
1050 " bl sub_fc2bc53c\n"
1051 " loc_fc2bca66:\n"
1052 " b loc_fc2bcc66\n"
1053 " loc_fc2bca68:\n"
1054 " cmp r4, #2\n"
1055 " beq loc_fc2bca70\n"
1056 " cmp r4, #6\n"
1057 " bne loc_fc2bca84\n"
1058 " loc_fc2bca70:\n"
1059 " ldr r0, [sp,#0x28]\n"
1060 " add r1, sp, #0x1c\n"
1061 " mov r2, sp\n"
1062 " bl sub_fc2bc2d4\n"
1063 " ldr r2, [sp,#0xc]\n"
1064 " mov r1, r4\n"
1065 " ldr r0, [sp,#0x28]\n"
1066 " bl sub_fc2bc53c\n"
1067 " loc_fc2bca84:\n"
1068 " ldr r0, [sp,#0x28]\n"
1069 " mov r2, r4\n"
1070 " add.w r0, r0, #0x94\n"
1071 " ldrd.w r7, r3, [r0,#0x18]\n"
1072 " ldr r1, [r0]\n"
1073 " sub.w r0, r0, #0x90\n"
1074 " blx r7\n"
1075 " b loc_fc2bcc66\n"
1076 " loc_fc2bca9a:\n"
1077 " cmp r1, #0x2b\n"
1078 " beq loc_fc2bcaa2\n"
1079 " cmp r1, #0x2c\n"
1080 " bne loc_fc2bcb10\n"
1081 " loc_fc2bcaa2:\n"
1082 " ldr.w r1, [r0,#0x94]\n"
1083 " mov r7, r8\n"
1084 " add.w r1, r1, r1,lsl#1\n"
1085 " add.w r1, r0, r1,lsl#2\n"
1086 " subs r1, #8\n"
1087 " ldmia r1, {r1-r3}\n"
1088 " stmia r7!, {r1-r3}\n"
1089 " bl sub_fc2ba29a\n"
1090 " ldr r0, [sp,#0x28]\n"
1091 " add.w r0, r0, #0x94\n"
1092 " ldrd.w r3, r2, [r0,#0x18]\n"
1093 " ldr r1, [r0]\n"
1094 " sub.w r0, r0, #0x90\n"
1095 " blx r3\n"
1096 " bl sub_fc36070c\n"
1097 " bl sub_fc20d2d8\n"
1098 " bl sub_fc20cfce\n"
1099 " ldr r0, [r4,#0x20]\n"
1100 " movs r1, #2\n"
1101 " mov r7, r10\n"
1102 " mov r2, r10\n"
1103 " blx sub_fc3022a4\n"
1104 " lsls r0, r0, #0x1f\n"
1105 " beq loc_fc2bcaf4\n"
1106 " ldr r1, =0xfc2b8bdc\n"
1107 " movs r0, #0\n"
1108 " movw r2, #0xeae\n"
1109 " blx sub_fc302434\n"
1110 " loc_fc2bcaf4:\n"
1111 " ldr r0, [r4,#0x20]\n"
1112 " movs r1, #0x20\n"
1113 " mov r2, r7\n"
1114 " blx sub_fc3022a4\n"
1115 " lsls r0, r0, #0x1f\n"
1116 " beq loc_fc2bca66\n"
1117 " ldr r1, =0xfc2b8bdc\n"
1118 " movs r0, #0\n"
1119 " movw r2, #0xeb1\n"
1120 " blx sub_fc302434\n"
1121 " b loc_fc2bcc66\n"
1122 " loc_fc2bcb10:\n"
1123 " adds r1, r0, #4\n"
1124 " mov r4, r8\n"
1125 " ldmia r1!, {r2,r3,r7}\n"
1126 " stmia r4!, {r2,r3,r7}\n"
1127 " ldr r1, [r0]\n"
1128 " cmp r1, #0x2f\n"
1129 " bcs loc_fc2bcb56\n"
1130 " tbb.w [pc,r1]\n"
1131 "branchtable_fc2bcb1e:\n"
1132 ".byte((loc_fc2bcb52 - branchtable_fc2bcb1e) / 2)\n"
1133 ".byte((loc_fc2bcb52 - branchtable_fc2bcb1e) / 2)\n"
1134 ".byte((loc_fc2bcb58 - branchtable_fc2bcb1e) / 2)\n"
1135 ".byte((loc_fc2bcb5e - branchtable_fc2bcb1e) / 2)\n"
1136 ".byte((loc_fc2bcb5e - branchtable_fc2bcb1e) / 2)\n"
1137 ".byte((loc_fc2bcb5e - branchtable_fc2bcb1e) / 2)\n"
1138 ".byte((loc_fc2bcb52 - branchtable_fc2bcb1e) / 2)\n"
1139 ".byte((loc_fc2bcb58 - branchtable_fc2bcb1e) / 2)\n"
1140 ".byte((loc_fc2bcb5e - branchtable_fc2bcb1e) / 2)\n"
1141 ".byte((loc_fc2bcb5e - branchtable_fc2bcb1e) / 2)\n"
1142 ".byte((loc_fc2bcb70 - branchtable_fc2bcb1e) / 2)\n"
1143 ".byte((loc_fc2bcb70 - branchtable_fc2bcb1e) / 2)\n"
1144 ".byte((loc_fc2bcb70 - branchtable_fc2bcb1e) / 2)\n"
1145 ".byte((loc_fc2bcc44 - branchtable_fc2bcb1e) / 2)\n"
1146 ".byte((loc_fc2bcc4a - branchtable_fc2bcb1e) / 2)\n"
1147 ".byte((loc_fc2bcc4a - branchtable_fc2bcb1e) / 2)\n"
1148 ".byte((loc_fc2bcc4a - branchtable_fc2bcb1e) / 2)\n"
1149 ".byte((loc_fc2bcc4a - branchtable_fc2bcb1e) / 2)\n"
1150 ".byte((loc_fc2bcc50 - branchtable_fc2bcb1e) / 2)\n"
1151 ".byte((loc_fc2bcc54 - branchtable_fc2bcb1e) / 2)\n"
1152 ".byte((loc_fc2bcc54 - branchtable_fc2bcb1e) / 2)\n"
1153 ".byte((loc_fc2bcc54 - branchtable_fc2bcb1e) / 2)\n"
1154 ".byte((loc_fc2bcc54 - branchtable_fc2bcb1e) / 2)\n"
1155 ".byte((loc_fc2bcc54 - branchtable_fc2bcb1e) / 2)\n"
1156 ".byte((loc_fc2bcc54 - branchtable_fc2bcb1e) / 2)\n"
1157 ".byte((loc_fc2bcc54 - branchtable_fc2bcb1e) / 2)\n"
1158 ".byte((loc_fc2bcc54 - branchtable_fc2bcb1e) / 2)\n"
1159 ".byte((loc_fc2bcb64 - branchtable_fc2bcb1e) / 2)\n"
1160 ".byte((loc_fc2bcb6a - branchtable_fc2bcb1e) / 2)\n"
1161 ".byte((loc_fc2bcb6a - branchtable_fc2bcb1e) / 2)\n"
1162 ".byte((loc_fc2bcb6a - branchtable_fc2bcb1e) / 2)\n"
1163 ".byte((loc_fc2bcb78 - branchtable_fc2bcb1e) / 2)\n"
1164 ".byte((loc_fc2bcb78 - branchtable_fc2bcb1e) / 2)\n"
1165 ".byte((loc_fc2bcb78 - branchtable_fc2bcb1e) / 2)\n"
1166 ".byte((loc_fc2bcb78 - branchtable_fc2bcb1e) / 2)\n"
1167 ".byte((loc_fc2bcb7e - branchtable_fc2bcb1e) / 2)\n"
1168 ".byte((loc_fc2bcba8 - branchtable_fc2bcb1e) / 2)\n"
1169 ".byte((loc_fc2bcbd2 - branchtable_fc2bcb1e) / 2)\n"
1170 ".byte((loc_fc2bcbd6 - branchtable_fc2bcb1e) / 2)\n"
1171 ".byte((loc_fc2bcbde - branchtable_fc2bcb1e) / 2)\n"
1172 ".byte((loc_fc2bcc08 - branchtable_fc2bcb1e) / 2)\n"
1173 ".byte((loc_fc2bcc32 - branchtable_fc2bcb1e) / 2)\n"
1174 ".byte((loc_fc2bcc32 - branchtable_fc2bcb1e) / 2)\n"
1175 ".byte((loc_fc2bcc54 - branchtable_fc2bcb1e) / 2)\n"
1176 ".byte((loc_fc2bcc54 - branchtable_fc2bcb1e) / 2)\n"
1177 ".byte((loc_fc2bcc38 - branchtable_fc2bcb1e) / 2)\n"
1178 ".byte((loc_fc2bcc3e - branchtable_fc2bcb1e) / 2)\n"
1179 ".align 1\n"
1180 " loc_fc2bcb52:\n"
1181 " bl sub_fc2b8d20\n"
1182 " loc_fc2bcb56:\n"
1183 " b loc_fc2bcc54\n"
1184 " loc_fc2bcb58:\n"
1185 " bl sub_fc2b8f98\n"
1186 " b loc_fc2bcc54\n"
1187 " loc_fc2bcb5e:\n"
1188 " bl sub_fc2b91bc\n"
1189 " b loc_fc2bcc54\n"
1190 " loc_fc2bcb64:\n"
1191 " bl sub_fc2b9470\n"
1192 " b loc_fc2bcc54\n"
1193 " loc_fc2bcb6a:\n"
1194 " bl sub_fc2b962c\n"
1195 " b loc_fc2bcc54\n"
1196 " loc_fc2bcb70:\n"
1197 " bl sub_fc2b9998_my\n"
1198 " movs r5, #0\n"
1199 " b loc_fc2bcc54\n"
1200 " loc_fc2bcb78:\n"
1201 " bl sub_fc2b9a9c\n"
1202 " b loc_fc2bcc54\n"
1203 " loc_fc2bcb7e:\n"
1204 " ldrh r1, [r0,#4]\n"
1205 " strh.w r1, [sp,#0x1c]\n"
1206 " ldrh r1, [r6,#2]\n"
1207 " strh.w r1, [sp,#0x1e]\n"
1208 " ldrh r1, [r6,#4]\n"
1209 " strh.w r1, [sp,#0x20]\n"
1210 " ldrh r1, [r6,#6]\n"
1211 " strh.w r1, [sp,#0x22]\n"
1212 " ldrh r1, [r0,#0xc]\n"
1213 " strh.w r1, [sp,#0x24]\n"
1214 " ldrh r1, [r6,#0xa]\n"
1215 " strh.w r1, [sp,#0x26]\n"
1216 " bl sub_fc2b9f88\n"
1217 " b loc_fc2bcc54\n"
1218 " loc_fc2bcba8:\n"
1219 " ldrh r1, [r0,#4]\n"
1220 " strh.w r1, [sp,#0x1c]\n"
1221 " ldrh r1, [r6,#2]\n"
1222 " strh.w r1, [sp,#0x1e]\n"
1223 " ldrh r1, [r6,#4]\n"
1224 " strh.w r1, [sp,#0x20]\n"
1225 " ldrh r1, [r6,#6]\n"
1226 " strh.w r1, [sp,#0x22]\n"
1227 " ldrh r1, [r6,#8]\n"
1228 " strh.w r1, [sp,#0x24]\n"
1229 " ldrh r1, [r6,#0xa]\n"
1230 " strh.w r1, [sp,#0x26]\n"
1231 " bl sub_fc2bd9aa\n"
1232 " b loc_fc2bcc54\n"
1233 " loc_fc2bcbd2:\n"
1234 " movs r1, #1\n"
1235 " b loc_fc2bcbd8\n"
1236 " loc_fc2bcbd6:\n"
1237 " movs r1, #0\n"
1238 " loc_fc2bcbd8:\n"
1239 " bl sub_fc2ba04a\n"
1240 " b loc_fc2bcc54\n"
1241 " loc_fc2bcbde:\n"
1242 " ldrh r1, [r6]\n"
1243 " strh.w r1, [sp,#0x1c]\n"
1244 " ldrh r1, [r0,#6]\n"
1245 " strh.w r1, [sp,#0x1e]\n"
1246 " ldrh r1, [r6,#4]\n"
1247 " strh.w r1, [sp,#0x20]\n"
1248 " ldrh r1, [r6,#6]\n"
1249 " strh.w r1, [sp,#0x22]\n"
1250 " ldrh r1, [r6,#8]\n"
1251 " strh.w r1, [sp,#0x24]\n"
1252 " ldrh r1, [r6,#0xa]\n"
1253 " strh.w r1, [sp,#0x26]\n"
1254 " bl sub_fc2bda7a\n"
1255 " b loc_fc2bcc54\n"
1256 " loc_fc2bcc08:\n"
1257 " ldrh r1, [r6]\n"
1258 " strh.w r1, [sp,#0x1c]\n"
1259 " ldrh r1, [r6,#2]\n"
1260 " strh.w r1, [sp,#0x1e]\n"
1261 " ldrh r1, [r6,#4]\n"
1262 " strh.w r1, [sp,#0x20]\n"
1263 " ldrh r1, [r6,#6]\n"
1264 " strh.w r1, [sp,#0x22]\n"
1265 " ldrh r1, [r0,#0xc]\n"
1266 " strh.w r1, [sp,#0x24]\n"
1267 " ldrh r1, [r6,#0xa]\n"
1268 " strh.w r1, [sp,#0x26]\n"
1269 " bl sub_fc2bdaee\n"
1270 " b loc_fc2bcc54\n"
1271 " loc_fc2bcc32:\n"
1272 " bl sub_fc2ba08e\n"
1273 " b loc_fc2bcc54\n"
1274 " loc_fc2bcc38:\n"
1275 " bl sub_fc2ba64c\n"
1276 " b loc_fc2bcc54\n"
1277 " loc_fc2bcc3e:\n"
1278 " bl sub_fc2ba896\n"
1279 " b loc_fc2bcc54\n"
1280 " loc_fc2bcc44:\n"
1281 " bl sub_fc2baab2\n"
1282 " b loc_fc2bcc54\n"
1283 " loc_fc2bcc4a:\n"
1284 " bl sub_fc2bac10\n"
1285 " b loc_fc2bcc54\n"
1286 " loc_fc2bcc50:\n"
1287 " bl sub_fc2bad34\n"
1288 " loc_fc2bcc54:\n"
1289 " ldr r0, [sp,#0x28]\n"
1290 " add.w r0, r0, #0x94\n"
1291 " ldrd.w r3, r2, [r0,#0x18]\n"
1292 " ldr r1, [r0]\n"
1293 " loc_fc2bcc60:\n"
1294 " sub.w r0, r0, #0x90\n"
1295 " blx r3\n"
1296 " loc_fc2bcc66:\n"
1297 " ldr r0, [sp,#0x28]\n"
1298 " ldr r0, [r0]\n"
1299 " cmp r0, #0x11\n"
1300 " beq loc_fc2bcc8a\n"
1301 " bgt loc_fc2bcc7e\n"
1302 " cmp r0, #1\n"
1303 " beq loc_fc2bcc8a\n"
1304 " cmp r0, #4\n"
1305 " beq loc_fc2bcc8a\n"
1306 " cmp r0, #0xf\n"
1307 " bne loc_fc2bccbc\n"
1308 " b loc_fc2bcc8a\n"
1309 " loc_fc2bcc7e:\n"
1310 " cmp r0, #0x14\n"
1311 " beq loc_fc2bcc8a\n"
1312 " cmp r0, #0x1a\n"
1313 " beq loc_fc2bcc8a\n"
1314 " cmp r0, #0x1d\n"
1315 " bne loc_fc2bccbc\n"
1316 " loc_fc2bcc8a:\n"
1317 " ldrsh.w r0, [r6]\n"
1318 " mov r2, r11\n"
1319 " cmp r0, r11\n"
1320 " beq loc_fc2bcc9c\n"
1321 " ldrsh.w r1, [r6,#8]\n"
1322 " cmp r1, r2\n"
1323 " bne loc_fc2bccb4\n"
1324 " loc_fc2bcc9c:\n"
1325 " add r0, sp, #0x10\n"
1326 " bl sub_fc36094a\n"
1327 " ldrh.w r0, [sp,#0x10]\n"
1328 " strh.w r0, [sp,#0x1c]\n"
1329 " ldrh.w r0, [sp,#0x18]\n"
1330 " strh.w r0, [sp,#0x24]\n"
1331 " b loc_fc2bccbc\n"
1332 " loc_fc2bccb4:\n"
1333 " strh.w r0, [sp,#0x1c]\n"
1334 " strh.w r1, [sp,#0x24]\n"
1335 " loc_fc2bccbc:\n"
1336 " cmp r5, #1\n"
1337 " ldr r0, [sp,#0x28]\n"
1338 " bne loc_fc2bccf4\n"
1339 " movs r2, #0xc\n"
1340 " ldr.w r1, [r0,#0x94]\n"
1341 " add.w r1, r1, r1,lsl#1\n"
1342 " add.w r4, r0, r1,lsl#2\n"
1343 " ldr r0, =0x66bd0\n"
1344 " subs r4, #8\n"
1345 " add r1, sp, #0x1c\n"
1346 " blx sub_fc30242c\n"
1347 " ldr r0, =0x66bd0\n"
1348 " movs r2, #0xc\n"
1349 " add r1, sp, #0x1c\n"
1350 " adds r0, #0xc\n"
1351 " blx sub_fc30242c\n"
1352 " ldr r0, =0x66bd0\n"
1353 " movs r2, #0xc\n"
1354 " mov r1, r4\n"
1355 " adds r0, #0x18\n"
1356 " blx sub_fc30242c\n"
1357 " b loc_fc2bcd3e\n"
1358 " loc_fc2bccf4:\n"
1359 " ldr r0, [r0]\n"
1360 " mov.w r3, #1\n"
1361 " cmp r0, #0xc\n"
1362 " bne loc_fc2bcd1e\n"
1363 " movs r2, #0\n"
1364 " mov r1, r3\n"
1365 " strd.w r2, r3, [sp]\n"
1366 " movs r0, #0\n"
1367 " mov r2, r3\n"
1368 " bl sub_fc2b8b20\n"
1369 " movs r3, #1\n"
1370 " movs r2, #0\n"
1371 " mov r1, r3\n"
1372 " movs r0, #0\n"
1373 " strd.w r2, r3, [sp]\n"
1374 " mov r2, r3\n"
1375 " b loc_fc2bcd3a\n"
1376 " loc_fc2bcd1e:\n"
1377 " movs r2, #1\n"
1378 " strd.w r2, r3, [sp]\n"
1379 " mov r3, r2\n"
1380 " mov r1, r2\n"
1381 " mov r0, r2\n"
1382 " bl sub_fc2b8b20\n"
1383 " movs r3, #1\n"
1384 " str r3, [sp]\n"
1385 " mov r2, r3\n"
1386 " mov r1, r3\n"
1387 " mov r0, r3\n"
1388 " str r3, [sp,#4]\n"
1389 " loc_fc2bcd3a:\n"
1390 " bl sub_fc2b8c60\n"
1391 " loc_fc2bcd3e:\n"
1392 " ldr r0, [sp,#0x28]\n"
1393 " bl sub_fc2bd8e0\n"
1394 " b loc_fc2bc85c\n"
1395 "locret_fc2bc2d0:\n"
1396
1397 " pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}\n"
1398 ".ltorg\n"
1399 );
1400 }
1401
1402 void __attribute__((naked,noinline)) sub_fc2b9998_my() {
1403 asm volatile (
1404 " push.w {r4-r8,lr}\n"
1405 " ldr r7, =0xd2f8\n"
1406 " movs r1, #0x3e\n"
1407 " mov r4, r0\n"
1408 " ldr r0, [r7,#0x20]\n"
1409 " blx sub_fc3023d4\n"
1410 " movs r2, #0\n"
1411 " ldrsh.w r0, [r4,#4]\n"
1412 " movs r3, #1\n"
1413 " mov r1, r2\n"
1414 " bl sub_fc2b885e\n"
1415 " mov r6, r0\n"
1416 " ldrsh.w r0, [r4,#6]\n"
1417 " bl sub_fc2b89e6\n"
1418 " ldrsh.w r0, [r4,#8]\n"
1419 " bl sub_fc2b8a2a\n"
1420 " ldrsh.w r0, [r4,#0xa]\n"
1421 " bl sub_fc2b8a6e\n"
1422 " ldrsh.w r0, [r4,#0xc]\n"
1423 " movs r1, #0\n"
1424 " bl sub_fc2b8ab2\n"
1425 " mov r5, r0\n"
1426 " ldr r0, [r4]\n"
1427 " ldr.w r8, =0x66be8\n"
1428 " cmp r0, #0xc\n"
1429 " bne loc_fc2b99ec\n"
1430 " movs r6, #0\n"
1431 " mov r5, r6\n"
1432 " b loc_fc2b9a04\n"
1433 " loc_fc2b99ec:\n"
1434 " cmp r6, #1\n"
1435 " bne loc_fc2b9a04\n"
1436 " ldrsh.w r0, [r4,#4]\n"
1437 " movs r2, #2\n"
1438 " ldr r1, =0xfc2b87ed\n"
1439 " bl sub_fc318c60\n"
1440 " strh r0, [r4,#4]\n"
1441 " movs r0, #0\n"
1442 " str r0, [r7,#0x2c]\n"
1443 " b loc_fc2b9a0a\n"
1444 " loc_fc2b9a04:\n"
1445 " ldrh.w r0, [r8]\n"
1446 " strh r0, [r4,#4]\n"
1447 " loc_fc2b9a0a:\n"
1448 " cmp r5, #1\n"
1449 " bne loc_fc2b9a1c\n"
1450 " ldrsh.w r0, [r4,#0xc]\n"
1451 " movs r2, #0x20\n"
1452 " ldr r1, =0xfc2b8849\n"
1453 " bl sub_fc2bd956\n"
1454 " b loc_fc2b9a20\n"
1455 " loc_fc2b9a1c:\n"
1456 " ldrh.w r0, [r8,#8]\n"
1457 " loc_fc2b9a20:\n"
1458 " strh r0, [r4,#0xc]\n"
1459 " ldrsh.w r0, [r4,#6]\n"
1460 " bl sub_fc3604ca_my\n"
1461 " ldr pc,=0xfc2b9a2b\n"
1462 ".ltorg\n"
1463 );
1464 }
1465
1466 void __attribute__((naked,noinline)) sub_fc3604ca_my() {
1467 asm volatile (
1468 " push {r4-r6,lr}\n"
1469 " ldr r5, =0xcd28\n"
1470 " mov r4, r0\n"
1471 " ldr r0, [r5,#4]\n"
1472 " cmp r0, #1\n"
1473 " beq loc_fc3604e2\n"
1474 " movs r0, #0\n"
1475 " movw r2, #0x16b\n"
1476 " ldr r1, =0xfc360588\n"
1477 " blx sub_fc302434\n"
1478 " loc_fc3604e2:\n"
1479 " ldr r0, =0xfffff400\n"
1480 " cmp r4, r0\n"
1481 " bne loc_fc3604ec\n"
1482 " ldrsh.w r4, [r5,#2]\n"
1483 " loc_fc3604ec:\n"
1484 " strh r4, [r5,#2]\n"
1485 " cmp r4, r0\n"
1486 " bne loc_fc3604fe\n"
1487 " movs r0, #0\n"
1488 " movw r2, #0x171\n"
1489 " ldr r1, =0xfc360588\n"
1490 " blx sub_fc302434\n"
1491 " loc_fc3604fe:\n"
1492 " mov r0, r4\n"
1493 " bl apex2us\n"
1494
1495
1496
1497
1498 " bl sub_fc15fa32\n"
1499 " lsls r0, r0, #0x1f\n"
1500 " beq locret_fc360524\n"
1501 " pop.w {r4-r6,lr}\n"
1502 " movs r0, #0\n"
1503 " movw r2, #0x176\n"
1504 " ldr r1, =0xfc360588\n"
1505
1506 " ldr pc, =0xfc301919\n"
1507 " locret_fc360524:\n"
1508 " pop {r4-r6,pc}\n"
1509 ".ltorg\n"
1510 );
1511 }
1512