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_fc1dcad0_my
- sub_fc1dc8fa_my
- sub_fc39ffa0_my
- log_remote_hook
- log_rh
- exp_drv_task
- sub_fc28edf0_my
- sub_fc16d680_my
1 #include "lolevel.h"
2 #include "platform.h"
3 #include "core.h"
4 #include "conf.h"
5 #define NR_AUTO (0)
6 static long *nrflag = (long*)0x1e858;
7 extern int active_raw_buffer;
8
9 extern void _LogCameraEvent(int id,const char *fmt,...);
10
11 extern char *hook_raw_image_addr(void);
12
13 void log_capt_seq(int m)
14 {
15 _LogCameraEvent(0x60,"cs m:%d arb:%d rb:0x%08x i:%04d",
16 m,
17 active_raw_buffer,
18 hook_raw_image_addr(),
19 get_exposure_counter());
20 }
21
22 void log_capt_seq2(int m)
23 {
24 _LogCameraEvent(0x60,"cs end m:%d arb:%d rb:0x%08x i:%04d",
25 m,
26 active_raw_buffer,
27 hook_raw_image_addr(),
28 get_exposure_counter());
29 }
30 void log_capt_seq_override(void)
31 {
32 _LogCameraEvent(0x60,"cs override arb:%d rb:0x%08x i:%04d",
33 active_raw_buffer,
34 hook_raw_image_addr(),
35 get_exposure_counter());
36 }
37
38
39 #include "../../../generic/capt_seq.c"
40 extern int _captseq_raw_addr_init(int raw_index, char **ptr) ;
41 char *current_raw_addr;
42
43 void captseq_raw_addr_init_my(int raw_index,char **ptr) {
44 _captseq_raw_addr_init(raw_index,ptr);
45 current_raw_addr=*(ptr + 0x5c/4);
46 #ifdef CAPTSEQ_DEBUG_LOG
47 _LogCameraEvent(0x60,"rawinit i:0x%x p:0x%x v:0x%x",raw_index,ptr,current_raw_addr);
48 #endif
49 }
50
51 void clear_current_raw_addr(void) {
52 current_raw_addr=NULL;
53 }
54
55
56 void __attribute__((naked,noinline)) capt_seq_task() {
57 asm volatile (
58 " push {r3, r4, r5, r6, r7, lr}\n"
59 " ldr r4, =0x0003c478\n"
60 " movs r6, #0\n"
61 " ldr r5, =0x0000ba2c\n"
62 "loc_fc152766:\n"
63 " movs r2, #0\n"
64 " mov r1, sp\n"
65 " ldr r0, [r5, #8]\n"
66 " blx sub_fc2cf370\n"
67 " lsls r0, r0, #0x1f\n"
68 " beq loc_fc152788\n"
69 " movw r2, #0x448\n"
70 " ldr r1, =0xfc152410\n"
71 " movs r0, #0\n"
72 " blx sub_fc2cf430\n"
73 " blx sub_fc2cf380\n"
74 " pop {r3, r4, r5, r6, r7, pc}\n"
75 "loc_fc152788:\n"
76 " ldr r0, [sp]\n"
77 " ldr r0, [r0]\n"
78 " cmp r0, #1\n"
79 " beq loc_fc1527a0\n"
80 " cmp r0, #0x29\n"
81 " beq loc_fc1527a0\n"
82 " cmp r0, #0x1d\n"
83 " beq loc_fc1527a0\n"
84 " cmp r0, #0x21\n"
85 " beq loc_fc1527a0\n"
86 " bl sub_fc1dd9a0\n"
87 "loc_fc1527a0:\n"
88 " ldr r0, [sp]\n"
89 " ldr r1, [r0]\n"
90 " cmp r1, #0x2b\n"
91 " bhs loc_fc152888\n"
92 " tbb [pc, r1]\n"
93 "branchtable_fc1527ac:\n"
94 " .byte((loc_fc1527d8 - branchtable_fc1527ac) / 2)\n"
95 " .byte((loc_fc1527f0 - branchtable_fc1527ac) / 2)\n"
96 " .byte((loc_fc1527f8 - branchtable_fc1527ac) / 2)\n"
97 " .byte((loc_fc152806 - branchtable_fc1527ac) / 2)\n"
98 " .byte((loc_fc152800 - branchtable_fc1527ac) / 2)\n"
99 " .byte((loc_fc152812 - branchtable_fc1527ac) / 2)\n"
100 " .byte((loc_fc152818 - branchtable_fc1527ac) / 2)\n"
101 " .byte((loc_fc15281e - branchtable_fc1527ac) / 2)\n"
102 " .byte((loc_fc152826 - branchtable_fc1527ac) / 2)\n"
103 " .byte((loc_fc152866 - branchtable_fc1527ac) / 2)\n"
104 " .byte((loc_fc152830 - branchtable_fc1527ac) / 2)\n"
105 " .byte((loc_fc152838 - branchtable_fc1527ac) / 2)\n"
106 " .byte((loc_fc15284c - branchtable_fc1527ac) / 2)\n"
107 " .byte((loc_fc152854 - branchtable_fc1527ac) / 2)\n"
108 " .byte((loc_fc15285a - branchtable_fc1527ac) / 2)\n"
109 " .byte((loc_fc152860 - branchtable_fc1527ac) / 2)\n"
110 " .byte((loc_fc152870 - branchtable_fc1527ac) / 2)\n"
111 " .byte((loc_fc152876 - branchtable_fc1527ac) / 2)\n"
112 " .byte((loc_fc15287c - branchtable_fc1527ac) / 2)\n"
113 " .byte((loc_fc152882 - branchtable_fc1527ac) / 2)\n"
114 " .byte((loc_fc15288a - branchtable_fc1527ac) / 2)\n"
115 " .byte((loc_fc15288e - branchtable_fc1527ac) / 2)\n"
116 " .byte((loc_fc152894 - branchtable_fc1527ac) / 2)\n"
117 " .byte((loc_fc15289a - branchtable_fc1527ac) / 2)\n"
118 " .byte((loc_fc1528a0 - branchtable_fc1527ac) / 2)\n"
119 " .byte((loc_fc1528a6 - branchtable_fc1527ac) / 2)\n"
120 " .byte((loc_fc1528ac - branchtable_fc1527ac) / 2)\n"
121 " .byte((loc_fc1528b4 - branchtable_fc1527ac) / 2)\n"
122 " .byte((loc_fc1528ba - branchtable_fc1527ac) / 2)\n"
123 " .byte((loc_fc1528be - branchtable_fc1527ac) / 2)\n"
124 " .byte((loc_fc1528c6 - branchtable_fc1527ac) / 2)\n"
125 " .byte((loc_fc1528cc - branchtable_fc1527ac) / 2)\n"
126 " .byte((loc_fc1528f6 - branchtable_fc1527ac) / 2)\n"
127 " .byte((loc_fc1528fc - branchtable_fc1527ac) / 2)\n"
128 " .byte((loc_fc152902 - branchtable_fc1527ac) / 2)\n"
129 " .byte((loc_fc152908 - branchtable_fc1527ac) / 2)\n"
130 " .byte((loc_fc15290e - branchtable_fc1527ac) / 2)\n"
131 " .byte((loc_fc152914 - branchtable_fc1527ac) / 2)\n"
132 " .byte((loc_fc15291c - branchtable_fc1527ac) / 2)\n"
133 " .byte((loc_fc152922 - branchtable_fc1527ac) / 2)\n"
134 " .byte((loc_fc152946 - branchtable_fc1527ac) / 2)\n"
135 " .byte((loc_fc15294c - branchtable_fc1527ac) / 2)\n"
136 " .byte((loc_fc152966 - branchtable_fc1527ac) / 2)\n"
137 ".align 1\n"
138 "loc_fc1527d8:\n"
139 " ldr r0, [r0, #0xc]\n"
140 " uxtb r0, r0\n"
141 " bl sub_fc152cfa\n"
142 #ifdef CAPTSEQ_DEBUG_LOG
143 "bl log_capt_seq_override\n"
144 #endif
145 " BL clear_current_raw_addr\n"
146 " BL shooting_expo_param_override\n"
147 " bl sub_fc150454\n"
148 " ldr r0, [r4, #0x28]\n"
149 " cmp r0, #0\n"
150 " beq loc_fc1527ee\n"
151
152 "bl sub_fc1dcad0_my\n"
153
154 "loc_fc1527ee:\n"
155
156 " b loc_fc152966\n"
157 "loc_fc1527f0:\n"
158 " ldr r0, [r0, #0x10]\n"
159
160 " bl sub_fc1dc8fa_my\n"
161 " b loc_fc152966\n"
162 "loc_fc1527f8:\n"
163 " movs r0, #1\n"
164 " bl sub_fc152ff4\n"
165 " b loc_fc152966\n"
166 "loc_fc152800:\n"
167 " bl sub_fc152a72\n"
168 " b loc_fc15280e\n"
169 "loc_fc152806:\n"
170 " ldr r0, [r0, #0xc]\n"
171 " uxtb r0, r0\n"
172 " bl sub_fc152ce2\n"
173 "loc_fc15280e:\n"
174 " str r6, [r4, #0x28]\n"
175 " b loc_fc152966\n"
176 "loc_fc152812:\n"
177 " bl sub_fc152ce8\n"
178 " b loc_fc152966\n"
179 "loc_fc152818:\n"
180 " bl sub_fc152ef0\n"
181 " b loc_fc15282a\n"
182 "loc_fc15281e:\n"
183 " ldr r0, [r0, #0x10]\n"
184 " bl sub_fc1dcb78\n"
185 " b loc_fc152966\n"
186 "loc_fc152826:\n"
187 " bl sub_fc152f7a\n"
188 "loc_fc15282a:\n"
189 " bl sub_fc150454\n"
190 " b loc_fc152966\n"
191 "loc_fc152830:\n"
192 " ldr r0, [r4, #0x54]\n"
193 " bl sub_fc153580\n"
194 " b loc_fc152966\n"
195 "loc_fc152838:\n"
196 " bl sub_fc15380c\n"
197 " b loc_fc152966\n"
198 ".ltorg\n"
199
200
201
202
203
204
205
206
207
208
209
210
211
212 "loc_fc15284c:\n"
213 " ldr r0, [r0, #0xc]\n"
214
215 " bl sub_fc153858\n"
216
217 " b loc_fc152966\n"
218
219 "loc_fc152854:\n"
220 " bl sub_fc1539d2\n"
221 " b loc_fc152966\n"
222 "loc_fc15285a:\n"
223 " bl sub_fc153da0\n"
224 " b loc_fc152966\n"
225 "loc_fc152860:\n"
226 " bl sub_fc153e36\n"
227 " b loc_fc152966\n"
228 "loc_fc152866:\n"
229 " ldr r0, [r0, #0xc]\n"
230 " uxtb r0, r0\n"
231 " bl sub_fc152ce2\n"
232 " b loc_fc152966\n"
233 "loc_fc152870:\n"
234 " bl sub_fc1db440\n"
235 " b loc_fc152966\n"
236 "loc_fc152876:\n"
237 " bl sub_fc1db628\n"
238 " b loc_fc152966\n"
239 "loc_fc15287c:\n"
240 " bl sub_fc1db6c4\n"
241 " b loc_fc152966\n"
242 "loc_fc152882:\n"
243 " bl sub_fc1db740\n"
244 " b loc_fc152966\n"
245 "loc_fc152888:\n"
246 " b loc_fc152958\n"
247 "loc_fc15288a:\n"
248 " movs r0, #0\n"
249 " b loc_fc1528ae\n"
250 "loc_fc15288e:\n"
251 " bl sub_fc1dbb2c\n"
252 " b loc_fc152966\n"
253 "loc_fc152894:\n"
254 " bl sub_fc1dbb8c\n"
255 " b loc_fc152966\n"
256 "loc_fc15289a:\n"
257 " bl sub_fc1dbb90\n"
258 " b loc_fc152966\n"
259 "loc_fc1528a0:\n"
260 " bl sub_fc1dbba0\n"
261 " b loc_fc152966\n"
262 "loc_fc1528a6:\n"
263 " bl sub_fc1dbc18\n"
264 " b loc_fc152966\n"
265 "loc_fc1528ac:\n"
266 " movs r0, #1\n"
267 "loc_fc1528ae:\n"
268 " bl sub_fc1dba0c\n"
269 " b loc_fc152966\n"
270 "loc_fc1528b4:\n"
271 " bl sub_fc153102\n"
272 " b loc_fc152966\n"
273 "loc_fc1528ba:\n"
274 " movs r0, #0\n"
275 " b loc_fc1528c0\n"
276 "loc_fc1528be:\n"
277 " ldr r0, [r0, #0xc]\n"
278 "loc_fc1528c0:\n"
279 " bl sub_fc153164\n"
280 " b loc_fc152966\n"
281 "loc_fc1528c6:\n"
282 " bl sub_fc1db900\n"
283 " b loc_fc152966\n"
284 "loc_fc1528cc:\n"
285 " ldr r1, =0x0003c4da\n"
286 " movs r2, #2\n"
287 " movs r0, #0x72\n"
288 " bl _GetPropertyCase\n"
289 " lsls r0, r0, #0x1f\n"
290 " beq loc_fc1528e8\n"
291 " movw r2, #0x508\n"
292 " ldr r1, =0xfc152410\n"
293 " movs r0, #0\n"
294 " blx sub_fc2cf430\n"
295 "loc_fc1528e8:\n"
296 " ldrh.w r0, [r4, #0x62]\n"
297 " cmp r0, #1\n"
298 " bne loc_fc152966\n"
299 " bl sub_fc1db8fa\n"
300 " b loc_fc152966\n"
301 "loc_fc1528f6:\n"
302 " bl sub_fc1db97e\n"
303 " b loc_fc152966\n"
304 "loc_fc1528fc:\n"
305 " bl sub_fc1dd37c\n"
306 " b loc_fc152966\n"
307 "loc_fc152902:\n"
308 " bl sub_fc150d7a\n"
309 " b loc_fc152966\n"
310 "loc_fc152908:\n"
311 " bl sub_fc2aa4b6\n"
312 " b loc_fc152966\n"
313 "loc_fc15290e:\n"
314 " bl sub_fc2aa590\n"
315 " b loc_fc152966\n"
316 "loc_fc152914:\n"
317 " ldr r0, [r0, #0xc]\n"
318 " bl sub_fc1dbcec\n"
319 " b loc_fc152966\n"
320 "loc_fc15291c:\n"
321 " bl sub_fc1dbd54\n"
322 " b loc_fc152966\n"
323 "loc_fc152922:\n"
324 " bl sub_fc15893e\n"
325 " ldrh.w r0, [r4, #0x1a4]\n"
326 " cmp r0, #4\n"
327 " beq loc_fc152938\n"
328 " ldrh r0, [r4]\n"
329 " sub.w r1, r0, #0x4200\n"
330 " subs r1, #0x36\n"
331 " bne loc_fc152966\n"
332 "loc_fc152938:\n"
333 " bl sub_fc2aa590\n"
334 " bl sub_fc2aaaa6\n"
335 " bl sub_fc2aa8ee\n"
336 " b loc_fc152966\n"
337 "loc_fc152946:\n"
338 " movs r2, #0\n"
339 " movs r1, #0x11\n"
340 " b loc_fc152950\n"
341 "loc_fc15294c:\n"
342 " movs r2, #0\n"
343 " movs r1, #0x10\n"
344 "loc_fc152950:\n"
345 " movs r0, #0\n"
346 " bl sub_fc150f62\n"
347 " b loc_fc152966\n"
348 "loc_fc152958:\n"
349 " movw r2, #0x572\n"
350 " ldr r1, =0xfc152410\n"
351 " movs r0, #0\n"
352 " blx sub_fc2cf430\n"
353 "loc_fc152966:\n"
354
355
356 "ldr r0, [sp]\n"
357 "ldr r0, [r0]\n"
358 "bl log_capt_seq2\n"
359 " BL capt_seq_hook_set_nr\n"
360 " ldr r0, [sp]\n"
361 " ldr r1, [r0, #4]\n"
362 " ldr r0, [r5, #4]\n"
363 " blx sub_fc2cf350\n"
364 " ldr r7, [sp]\n"
365 " ldr r0, [r7, #8]\n"
366 " cbnz r0, loc_fc152984\n"
367 " movw r2, #0x128\n"
368 " ldr r1, =0xfc152410\n"
369 " movs r0, #0\n"
370 " blx sub_fc2cf430\n"
371 "loc_fc152984:\n"
372 " str r6, [r7, #8]\n"
373 " b loc_fc152766\n"
374
375
376
377
378
379 ".ltorg\n"
380 );
381 }
382
383 void __attribute__((naked,noinline)) sub_fc1dcad0_my() {
384 asm volatile (
385 " push {r3, r4, r5, r6, r7, lr}\n"
386 " bl sub_fc151ece\n"
387 " mov r4, r0\n"
388 " movs r0, #0xc\n"
389 " bl sub_fc2d7958\n"
390 " ldr r6, =0x00014348\n"
391 " lsls r0, r0, #0x1f\n"
392 " mov.w r5, #1\n"
393 " bne loc_fc1dcb6a\n"
394 " movs r2, #2\n"
395 " mov r1, sp\n"
396 " movw r0, #0x10d\n"
397 " bl _GetPropertyCase\n"
398 " lsls r0, r0, #0x1f\n"
399 " beq loc_fc1dcb04\n"
400 " movs r0, #0\n"
401 " movw r2, #0x16d\n"
402 " ldr r1, =0xfc1dcc50\n"
403 " blx sub_fc2cf430\n"
404 "loc_fc1dcb04:\n"
405 " ldrsh.w r0, [sp]\n"
406 " bl sub_fc1377fe\n"
407 " bl sub_fc1376d6\n"
408 " cmp r0, #1\n"
409 " bls loc_fc1dcb6e\n"
410 " movs r0, #0\n"
411 " bl sub_fc13778e\n"
412 " bl sub_fc152cee\n"
413 " bl sub_fc154bcc\n"
414 " mov r1, r4\n"
415
416 "bl captseq_raw_addr_init_my\n"
417 " movs r2, #4\n"
418 " movw r0, #0x113\n"
419 " add.w r1, r4, #0x58\n"
420 " bl _SetPropertyCase\n"
421 " movs r2, #4\n"
422 " movs r0, #0x2d\n"
423 " add.w r1, r4, #0x5c\n"
424 " bl _SetPropertyCase\n"
425 " movs r2, #4\n"
426 " movs r0, #0x41\n"
427 " add.w r1, r4, #8\n"
428 " bl _SetPropertyCase\n"
429 " bl sub_fc1dd1a6\n"
430 " mvn r1, #0x1000\n"
431 " blx sub_fc2cf400\n"
432 " mov r0, r4\n"
433 " bl sub_fc1dc6a0\n"
434 " mov r0, r4\n"
435
436 "bl sub_fc39ffa0_my\n"
437
438 " lsls r0, r0, #0x1f\n"
439 " beq loc_fc1dcb6c\n"
440 "loc_fc1dcb6a:\n"
441 " str r5, [r6]\n"
442 "loc_fc1dcb6c:\n"
443 " pop {r3, r4, r5, r6, r7, pc}\n"
444 "loc_fc1dcb6e:\n"
445 " bl sub_fc150d70\n"
446 " bl sub_fc2d7990\n"
447 " pop {r3, r4, r5, r6, r7, pc}\n"
448 ".ltorg\n"
449 );
450 }
451
452 void __attribute__((naked,noinline)) sub_fc1dc8fa_my() {
453 asm volatile (
454 " push {r2, r3, r4, r5, r6, lr}\n"
455 " ldr r6, =0x0003c478\n"
456 " mov r4, r0\n"
457 " movs r5, #0\n"
458 " ldr r0, [r6, #0x28]\n"
459 " cbz r0, loc_fc1dc922\n"
460 " ldr r0, =0x00014348\n"
461 " ldr r0, [r0]\n"
462 " cbz r0, loc_fc1dc90e\n"
463 " movs r5, #0x1d\n"
464 "loc_fc1dc90e:\n"
465 " mov r2, r4\n"
466 " movs r1, #2\n"
467 " mov r0, r5\n"
468 " bl sub_fc150f62\n"
469 " mov r1, r5\n"
470 " mov r0, r4\n"
471 " bl sub_fc1dd7fe\n"
472 " b loc_fc1dcaca\n"
473 "loc_fc1dc922:\n"
474 " bl sub_fc154bcc\n"
475 " mov r1, r4\n"
476
477 "bl captseq_raw_addr_init_my\n"
478 " movs r2, #4\n"
479 " movw r0, #0x113\n"
480 " add.w r1, r4, #0x58\n"
481 " bl _SetPropertyCase\n"
482 " movs r2, #4\n"
483 " movs r0, #0x2d\n"
484 " add.w r1, r4, #0x5c\n"
485 " bl _SetPropertyCase\n"
486 " ldr.w r0, [r6, #0x10c]\n"
487 " cbnz r0, loc_fc1dc95c\n"
488 " ldrh.w r0, [r6, #0x1a2]\n"
489 " cmp r0, #3\n"
490 " beq loc_fc1dc962\n"
491 " ldr r0, [r4, #8]\n"
492 " cmp r0, #1\n"
493 " bhi loc_fc1dc972\n"
494 " b loc_fc1dc962\n"
495 "loc_fc1dc95c:\n"
496 " ldr r0, [r4, #0xc]\n"
497 " cmp r0, #1\n"
498 " bne loc_fc1dc972\n"
499 "loc_fc1dc962:\n"
500 " movs r0, #0xc\n"
501 " bl sub_fc2d7958\n"
502 " lsls r0, r0, #0x1f\n"
503 " beq loc_fc1dc972\n"
504 " bl sub_fc150d70\n"
505 " movs r5, #1\n"
506 "loc_fc1dc972:\n"
507 " lsls r0, r5, #0x1f\n"
508 " bne loc_fc1dca74\n"
509 " ldr.w r0, [r6, #0xec]\n"
510 " cbz r0, loc_fc1dc996\n"
511 " ldrh.w r0, [r6, #0x1a2]\n"
512 " cmp r0, #3\n"
513 " beq loc_fc1dc98a\n"
514 " ldr r0, [r4, #8]\n"
515 " cmp r0, #1\n"
516 " bhi loc_fc1dc9d6\n"
517 "loc_fc1dc98a:\n"
518 " ldr.w r0, [r6, #0x10c]\n"
519 " cbz r0, loc_fc1dc996\n"
520 " ldr r0, [r4, #0xc]\n"
521 " cmp r0, #1\n"
522 " bhi loc_fc1dc9d6\n"
523 "loc_fc1dc996:\n"
524 " movs r2, #2\n"
525 " movw r0, #0x10d\n"
526 " add r1, sp, #4\n"
527 " bl _GetPropertyCase\n"
528 " lsls r0, r0, #0x1f\n"
529 " beq loc_fc1dc9b0\n"
530 " movs r2, #0xc9\n"
531 " movs r0, #0\n"
532 " ldr r1, =0xfc1dcc50\n"
533 " blx sub_fc2cf430\n"
534 "loc_fc1dc9b0:\n"
535 " ldrsh.w r0, [sp, #4]\n"
536 " bl sub_fc1377fe\n"
537 " bl sub_fc1376d6\n"
538 " cmp r0, #1\n"
539 " bls loc_fc1dc9c8\n"
540 " movs r0, #0\n"
541 " bl sub_fc13778e\n"
542 " b loc_fc1dc9d6\n"
543 "loc_fc1dc9c8:\n"
544 " bl sub_fc150d70\n"
545 " bl sub_fc2d7990\n"
546 " movs r5, #1\n"
547 " lsls r0, r5, #0x1f\n"
548 " bne loc_fc1dcab8\n"
549 "loc_fc1dc9d6:\n"
550 " mov r0, r4\n"
551 " bl sub_fc1dd3c6\n"
552 " mov r5, r0\n"
553 " lsls r0, r0, #0x1f\n"
554 " bne loc_fc1dcab8\n"
555 " bl sub_fc1dd1a6\n"
556 " mvn r1, #0x1000\n"
557 " blx sub_fc2cf400\n"
558 " mov r0, r4\n"
559 " bl sub_fc39fc7e\n"
560 " mov r5, r0\n"
561 " lsls r0, r0, #0x1f\n"
562 " bne loc_fc1dcab8\n"
563 " bl sub_fc152cee\n"
564 " mov r0, r4\n"
565 " bl sub_fc1dc6a0\n"
566 " ldr.w r0, [r6, #0x130]\n"
567 " cbnz r0, loc_fc1dca18\n"
568 " ldrh.w r0, [r6, #0x1a2]\n"
569 " cmp r0, #3\n"
570 " beq loc_fc1dca18\n"
571 " ldr r0, [r4, #8]\n"
572 " cmp r0, #1\n"
573 " bhi loc_fc1dca1e\n"
574 "loc_fc1dca18:\n"
575 " movs r0, #2\n"
576 " bl sub_fc15980a\n"
577 "loc_fc1dca1e:\n"
578 " ldr.w r0, [r6, #0xa8]\n"
579 " cmp r0, #0\n"
580 " beq loc_fc1dca94\n"
581 " ldrh.w r0, [r6, #0x1a2]\n"
582 " movw r5, #0x1000\n"
583 " cmp r0, #3\n"
584 " beq loc_fc1dca4e\n"
585 " ldr r0, [r4, #8]\n"
586 " cmp r0, #1\n"
587 " bls loc_fc1dca4e\n"
588 " bl sub_fc1dd1a6\n"
589 " movw r3, #0x112\n"
590 " movw r2, #0x3a98\n"
591 " mov r1, r5\n"
592 " str r3, [sp]\n"
593 " ldr r3, =0xfc1dcc50\n"
594 " bl sub_fc2d7b0c\n"
595 "loc_fc1dca4e:\n"
596 " movs r2, #4\n"
597 " movw r0, #0x185\n"
598 " add r1, sp, #4\n"
599 " bl _GetPropertyCase\n"
600 " lsls r0, r0, #0x1f\n"
601 " beq loc_fc1dca6a\n"
602 " movs r0, #0\n"
603 " movw r2, #0x116\n"
604 " ldr r1, =0xfc1dcc50\n"
605 " blx sub_fc2cf430\n"
606 "loc_fc1dca6a:\n"
607 " ldr r0, [sp, #4]\n"
608 " cbnz r0, loc_fc1dca7e\n"
609 " bl sub_fc1dd1a6\n"
610 " b loc_fc1dca76\n"
611 "loc_fc1dca74:\n"
612 " b loc_fc1dcab8\n"
613 "loc_fc1dca76:\n"
614 " mov r1, r5\n"
615 " blx sub_fc2cf350\n"
616 " b loc_fc1dca94\n"
617 "loc_fc1dca7e:\n"
618 " bl sub_fc1dd1a6\n"
619 " mov r1, r5\n"
620 " blx sub_fc2cf400\n"
621 " ldr r2, =0xfc1dc8e9\n"
622 " mov r3, r5\n"
623 " ldr r0, [sp, #4]\n"
624 " mov r1, r2\n"
625 " bl sub_fc322d98\n"
626 "loc_fc1dca94:\n"
627 " ldr.w r0, [r6, #0xb0]\n"
628 " cbz r0, loc_fc1dcaa2\n"
629 " mov r0, r4\n"
630 " bl sub_fc3a0768\n"
631 " b loc_fc1dcaca\n"
632 "loc_fc1dcaa2:\n"
633 " ldr.w r0, [r6, #0xb4]\n"
634 " cmp r0, #0\n"
635 " mov r0, r4\n"
636 " beq loc_fc1dcab2\n"
637 " bl sub_fc3a03d6\n"
638 " b loc_fc1dcaca\n"
639 "loc_fc1dcab2:\n"
640
641 " bl sub_fc39ffa0_my\n"
642 " b loc_fc1dcaca\n"
643 "loc_fc1dcab8:\n"
644 " movs r1, #2\n"
645 " mov r2, r4\n"
646 " mov r0, r5\n"
647 " bl sub_fc150f62\n"
648 " mov r1, r5\n"
649 " mov r0, r4\n"
650 " bl sub_fc1dd934\n"
651 "loc_fc1dcaca:\n"
652 " movs r0, #0\n"
653 " str r0, [r6, #0x28]\n"
654 " pop {r2, r3, r4, r5, r6, pc}\n"
655 );
656 }
657
658 void __attribute__((naked,noinline)) sub_fc39ffa0_my() {
659 asm volatile (
660 " push.w {r2, r3, r4, r5, r6, r7, r8, sb, sl, lr}\n"
661 " ldr r7, =0x0003c478\n"
662 " mov r4, r0\n"
663 " ldr.w r0, [r7, #0x16c]\n"
664 " cbz r0, loc_fc39ffbc\n"
665 " ldrh.w r0, [r7, #0x1a2]\n"
666 " cmp r0, #3\n"
667 " beq loc_fc39ffbc\n"
668 " ldr r0, [r4, #8]\n"
669 " cmp r0, #1\n"
670 " bhi loc_fc39ffc6\n"
671 "loc_fc39ffbc:\n"
672 " mov r0, r4\n"
673 " bl sub_fc1dc636\n"
674 " bl sub_fc1dd062\n"
675 "loc_fc39ffc6:\n"
676 " ldr.w r0, [r7, #0xa4]\n"
677 " cbnz r0, loc_fc39ffe2\n"
678 " ldrh.w r0, [r7, #0x1a2]\n"
679 " cmp r0, #3\n"
680 " beq loc_fc39ffda\n"
681 " ldr r0, [r4, #8]\n"
682 " cmp r0, #1\n"
683 " bhi loc_fc39ffe2\n"
684 "loc_fc39ffda:\n"
685 " bl sub_fc153152\n"
686 " bl sub_fc1dcc82\n"
687 "loc_fc39ffe2:\n"
688 " movs r2, #4\n"
689 " movw r0, #0x134\n"
690 " add r1, sp, #4\n"
691 " bl _GetPropertyCase\n"
692 " lsls r0, r0, #0x1f\n"
693 " beq loc_fc39fffe\n"
694 " movs r0, #0\n"
695 " movw r2, #0x193\n"
696 " ldr r1, =0xfc3a0350\n"
697 " blx sub_fc2cf430\n"
698 "loc_fc39fffe:\n"
699 " ldr r0, [sp, #4]\n"
700 " ubfx r0, r0, #8, #8\n"
701 " cmp r0, #6\n"
702 " bne loc_fc3a000e\n"
703 " ldr r0, =0xfc39ff43\n"
704 " movs r1, #0\n"
705 " b loc_fc3a0012\n"
706 "loc_fc3a000e:\n"
707 " ldr r0, =0xfc1dc2fb\n"
708 " mov r1, r4\n"
709 "loc_fc3a0012:\n"
710 " bl sub_fc16fe44\n"
711 " ldr.w r0, [r7, #0x18c]\n"
712 " cbz r0, loc_fc3a0020\n"
713 " bl sub_fc1dc56e\n"
714 "loc_fc3a0020:\n"
715 " movs r0, #0\n"
716 " bl sub_fc15655e\n"
717 " mov r0, r4\n"
718 " bl sub_fc1dc74c\n"
719 " ldr r1, =0x000265c4\n"
720 " movs r2, #4\n"
721 " movs r0, #0x8d\n"
722 " bl _GetPropertyCase\n"
723 " lsls r0, r0, #0x1f\n"
724 " beq loc_fc3a0046\n"
725 " movs r0, #0\n"
726 " movw r2, #0x1ae\n"
727 " ldr r1, =0xfc3a0350\n"
728 " blx sub_fc2cf430\n"
729 "loc_fc3a0046:\n"
730 " bl sub_fc156618\n"
731 " bl sub_fc1dc7e8\n"
732 " movs r1, #0\n"
733 " mov r0, r4\n"
734 " bl sub_fc39ff44\n"
735 " mov r6, r0\n"
736 " BL wait_until_remote_button_is_released\n"
737 "bl log_remote_hook\n"
738 " ldr r0, [sp, #4]\n"
739 " ubfx r0, r0, #8, #8\n"
740 " cmp r0, #6\n"
741 " bne loc_fc3a0066\n"
742 " ldr r2, =0xfc1dc53d\n"
743 " b loc_fc3a0068\n"
744 "loc_fc3a0066:\n"
745 " ldr r2, =0xfc1dc553\n"
746 "loc_fc3a0068:\n"
747 " ldrh r0, [r4, #0x18]\n"
748 " ldr r5, =0x000265c4\n"
749 " cbz r0, loc_fc3a0076\n"
750 " cmp r0, #1\n"
751 " beq loc_fc3a008c\n"
752 " cmp r0, #4\n"
753 " bne loc_fc3a00f2\n"
754 "loc_fc3a0076:\n"
755 " str r6, [sp]\n"
756 " mov r3, r2\n"
757 " ldr r1, [r4, #0x5c]\n"
758 " mov r0, r4\n"
759 " ldr r2, [r5]\n"
760 " bl sub_fc1dc14e\n"
761 " mov r5, r0\n"
762 " bl sub_fc28bb32\n"
763 " b loc_fc3a0100\n"
764 "loc_fc3a008c:\n"
765 " str r6, [sp]\n"
766 " mov r3, r2\n"
767 " ldr r1, [r4, #0x5c]\n"
768 " mov r8, r5\n"
769 " ldr r2, [r5]\n"
770 " mov r0, r4\n"
771 " bl sub_fc1dc1ae\n"
772 " movs r2, #1\n"
773 " mov r5, r0\n"
774 " movs r1, #0\n"
775 " movs r0, #0x45\n"
776 " bl sub_fc277228\n"
777 " lsls r0, r5, #0x1f\n"
778 " bne loc_fc3a0100\n"
779 " ldr.w r0, [r7, #0x100]\n"
780 " cbz r0, loc_fc3a00c2\n"
781 " ldr r1, [r4, #8]\n"
782 " ldr r2, =0x00212cc4\n"
783 " ldr r0, [r4, #0x5c]\n"
784 " add.w r1, r2, r1, lsl #2\n"
785 " str r0, [r1, #-0x4]\n"
786 " b loc_fc3a00ec\n"
787 "loc_fc3a00c2:\n"
788 " ldr r0, =0xfc39ff43\n"
789 " movs r1, #0\n"
790 " bl sub_fc16fe44\n"
791 " movs r1, #1\n"
792 " mov r0, r4\n"
793 " bl sub_fc39ff44\n"
794 " mov r6, r0\n"
795 " ldr.w r0, [r8]\n"
796 " mov r5, r8\n"
797 " bl sub_fc1dc5d8\n"
798 " ldr r1, [r4, #0x5c]\n"
799 " mov r3, r6\n"
800 " ldr r2, [r5]\n"
801 " mov r0, r4\n"
802 " bl sub_fc1dc21c\n"
803 " mov r5, r0\n"
804 "loc_fc3a00ec:\n"
805 " bl sub_fc1dc0f8\n"
806 " b loc_fc3a0100\n"
807 "loc_fc3a00f2:\n"
808 " movs r0, #0\n"
809 " movw r2, #0x1e1\n"
810 " ldr r1, =0xfc3a0350\n"
811 " blx sub_fc2cf430\n"
812 " movs r5, #0x1d\n"
813 "loc_fc3a0100:\n"
814 " bl sub_fc1dc7ec\n"
815 " ldr.w r8, =0xfc39ff43\n"
816 " lsls r0, r5, #0x1f\n"
817 " bne loc_fc3a015c\n"
818 " ldr.w r0, [r7, #0x108]\n"
819 " cbnz r0, loc_fc3a0128\n"
820 " mov r0, r4\n"
821 " bl sub_fc1ddde2\n"
822 " lsls r0, r0, #0x1f\n"
823 " beq loc_fc3a0128\n"
824 " movs r0, #0\n"
825 " movw r2, #0x207\n"
826 " ldr r1, =0xfc3a0350\n"
827 " blx sub_fc2cf430\n"
828 "loc_fc3a0128:\n"
829 #ifdef CAPTSEQ_DEBUG_LOG
830 "bl log_rh\n"
831 #endif
832 "BL capt_seq_hook_raw_here\n"
833 "BL clear_current_raw_addr\n"
834 " mov r0, r4\n"
835 " bl sub_fc1dc7d8\n"
836 " mov r0, r4\n"
837 " bl sub_fc1dc7ac\n"
838 " cmp r6, r8\n"
839 " beq loc_fc3a015c\n"
840 " bl sub_fc1dd1a6\n"
841 " movs r1, #4\n"
842 " movw sb, #0x214\n"
843 " ldr r3, =0xfc3a0350\n"
844 " movw r2, #0x3a98\n"
845 " str.w sb, [sp]\n"
846 " bl sub_fc2d7b0c\n"
847 " cbz r0, loc_fc3a015c\n"
848 " movs r0, #0\n"
849 " mov r2, sb\n"
850 " ldr r1, =0xfc3a0350\n"
851 " blx sub_fc2cf430\n"
852 "loc_fc3a015c:\n"
853 " ldr.w r0, [r7, #0x18c]\n"
854 " cbz r0, loc_fc3a016c\n"
855 " movs r2, #1\n"
856 " movs r1, #0\n"
857 " movs r0, #0x46\n"
858 " bl sub_fc277228\n"
859 "loc_fc3a016c:\n"
860 " movs r1, #2\n"
861 " mov r2, r4\n"
862 " mov r0, r5\n"
863 " bl sub_fc150f62\n"
864 " ldr r0, [r7, #0x28]\n"
865 " cmp r0, #0\n"
866 " mov r0, r8\n"
867 " beq loc_fc3a0192\n"
868 " cmp r6, r0\n"
869 " beq loc_fc3a0186\n"
870 " movs r1, #1\n"
871 " b loc_fc3a0188\n"
872 "loc_fc3a0186:\n"
873 " movs r1, #0\n"
874 "loc_fc3a0188:\n"
875 " mov r2, r5\n"
876 " mov r0, r4\n"
877 " bl sub_fc1dd7bc\n"
878 " b loc_fc3a01a4\n"
879 "loc_fc3a0192:\n"
880 " cmp r6, r0\n"
881 " beq loc_fc3a019a\n"
882 " movs r1, #1\n"
883 " b loc_fc3a019c\n"
884 "loc_fc3a019a:\n"
885 " movs r1, #0\n"
886 "loc_fc3a019c:\n"
887 " mov r2, r5\n"
888 " mov r0, r4\n"
889 " bl sub_fc1dd776\n"
890 "loc_fc3a01a4:\n"
891 " mov r0, r5\n"
892 " pop.w {r2, r3, r4, r5, r6, r7, r8, sb, sl, pc}\n"
893 ".ltorg\n"
894 );
895 }
896
897 void log_remote_hook(void) {
898 _LogCameraEvent(0x60,"remote hook");
899 }
900 void log_rh(void) {
901 _LogCameraEvent(0x60,"raw hook");
902 }
903
904
905
906
907
908 void __attribute__((naked,noinline)) exp_drv_task() {
909 asm volatile (
910
911 " push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}\n"
912 " sub sp, #0x2c\n"
913 " ldr.w sb, =0x0000d1b0\n"
914 " ldr.w sl, =0xfffff400\n"
915 " movs r0, #0\n"
916 " ldr r6, =0x0005e458\n"
917 " add.w r8, sp, #0x1c\n"
918 " movw fp, #0xbb8\n"
919 " str r0, [sp, #0xc]\n"
920 "loc_fc291d12:\n"
921 " ldr.w r0, [sb, #0x20]\n"
922 " movs r2, #0\n"
923 " add r1, sp, #0x28\n"
924 " mov r4, sb\n"
925 " blx sub_fc2cf370\n"
926 " ldr r0, [sp, #0xc]\n"
927 " cmp r0, #1\n"
928 " bne loc_fc291d4a\n"
929 " ldr r0, [sp, #0x28]\n"
930 " ldr r0, [r0]\n"
931 " cmp r0, #0x14\n"
932 "loc_fc291d2c:\n"
933 " beq loc_fc291e2c\n"
934 " cmp r0, #0x15\n"
935 " beq loc_fc291d2c\n"
936 " cmp r0, #0x16\n"
937 " beq loc_fc291d2c\n"
938 " cmp r0, #0x17\n"
939 " beq loc_fc291d2c\n"
940 " cmp r0, #0x18\n"
941 " beq loc_fc291e3c\n"
942 " cmp r0, #0x2e\n"
943 " beq loc_fc291de6\n"
944 " movs r0, #0\n"
945 " add r1, sp, #0xc\n"
946 " bl sub_fc291cb2\n"
947 "loc_fc291d4a:\n"
948 " ldr r0, [sp, #0x28]\n"
949 " ldr r1, [r0]\n"
950 " cmp r1, #0x34\n"
951 " bne loc_fc291d68\n"
952 " bl sub_fc292baa\n"
953 " ldr.w r0, [sb, #0x1c]\n"
954 " movs r1, #1\n"
955 " blx sub_fc2cf350\n"
956 " blx sub_fc2cf380\n"
957 " add sp, #0x2c\n"
958
959 " ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}\n"
960
961 "loc_fc291d68:\n"
962 " cmp r1, #0x33\n"
963 " bne loc_fc291d7a\n"
964 " add.w r0, r0, #0xac\n"
965 " ldrd r2, r1, [r0]\n"
966 " mov r0, r1\n"
967 " blx r2\n"
968 " b loc_fc29218a\n"
969 "loc_fc291d7a:\n"
970 " cmp r1, #0x2c\n"
971 " bne loc_fc291db0\n"
972 " ldr r0, [r4, #0x1c]\n"
973 " movs r1, #0x80\n"
974 " blx sub_fc2cf400\n"
975 " ldr r0, =0xfc28db5d\n"
976 " movs r1, #0x80\n"
977 " bl sub_fc14d27a\n"
978 " ldr r0, [r4, #0x1c]\n"
979 " movs r1, #0x80\n"
980 " mov r2, fp\n"
981 " blx sub_fc2cf1e0\n"
982 " lsls r0, r0, #0x1f\n"
983 " beq loc_fc291da2\n"
984 " movw r2, #0x17d8\n"
985 " b loc_fc291e32\n"
986 "loc_fc291da2:\n"
987 " ldr r1, [sp, #0x28]\n"
988 " add.w r1, r1, #0xac\n"
989 " ldrd r1, r0, [r1]\n"
990 " blx r1\n"
991 " b loc_fc29218a\n"
992 "loc_fc291db0:\n"
993 " cmp r1, #0x2d\n"
994 " bne loc_fc291de2\n"
995 " add r1, sp, #0xc\n"
996 " bl sub_fc291cb2\n"
997 " movw r5, #0x100\n"
998 " ldr r0, [r4, #0x1c]\n"
999 " mov r1, r5\n"
1000 " blx sub_fc2cf400\n"
1001 " ldr r0, =0xfc28db67\n"
1002 " mov r1, r5\n"
1003 " bl sub_fc14dbfa\n"
1004 " ldr r0, [r4, #0x1c]\n"
1005 " mov r2, fp\n"
1006 " mov r1, r5\n"
1007 " blx sub_fc2cf1e0\n"
1008 " lsls r0, r0, #0x1f\n"
1009 " beq loc_fc291da2\n"
1010 " movw r2, #0x17e2\n"
1011 " b loc_fc291e32\n"
1012 "loc_fc291de2:\n"
1013 " cmp r1, #0x2e\n"
1014 " bne loc_fc291df0\n"
1015 "loc_fc291de6:\n"
1016 " ldr r0, [sp, #0x28]\n"
1017 " add r1, sp, #0xc\n"
1018 " bl sub_fc291cb2\n"
1019 " b loc_fc291da2\n"
1020 "loc_fc291df0:\n"
1021 " cmp r1, #0x31\n"
1022 " bne loc_fc291e02\n"
1023 " bl sub_fc16d8c4\n"
1024 " bl sub_fc16e250\n"
1025 " bl sub_fc16df32\n"
1026 " b loc_fc291da2\n"
1027 "loc_fc291e02:\n"
1028 " cmp r1, #0x32\n"
1029 " bne loc_fc291e3c\n"
1030 " ldr r0, [r4, #0x1c]\n"
1031 " movs r1, #4\n"
1032 " blx sub_fc2cf400\n"
1033 " ldr r1, =0xfc28db7b\n"
1034 " movs r2, #4\n"
1035 " mov r0, sl\n"
1036 " bl sub_fc292bfc\n"
1037 " bl sub_fc16d626\n"
1038 " ldr r0, [r4, #0x1c]\n"
1039 " movs r1, #4\n"
1040 " mov r2, fp\n"
1041 " blx sub_fc2cf3f8\n"
1042 " lsls r0, r0, #0x1f\n"
1043 " beq loc_fc291da2\n"
1044 " b loc_fc291e2e\n"
1045 "loc_fc291e2c:\n"
1046 " b loc_fc291e3c\n"
1047 "loc_fc291e2e:\n"
1048 " movw r2, #0x181a\n"
1049 "loc_fc291e32:\n"
1050 " ldr r1, =0xfc28e388\n"
1051 " movs r0, #0\n"
1052 " blx sub_fc2cf430\n"
1053 " b loc_fc291da2\n"
1054 "loc_fc291e3c:\n"
1055 " ldr r0, [sp, #0x28]\n"
1056 " movs r5, #1\n"
1057 " ldr r1, [r0]\n"
1058 " cmp r1, #0x12\n"
1059 " beq loc_fc291e4a\n"
1060 " cmp r1, #0x13\n"
1061 " bne loc_fc291e88\n"
1062 "loc_fc291e4a:\n"
1063 " ldr.w r1, [r0, #0x94]\n"
1064 " mov r4, r8\n"
1065 " add.w r1, r1, r1, lsl #1\n"
1066 " add.w r1, r0, r1, lsl #2\n"
1067 " subs r1, #8\n"
1068 " ldm r1!, {r2, r3, r7}\n"
1069 " stm r4!, {r2, r3, r7}\n"
1070 " bl sub_fc2905a0\n"
1071 " ldr r0, [sp, #0x28]\n"
1072 " add.w r0, r0, #0x94\n"
1073 " ldrd r3, r2, [r0, #0x18]\n"
1074 " ldr r1, [r0]\n"
1075 " sub.w r0, r0, #0x90\n"
1076 " blx r3\n"
1077 " ldr r0, [sp, #0x28]\n"
1078 " bl sub_fc292e12\n"
1079 " ldr r0, [sp, #0x28]\n"
1080 " add.w r0, r0, #0x94\n"
1081 " ldr r1, [r0]\n"
1082 " ldrd r3, r2, [r0, #0x20]\n"
1083 " b loc_fc2920b0\n"
1084 "loc_fc291e88:\n"
1085 " cmp r1, #0x14\n"
1086 " beq loc_fc291e9c\n"
1087 " cmp r1, #0x15\n"
1088 " beq loc_fc291e9c\n"
1089 " cmp r1, #0x16\n"
1090 " beq loc_fc291e9c\n"
1091 " cmp r1, #0x17\n"
1092 " beq loc_fc291e9c\n"
1093 " cmp r1, #0x18\n"
1094 " bne loc_fc291f0e\n"
1095 "loc_fc291e9c:\n"
1096 " add r3, sp, #0xc\n"
1097 " mov r2, sp\n"
1098 " add r1, sp, #0x1c\n"
1099 " bl sub_fc290774\n"
1100 " cmp r0, #1\n"
1101 " mov r4, r0\n"
1102 " beq loc_fc291eb0\n"
1103 " cmp r4, #5\n"
1104 " bne loc_fc291ec6\n"
1105 "loc_fc291eb0:\n"
1106 " ldr r0, [sp, #0x28]\n"
1107 " mov r2, r4\n"
1108 " add.w r0, r0, #0x94\n"
1109 " ldrd r7, r3, [r0, #0x18]\n"
1110 " ldr r1, [r0]\n"
1111 " sub.w r0, r0, #0x90\n"
1112 " blx r7\n"
1113 " b loc_fc291eec\n"
1114 "loc_fc291ec6:\n"
1115 " cmp r4, #2\n"
1116 " beq loc_fc291ece\n"
1117 " cmp r4, #6\n"
1118 " bne loc_fc291ef8\n"
1119 "loc_fc291ece:\n"
1120 " ldr r0, [sp, #0x28]\n"
1121 " mov r2, r4\n"
1122 " add.w r0, r0, #0x94\n"
1123 " ldrd r7, r3, [r0, #0x18]\n"
1124 " ldr r1, [r0]\n"
1125 " sub.w r0, r0, #0x90\n"
1126 " blx r7\n"
1127 " ldr r0, [sp, #0x28]\n"
1128 " add r1, sp, #0x1c\n"
1129 " mov r2, sp\n"
1130 " bl sub_fc291a40\n"
1131 "loc_fc291eec:\n"
1132 " ldr r2, [sp, #0xc]\n"
1133 " mov r1, r4\n"
1134 " ldr r0, [sp, #0x28]\n"
1135 " bl sub_fc291c62\n"
1136 " b loc_fc2920b6\n"
1137 "loc_fc291ef8:\n"
1138 " ldr r0, [sp, #0x28]\n"
1139 " mov r2, r4\n"
1140 " add.w r0, r0, #0x94\n"
1141 " ldrd r7, r3, [r0, #0x18]\n"
1142 " ldr r1, [r0]\n"
1143 " sub.w r0, r0, #0x90\n"
1144 " blx r7\n"
1145 " b loc_fc2920b6\n"
1146 "loc_fc291f0e:\n"
1147 " cmp r1, #0x28\n"
1148 " beq loc_fc291f16\n"
1149 " cmp r1, #0x29\n"
1150 " bne loc_fc291f48\n"
1151 "loc_fc291f16:\n"
1152 " ldr.w r1, [r0, #0x94]\n"
1153 " mov r4, r8\n"
1154 " add.w r1, r1, r1, lsl #1\n"
1155 " add.w r1, r0, r1, lsl #2\n"
1156 " subs r1, #8\n"
1157 " ldm r1!, {r2, r3, r7}\n"
1158 " stm r4!, {r2, r3, r7}\n"
1159 " bl sub_fc28f6d4\n"
1160 " ldr r0, [sp, #0x28]\n"
1161 " add.w r0, r0, #0x94\n"
1162 " ldrd r3, r2, [r0, #0x18]\n"
1163 " ldr r1, [r0]\n"
1164 " sub.w r0, r0, #0x90\n"
1165 " blx r3\n"
1166 " ldr r0, [sp, #0x28]\n"
1167 " bl sub_fc28fac4\n"
1168 " b loc_fc2920b6\n"
1169 "loc_fc291f48:\n"
1170 " adds r1, r0, #4\n"
1171 " mov r4, r8\n"
1172 " ldm r1!, {r2, r3, r7}\n"
1173 " stm r4!, {r2, r3, r7}\n"
1174 " ldr r1, [r0]\n"
1175 " cmp r1, #0x2c\n"
1176 " bhs loc_fc291f8a\n"
1177 " tbb [pc, r1]\n"
1178 "branchtable_fc291f5a:\n"
1179 " .byte((loc_fc291f86 - branchtable_fc291f5a) / 2)\n"
1180 " .byte((loc_fc291f86 - branchtable_fc291f5a) / 2)\n"
1181 " .byte((loc_fc291f8c - branchtable_fc291f5a) / 2)\n"
1182 " .byte((loc_fc291f92 - branchtable_fc291f5a) / 2)\n"
1183 " .byte((loc_fc291f92 - branchtable_fc291f5a) / 2)\n"
1184 " .byte((loc_fc291f92 - branchtable_fc291f5a) / 2)\n"
1185 " .byte((loc_fc291f86 - branchtable_fc291f5a) / 2)\n"
1186 " .byte((loc_fc291f8c - branchtable_fc291f5a) / 2)\n"
1187 " .byte((loc_fc291f92 - branchtable_fc291f5a) / 2)\n"
1188 " .byte((loc_fc291f92 - branchtable_fc291f5a) / 2)\n"
1189 " .byte((loc_fc291fa4 - branchtable_fc291f5a) / 2)\n"
1190 " .byte((loc_fc291fa4 - branchtable_fc291f5a) / 2)\n"
1191 " .byte((loc_fc292094 - branchtable_fc291f5a) / 2)\n"
1192 " .byte((loc_fc29209a - branchtable_fc291f5a) / 2)\n"
1193 " .byte((loc_fc29209a - branchtable_fc291f5a) / 2)\n"
1194 " .byte((loc_fc29209a - branchtable_fc291f5a) / 2)\n"
1195 " .byte((loc_fc29209a - branchtable_fc291f5a) / 2)\n"
1196 " .byte((loc_fc2920a0 - branchtable_fc291f5a) / 2)\n"
1197 " .byte((loc_fc2920a4 - branchtable_fc291f5a) / 2)\n"
1198 " .byte((loc_fc2920a4 - branchtable_fc291f5a) / 2)\n"
1199 " .byte((loc_fc2920a4 - branchtable_fc291f5a) / 2)\n"
1200 " .byte((loc_fc2920a4 - branchtable_fc291f5a) / 2)\n"
1201 " .byte((loc_fc2920a4 - branchtable_fc291f5a) / 2)\n"
1202 " .byte((loc_fc2920a4 - branchtable_fc291f5a) / 2)\n"
1203 " .byte((loc_fc2920a4 - branchtable_fc291f5a) / 2)\n"
1204 " .byte((loc_fc291f98 - branchtable_fc291f5a) / 2)\n"
1205 " .byte((loc_fc291f9e - branchtable_fc291f5a) / 2)\n"
1206 " .byte((loc_fc291f9e - branchtable_fc291f5a) / 2)\n"
1207 " .byte((loc_fc291f9e - branchtable_fc291f5a) / 2)\n"
1208 " .byte((loc_fc291fd4 - branchtable_fc291f5a) / 2)\n"
1209 " .byte((loc_fc291fd4 - branchtable_fc291f5a) / 2)\n"
1210 " .byte((loc_fc291fd4 - branchtable_fc291f5a) / 2)\n"
1211 " .byte((loc_fc291fda - branchtable_fc291f5a) / 2)\n"
1212 " .byte((loc_fc292004 - branchtable_fc291f5a) / 2)\n"
1213 " .byte((loc_fc2920a4 - branchtable_fc291f5a) / 2)\n"
1214 " .byte((loc_fc2920a4 - branchtable_fc291f5a) / 2)\n"
1215 " .byte((loc_fc29202e - branchtable_fc291f5a) / 2)\n"
1216 " .byte((loc_fc292058 - branchtable_fc291f5a) / 2)\n"
1217 " .byte((loc_fc292082 - branchtable_fc291f5a) / 2)\n"
1218 " .byte((loc_fc292082 - branchtable_fc291f5a) / 2)\n"
1219 " .byte((loc_fc2920a4 - branchtable_fc291f5a) / 2)\n"
1220 " .byte((loc_fc2920a4 - branchtable_fc291f5a) / 2)\n"
1221 " .byte((loc_fc292088 - branchtable_fc291f5a) / 2)\n"
1222 " .byte((loc_fc29208e - branchtable_fc291f5a) / 2)\n"
1223 ".align 1\n"
1224 "loc_fc291f86:\n"
1225 " bl sub_fc28e0d8\n"
1226 "loc_fc291f8a:\n"
1227 " b loc_fc2920a4\n"
1228 "loc_fc291f8c:\n"
1229 " bl sub_fc28e33c\n"
1230 " b loc_fc2920a4\n"
1231 "loc_fc291f92:\n"
1232 " bl sub_fc28e566\n"
1233 " b loc_fc2920a4\n"
1234 "loc_fc291f98:\n"
1235 " bl sub_fc28e80a\n"
1236 " b loc_fc2920a4\n"
1237 "loc_fc291f9e:\n"
1238 " bl sub_fc28e9be\n"
1239 " b loc_fc2920a4\n"
1240 "loc_fc291fa4:\n"
1241
1242 " bl sub_fc28edf0_my\n"
1243 " movs r5, #0\n"
1244 " b loc_fc2920a4\n"
1245 ".ltorg\n"
1246
1247 "loc_fc291fd4:\n"
1248 " bl sub_fc28eeea\n"
1249 " b loc_fc2920a4\n"
1250 "loc_fc291fda:\n"
1251 " ldrh r1, [r0, #4]\n"
1252 " strh.w r1, [sp, #0x1c]\n"
1253 " ldrh r1, [r6, #2]\n"
1254 " strh.w r1, [sp, #0x1e]\n"
1255 " ldrh r1, [r6, #4]\n"
1256 " strh.w r1, [sp, #0x20]\n"
1257 " ldrh r1, [r6, #6]\n"
1258 " strh.w r1, [sp, #0x22]\n"
1259 " ldrh r1, [r0, #0xc]\n"
1260 " strh.w r1, [sp, #0x24]\n"
1261 " ldrh r1, [r6, #0xa]\n"
1262 " strh.w r1, [sp, #0x26]\n"
1263 " bl sub_fc28f41a\n"
1264 " b loc_fc2920a4\n"
1265 "loc_fc292004:\n"
1266 " ldrh r1, [r0, #4]\n"
1267 " strh.w r1, [sp, #0x1c]\n"
1268 " ldrh r1, [r6, #2]\n"
1269 " strh.w r1, [sp, #0x1e]\n"
1270 " ldrh r1, [r6, #4]\n"
1271 " strh.w r1, [sp, #0x20]\n"
1272 " ldrh r1, [r6, #6]\n"
1273 " strh.w r1, [sp, #0x22]\n"
1274 " ldrh r1, [r6, #8]\n"
1275 " strh.w r1, [sp, #0x24]\n"
1276 " ldrh r1, [r6, #0xa]\n"
1277 " strh.w r1, [sp, #0x26]\n"
1278 " bl sub_fc292c68\n"
1279 " b loc_fc2920a4\n"
1280 "loc_fc29202e:\n"
1281 " ldrh r1, [r6]\n"
1282 " strh.w r1, [sp, #0x1c]\n"
1283 " ldrh r1, [r0, #6]\n"
1284 "loc_fc292036:\n"
1285 " strh.w r1, [sp, #0x1e]\n"
1286 " ldrh r1, [r6, #4]\n"
1287 " strh.w r1, [sp, #0x20]\n"
1288 " ldrh r1, [r6, #6]\n"
1289 " strh.w r1, [sp, #0x22]\n"
1290 " ldrh r1, [r6, #8]\n"
1291 " strh.w r1, [sp, #0x24]\n"
1292 " ldrh r1, [r6, #0xa]\n"
1293 " strh.w r1, [sp, #0x26]\n"
1294 " bl sub_fc292cee\n"
1295 " b loc_fc2920a4\n"
1296 "loc_fc292058:\n"
1297 " ldrh r1, [r6]\n"
1298 " strh.w r1, [sp, #0x1c]\n"
1299 " ldrh r1, [r6, #2]\n"
1300 " strh.w r1, [sp, #0x1e]\n"
1301 " ldrh r1, [r6, #4]\n"
1302 " strh.w r1, [sp, #0x20]\n"
1303 " ldrh r1, [r6, #6]\n"
1304 " strh.w r1, [sp, #0x22]\n"
1305 " ldrh r1, [r0, #0xc]\n"
1306 " strh.w r1, [sp, #0x24]\n"
1307 " ldrh r1, [r6, #0xa]\n"
1308 " strh.w r1, [sp, #0x26]\n"
1309 " bl sub_fc292da4\n"
1310 " b loc_fc2920a4\n"
1311 "loc_fc292082:\n"
1312 " bl sub_fc28f4fa\n"
1313 " b loc_fc2920a4\n"
1314 "loc_fc292088:\n"
1315 " bl sub_fc28fb8c\n"
1316 " b loc_fc2920a4\n"
1317 "loc_fc29208e:\n"
1318 " bl sub_fc28ff6e\n"
1319 " b loc_fc2920a4\n"
1320 "loc_fc292094:\n"
1321 " bl sub_fc290174\n"
1322 " b loc_fc2920a4\n"
1323 "loc_fc29209a:\n"
1324 " bl sub_fc2902ca\n"
1325 " b loc_fc2920a4\n"
1326 "loc_fc2920a0:\n"
1327 " bl sub_fc2903e6\n"
1328 "loc_fc2920a4:\n"
1329 " ldr r0, [sp, #0x28]\n"
1330 " add.w r0, r0, #0x94\n"
1331 " ldrd r3, r2, [r0, #0x18]\n"
1332 " ldr r1, [r0]\n"
1333 "loc_fc2920b0:\n"
1334 " sub.w r0, r0, #0x90\n"
1335 " blx r3\n"
1336 "loc_fc2920b6:\n"
1337 " ldr r0, [sp, #0x28]\n"
1338 " ldr r0, [r0]\n"
1339 " cmp r0, #0x10\n"
1340 " beq loc_fc2920da\n"
1341 " bgt loc_fc2920ce\n"
1342 " cmp r0, #1\n"
1343 " beq loc_fc2920da\n"
1344 " cmp r0, #4\n"
1345 " beq loc_fc2920da\n"
1346 " cmp r0, #0xe\n"
1347 " bne loc_fc292108\n"
1348 " b loc_fc2920da\n"
1349 "loc_fc2920ce:\n"
1350 " cmp r0, #0x13\n"
1351 " beq loc_fc2920da\n"
1352 " cmp r0, #0x18\n"
1353 " beq loc_fc2920da\n"
1354 " cmp r0, #0x1b\n"
1355 " bne loc_fc292108\n"
1356 "loc_fc2920da:\n"
1357 " ldrsh.w r1, [r6]\n"
1358 " mov r2, sl\n"
1359 " cmp r1, sl\n"
1360 " beq loc_fc2920ec\n"
1361 " ldrsh.w r0, [r6, #8]\n"
1362 " cmp r0, r2\n"
1363 " bne loc_fc292100\n"
1364 "loc_fc2920ec:\n"
1365 " add r0, sp, #0x10\n"
1366 " bl sub_fc2dd22a\n"
1367 " ldrh.w r0, [sp, #0x10]\n"
1368 " strh.w r0, [sp, #0x1c]\n"
1369 " ldrh.w r0, [sp, #0x18]\n"
1370 " b loc_fc292104\n"
1371 "loc_fc292100:\n"
1372 " strh.w r1, [sp, #0x1c]\n"
1373 "loc_fc292104:\n"
1374 " strh.w r0, [sp, #0x24]\n"
1375 "loc_fc292108:\n"
1376 " cmp r5, #1\n"
1377 " ldr r0, [sp, #0x28]\n"
1378 " bne loc_fc292140\n"
1379 " movs r2, #0xc\n"
1380 " ldr.w r1, [r0, #0x94]\n"
1381 " add.w r1, r1, r1, lsl #1\n"
1382 " add.w r4, r0, r1, lsl #2\n"
1383 " ldr r0, =0x0005e458\n"
1384 " subs r4, #8\n"
1385 " add r1, sp, #0x1c\n"
1386 " blx sub_fc2cf450\n"
1387 " ldr r0, =0x0005e458\n"
1388 " movs r2, #0xc\n"
1389 " add r1, sp, #0x1c\n"
1390 " adds r0, #0xc\n"
1391 " blx sub_fc2cf450\n"
1392 " ldr r0, =0x0005e458\n"
1393 " movs r2, #0xc\n"
1394 " mov r1, r4\n"
1395 " adds r0, #0x18\n"
1396 " blx sub_fc2cf450\n"
1397 " b loc_fc29218a\n"
1398 "loc_fc292140:\n"
1399 " ldr r0, [r0]\n"
1400 " mov.w r3, #1\n"
1401 " cmp r0, #0xb\n"
1402 " bne loc_fc29216a\n"
1403 " movs r2, #0\n"
1404 " mov r1, r3\n"
1405 " strd r2, r3, [sp]\n"
1406 " movs r0, #0\n"
1407 " mov r2, r3\n"
1408 " bl sub_fc28df2a\n"
1409 " movs r3, #1\n"
1410 " movs r2, #0\n"
1411 " mov r1, r3\n"
1412 " movs r0, #0\n"
1413 " strd r2, r3, [sp]\n"
1414 " mov r2, r3\n"
1415 " b loc_fc292186\n"
1416 "loc_fc29216a:\n"
1417 " movs r2, #1\n"
1418 " strd r2, r3, [sp]\n"
1419 " mov r3, r2\n"
1420 " mov r1, r2\n"
1421 " mov r0, r2\n"
1422 " bl sub_fc28df2a\n"
1423 " movs r3, #1\n"
1424 " str r3, [sp]\n"
1425 " mov r2, r3\n"
1426 " mov r1, r3\n"
1427 " mov r0, r3\n"
1428 " str r3, [sp, #4]\n"
1429 "loc_fc292186:\n"
1430 " bl sub_fc28e05e\n"
1431 "loc_fc29218a:\n"
1432 " ldr r0, [sp, #0x28]\n"
1433 " bl sub_fc292baa\n"
1434 " b loc_fc291d12\n"
1435 ".ltorg\n"
1436 );
1437 }
1438
1439 void __attribute__((naked,noinline)) sub_fc28edf0_my() {
1440 asm volatile (
1441 " push.w {r4, r5, r6, r7, r8, lr}\n"
1442 " ldr r7, =0x0000d1b0\n"
1443 " movs r1, #0x3e\n"
1444 " mov r4, r0\n"
1445 " ldr r0, [r7, #0x1c]\n"
1446 " blx sub_fc2cf400\n"
1447 " movs r2, #0\n"
1448 " ldrsh.w r0, [r4, #4]\n"
1449 " movs r3, #1\n"
1450 " mov r1, r2\n"
1451 " bl sub_fc28dbbc\n"
1452 " mov r6, r0\n"
1453 " ldrsh.w r0, [r4, #6]\n"
1454 " bl sub_fc28dd5a\n"
1455 " ldrsh.w r0, [r4, #8]\n"
1456 " bl sub_fc28dd9e\n"
1457 " ldrsh.w r0, [r4, #0xa]\n"
1458 " bl sub_fc28dde2\n"
1459 " ldrsh.w r0, [r4, #0xc]\n"
1460 " movs r1, #0\n"
1461 " bl sub_fc28de26\n"
1462 " mov r5, r0\n"
1463 " ldr r0, [r4]\n"
1464 " ldr.w r8, =0x0005e470\n"
1465 " cmp r0, #0xb\n"
1466 " bne loc_fc28ee44\n"
1467 " movs r6, #0\n"
1468 " mov r5, r6\n"
1469 " b loc_fc28ee5c\n"
1470 "loc_fc28ee44:\n"
1471 " cmp r6, #1\n"
1472 " bne loc_fc28ee5c\n"
1473 " ldrsh.w r0, [r4, #4]\n"
1474 " movs r2, #2\n"
1475 " ldr r1, =0xfc28db53\n"
1476 " bl sub_fc14d46a\n"
1477 " strh r0, [r4, #4]\n"
1478 " movs r0, #0\n"
1479 " str r0, [r7, #0x28]\n"
1480 " b loc_fc28ee62\n"
1481 "loc_fc28ee5c:\n"
1482 " ldrh.w r0, [r8]\n"
1483 " strh r0, [r4, #4]\n"
1484 "loc_fc28ee62:\n"
1485 " cmp r5, #1\n"
1486 " bne loc_fc28ee74\n"
1487 " ldrsh.w r0, [r4, #0xc]\n"
1488 " movs r2, #0x20\n"
1489 " ldr r1, =0xfc28dba7\n"
1490 " bl sub_fc292c3e\n"
1491 " b loc_fc28ee78\n"
1492 "loc_fc28ee74:\n"
1493 " ldrh.w r0, [r8, #8]\n"
1494 "loc_fc28ee78:\n"
1495 " strh r0, [r4, #0xc]\n"
1496 " ldrsh.w r0, [r4, #6]\n"
1497
1498 " bl sub_fc16d680_my\n"
1499 "ldr pc, =0xfc28ee83\n"
1500 ".ltorg\n"
1501
1502
1503
1504
1505
1506
1507 );
1508 }
1509
1510 void __attribute__((naked,noinline)) sub_fc16d680_my() {
1511 asm volatile (
1512 " push {r4, r5, r6, lr}\n"
1513 " ldr r5, =0x0000cd4c\n"
1514 " mov r4, r0\n"
1515 " ldr r0, [r5, #4]\n"
1516 " cmp r0, #1\n"
1517 " beq loc_fc16d698\n"
1518 " movs r0, #0\n"
1519 " movw r2, #0x16b\n"
1520 " ldr r1, =0xfc16d6e0\n"
1521 " blx sub_fc2cf430\n"
1522 "loc_fc16d698:\n"
1523 " ldr r0, =0xfffff400\n"
1524 " cmp r4, r0\n"
1525 " bne loc_fc16d6a2\n"
1526 " ldrsh.w r4, [r5, #2]\n"
1527 "loc_fc16d6a2:\n"
1528 " strh r4, [r5, #2]\n"
1529 " cmp r4, r0\n"
1530 " bne loc_fc16d6b4\n"
1531 " movs r0, #0\n"
1532 " movw r2, #0x171\n"
1533 " ldr r1, =0xfc16d6e0\n"
1534 " blx sub_fc2cf430\n"
1535 "loc_fc16d6b4:\n"
1536 " mov r0, r4\n"
1537 " bl apex2us\n"
1538 " bl sub_fc199be0\n"
1539 " lsls r0, r0, #0x1f\n"
1540 " beq sub_fc16d6da\n"
1541 " pop.w {r4, r5, r6, lr}\n"
1542 " movs r0, #0\n"
1543 " movw r2, #0x176\n"
1544 " ldr r1, =0xfc16d6e0\n"
1545
1546 "ldr pc, =0xfc2ce979\n"
1547 "loc_fc16d6b2:\n"
1548 " pop {r4, r5, r6, pc}\n"
1549 ".ltorg\n"
1550 );
1551 }
1552
1553
1554