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_fc1dcaa8_my
- sub_fc1dc8d2_my
- sub_fc39ff78_my
- log_remote_hook
- log_rh
- exp_drv_task
- sub_fc28edc8_my
- sub_fc16d658_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_fc2cf348\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_fc2cf408\n"
73 " blx sub_fc2cf358\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_fc1dd978\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_fc1dcaa8_my\n"
153 "loc_fc1527ee:\n"
154 " b loc_fc152966\n"
155 "loc_fc1527f0:\n"
156 " ldr r0, [r0, #0x10]\n"
157
158 " bl sub_fc1dc8d2_my\n"
159 " b loc_fc152966\n"
160 "loc_fc1527f8:\n"
161 " movs r0, #1\n"
162 " bl sub_fc152ff4\n"
163 " b loc_fc152966\n"
164 "loc_fc152800:\n"
165 " bl sub_fc152a72\n"
166 " b loc_fc15280e\n"
167 "loc_fc152806:\n"
168 " ldr r0, [r0, #0xc]\n"
169 " uxtb r0, r0\n"
170 " bl sub_fc152ce2\n"
171 "loc_fc15280e:\n"
172 " str r6, [r4, #0x28]\n"
173 " b loc_fc152966\n"
174 "loc_fc152812:\n"
175 " bl sub_fc152ce8\n"
176 " b loc_fc152966\n"
177 "loc_fc152818:\n"
178 " bl sub_fc152ef0\n"
179 " b loc_fc15282a\n"
180 "loc_fc15281e:\n"
181 " ldr r0, [r0, #0x10]\n"
182 " bl sub_fc1dcb50\n"
183 " b loc_fc152966\n"
184 "loc_fc152826:\n"
185 " bl sub_fc152f7a\n"
186 "loc_fc15282a:\n"
187 " bl sub_fc150454\n"
188 " b loc_fc152966\n"
189 "loc_fc152830:\n"
190 " ldr r0, [r4, #0x54]\n"
191 " bl sub_fc153580\n"
192 " b loc_fc152966\n"
193 "loc_fc152838:\n"
194 " bl sub_fc15380c\n"
195 " b loc_fc152966\n"
196 ".ltorg\n"
197
198
199
200
201
202
203
204
205
206
207
208
209 "loc_fc15284c:\n"
210 " ldr r0, [r0, #0xc]\n"
211 " bl sub_fc153858\n"
212 " b loc_fc152966\n"
213 "loc_fc152854:\n"
214 " bl sub_fc1539d2\n"
215 " b loc_fc152966\n"
216 "loc_fc15285a:\n"
217 " bl sub_fc153da0\n"
218 " b loc_fc152966\n"
219 "loc_fc152860:\n"
220 " bl sub_fc153e36\n"
221 " b loc_fc152966\n"
222 "loc_fc152866:\n"
223 " ldr r0, [r0, #0xc]\n"
224 " uxtb r0, r0\n"
225 " bl sub_fc152ce2\n"
226 " b loc_fc152966\n"
227 "loc_fc152870:\n"
228 " bl sub_fc1db418\n"
229 " b loc_fc152966\n"
230 "loc_fc152876:\n"
231 " bl sub_fc1db600\n"
232 " b loc_fc152966\n"
233 "loc_fc15287c:\n"
234 " bl sub_fc1db69c\n"
235 " b loc_fc152966\n"
236 "loc_fc152882:\n"
237 " bl sub_fc1db718\n"
238 " b loc_fc152966\n"
239 "loc_fc152888:\n"
240 " b loc_fc152958\n"
241 "loc_fc15288a:\n"
242 " movs r0, #0\n"
243 " b loc_fc1528ae\n"
244 "loc_fc15288e:\n"
245 " bl sub_fc1dbb04\n"
246 " b loc_fc152966\n"
247 "loc_fc152894:\n"
248 " bl sub_fc1dbb64\n"
249 " b loc_fc152966\n"
250 "loc_fc15289a:\n"
251 " bl sub_fc1dbb68\n"
252 " b loc_fc152966\n"
253 "loc_fc1528a0:\n"
254 " bl sub_fc1dbb78\n"
255 " b loc_fc152966\n"
256 "loc_fc1528a6:\n"
257 " bl sub_fc1dbbf0\n"
258 " b loc_fc152966\n"
259 "loc_fc1528ac:\n"
260 " movs r0, #1\n"
261 "loc_fc1528ae:\n"
262 " bl sub_fc1db9e4\n"
263 " b loc_fc152966\n"
264 "loc_fc1528b4:\n"
265 " bl sub_fc153102\n"
266 " b loc_fc152966\n"
267 "loc_fc1528ba:\n"
268 " movs r0, #0\n"
269 " b loc_fc1528c0\n"
270 "loc_fc1528be:\n"
271 " ldr r0, [r0, #0xc]\n"
272 "loc_fc1528c0:\n"
273 " bl sub_fc153164\n"
274 " b loc_fc152966\n"
275 "loc_fc1528c6:\n"
276 " bl sub_fc1db8d8\n"
277 " b loc_fc152966\n"
278 "loc_fc1528cc:\n"
279 " ldr r1, =0x0003c4da\n"
280 " movs r2, #2\n"
281 " movs r0, #0x72\n"
282 " bl _GetPropertyCase\n"
283 " lsls r0, r0, #0x1f\n"
284 " beq loc_fc1528e8\n"
285 " movw r2, #0x508\n"
286 " ldr r1, =0xfc152410\n"
287 " movs r0, #0\n"
288 " blx sub_fc2cf408\n"
289 "loc_fc1528e8:\n"
290 " ldrh.w r0, [r4, #0x62]\n"
291 " cmp r0, #1\n"
292 " bne loc_fc152966\n"
293 " bl sub_fc1db8d2\n"
294 " b loc_fc152966\n"
295 "loc_fc1528f6:\n"
296 " bl sub_fc1db956\n"
297 " b loc_fc152966\n"
298 "loc_fc1528fc:\n"
299 " bl sub_fc1dd354\n"
300 " b loc_fc152966\n"
301 "loc_fc152902:\n"
302 " bl sub_fc150d7a\n"
303 " b loc_fc152966\n"
304 "loc_fc152908:\n"
305 " bl sub_fc2aa48e\n"
306 " b loc_fc152966\n"
307 "loc_fc15290e:\n"
308 " bl sub_fc2aa568\n"
309 " b loc_fc152966\n"
310 "loc_fc152914:\n"
311 " ldr r0, [r0, #0xc]\n"
312 " bl sub_fc1dbcc4\n"
313 " b loc_fc152966\n"
314 "loc_fc15291c:\n"
315 " bl sub_fc1dbd2c\n"
316 " b loc_fc152966\n"
317 "loc_fc152922:\n"
318 " bl sub_fc15893e\n"
319 " ldrh.w r0, [r4, #0x1a4]\n"
320 " cmp r0, #4\n"
321 " beq loc_fc152938\n"
322 " ldrh r0, [r4]\n"
323 " sub.w r1, r0, #0x4200\n"
324 " subs r1, #0x36\n"
325 " bne loc_fc152966\n"
326 "loc_fc152938:\n"
327 " bl sub_fc2aa568\n"
328 " bl sub_fc2aaa7e\n"
329 " bl sub_fc2aa8c6\n"
330 " b loc_fc152966\n"
331 "loc_fc152946:\n"
332 " movs r2, #0\n"
333 " movs r1, #0x11\n"
334 " b loc_fc152950\n"
335 "loc_fc15294c:\n"
336 " movs r2, #0\n"
337 " movs r1, #0x10\n"
338 "loc_fc152950:\n"
339 " movs r0, #0\n"
340 " bl sub_fc150f62\n"
341 " b loc_fc152966\n"
342 "loc_fc152958:\n"
343 " movw r2, #0x572\n"
344 " ldr r1, =0xfc152410\n"
345 " movs r0, #0\n"
346 " blx sub_fc2cf408\n"
347 "loc_fc152966:\n"
348
349 "ldr r0, [sp]\n"
350 "ldr r0, [r0]\n"
351 "bl log_capt_seq2\n"
352 " BL capt_seq_hook_set_nr\n"
353 " ldr r0, [sp]\n"
354 " ldr r1, [r0, #4]\n"
355 " ldr r0, [r5, #4]\n"
356 " blx sub_fc2cf328\n"
357 " ldr r7, [sp]\n"
358 " ldr r0, [r7, #8]\n"
359 " cbnz r0, loc_fc152984\n"
360 " movw r2, #0x128\n"
361 " ldr r1, =0xfc152410\n"
362 " movs r0, #0\n"
363 " blx sub_fc2cf408\n"
364 "loc_fc152984:\n"
365 " str r6, [r7, #8]\n"
366 " b loc_fc152766\n"
367
368
369
370
371
372 ".ltorg\n"
373 );
374 }
375
376 void __attribute__((naked,noinline)) sub_fc1dcaa8_my() {
377 asm volatile (
378 " push {r3, r4, r5, r6, r7, lr}\n"
379 " bl sub_fc151ece\n"
380 " mov r4, r0\n"
381 " movs r0, #0xc\n"
382 " bl sub_fc2d7930\n"
383 " ldr r6, =0x00014348\n"
384 " lsls r0, r0, #0x1f\n"
385 " mov.w r5, #1\n"
386 " bne loc_fc1dcb42\n"
387 " movs r2, #2\n"
388 " mov r1, sp\n"
389 " movw r0, #0x10d\n"
390
391 " bl _GetPropertyCase\n"
392 " lsls r0, r0, #0x1f\n"
393 " beq loc_fc1dcadc\n"
394 " movs r0, #0\n"
395 " movw r2, #0x16d\n"
396 " ldr r1, =0xfc1dcc28\n"
397 " blx sub_fc2cf408\n"
398 "loc_fc1dcadc:\n"
399 " ldrsh.w r0, [sp]\n"
400 " bl sub_fc1377fe\n"
401 " bl sub_fc1376d6\n"
402 " cmp r0, #1\n"
403 " bls loc_fc1dcb46\n"
404 " movs r0, #0\n"
405 " bl sub_fc13778e\n"
406 " bl sub_fc152cee\n"
407 " bl sub_fc154bcc\n"
408 " mov r1, r4\n"
409
410 "bl captseq_raw_addr_init_my\n"
411 " movs r2, #4\n"
412 " movw r0, #0x113\n"
413 " add.w r1, r4, #0x58\n"
414 " bl _SetPropertyCase\n"
415
416 " movs r2, #4\n"
417 " movs r0, #0x2d\n"
418 " add.w r1, r4, #0x5c\n"
419 " bl _SetPropertyCase\n"
420
421 " movs r2, #4\n"
422 " movs r0, #0x41\n"
423 " add.w r1, r4, #8\n"
424 " bl _SetPropertyCase\n"
425
426 " bl sub_fc1dd17e\n"
427 " mvn r1, #0x1000\n"
428 " blx sub_fc2cf3d8\n"
429 " mov r0, r4\n"
430 " bl sub_fc1dc678\n"
431 " mov r0, r4\n"
432
433 " bl sub_fc39ff78_my\n"
434 " lsls r0, r0, #0x1f\n"
435 " beq loc_fc1dcb44\n"
436 "loc_fc1dcb42:\n"
437 " str r5, [r6]\n"
438 "loc_fc1dcb44:\n"
439
440 " pop {r3, r4, r5, r6, r7, pc}\n"
441
442 "loc_fc1dcb46:\n"
443 " bl sub_fc150d70\n"
444 " bl sub_fc2d7968\n"
445 " pop {r3, r4, r5, r6, r7, pc}\n"
446 ".ltorg\n"
447 );
448 }
449
450 void __attribute__((naked,noinline)) sub_fc1dc8d2_my() {
451 asm volatile (
452 " push {r2, r3, r4, r5, r6, lr}\n"
453 " ldr r6, =0x0003c478\n"
454 " mov r4, r0\n"
455 " movs r5, #0\n"
456 " ldr r0, [r6, #0x28]\n"
457 " cbz r0, loc_fc1dc8fa\n"
458 " ldr r0, =0x00014348\n"
459 " ldr r0, [r0]\n"
460 " cbz r0, loc_fc1dc8e6\n"
461 " movs r5, #0x1d\n"
462 "loc_fc1dc8e6:\n"
463 " mov r2, r4\n"
464 " movs r1, #2\n"
465 " mov r0, r5\n"
466 " bl sub_fc150f62\n"
467 " mov r1, r5\n"
468 " mov r0, r4\n"
469 " bl sub_fc1dd7d6\n"
470 " b loc_fc1dcaa2\n"
471 "loc_fc1dc8fa:\n"
472 " bl sub_fc154bcc\n"
473 " mov r1, r4\n"
474
475 "bl captseq_raw_addr_init_my\n"
476 " movs r2, #4\n"
477 " movw r0, #0x113\n"
478 " add.w r1, r4, #0x58\n"
479 " bl _SetPropertyCase\n"
480
481 " movs r2, #4\n"
482 " movs r0, #0x2d\n"
483 " add.w r1, r4, #0x5c\n"
484 " bl _SetPropertyCase\n"
485
486 " ldr.w r0, [r6, #0x10c]\n"
487 " cbnz r0, loc_fc1dc934\n"
488 " ldrh.w r0, [r6, #0x1a2]\n"
489 " cmp r0, #3\n"
490 " beq loc_fc1dc93a\n"
491 " ldr r0, [r4, #8]\n"
492 " cmp r0, #1\n"
493 " bhi loc_fc1dc94a\n"
494 " b loc_fc1dc93a\n"
495 "loc_fc1dc934:\n"
496 " ldr r0, [r4, #0xc]\n"
497 " cmp r0, #1\n"
498 " bne loc_fc1dc94a\n"
499 "loc_fc1dc93a:\n"
500 " movs r0, #0xc\n"
501 " bl sub_fc2d7930\n"
502 " lsls r0, r0, #0x1f\n"
503 " beq loc_fc1dc94a\n"
504 " bl sub_fc150d70\n"
505 " movs r5, #1\n"
506 "loc_fc1dc94a:\n"
507 " lsls r0, r5, #0x1f\n"
508 " bne loc_fc1dca4c\n"
509 " ldr.w r0, [r6, #0xec]\n"
510 " cbz r0, loc_fc1dc96e\n"
511 " ldrh.w r0, [r6, #0x1a2]\n"
512 " cmp r0, #3\n"
513 " beq loc_fc1dc962\n"
514 " ldr r0, [r4, #8]\n"
515 " cmp r0, #1\n"
516 " bhi loc_fc1dc9ae\n"
517 "loc_fc1dc962:\n"
518 " ldr.w r0, [r6, #0x10c]\n"
519 " cbz r0, loc_fc1dc96e\n"
520 " ldr r0, [r4, #0xc]\n"
521 " cmp r0, #1\n"
522 " bhi loc_fc1dc9ae\n"
523 "loc_fc1dc96e:\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_fc1dc988\n"
530 " movs r2, #0xc9\n"
531 " movs r0, #0\n"
532 " ldr r1, =0xfc1dcc28\n"
533 " blx sub_fc2cf408\n"
534 "loc_fc1dc988:\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_fc1dc9a0\n"
540 " movs r0, #0\n"
541 " bl sub_fc13778e\n"
542 " b loc_fc1dc9ae\n"
543 "loc_fc1dc9a0:\n"
544 " bl sub_fc150d70\n"
545 " bl sub_fc2d7968\n"
546 " movs r5, #1\n"
547 " lsls r0, r5, #0x1f\n"
548 " bne loc_fc1dca90\n"
549 "loc_fc1dc9ae:\n"
550 " mov r0, r4\n"
551 " bl sub_fc1dd39e\n"
552 " mov r5, r0\n"
553 " lsls r0, r0, #0x1f\n"
554 " bne loc_fc1dca90\n"
555 " bl sub_fc1dd17e\n"
556 " mvn r1, #0x1000\n"
557 " blx sub_fc2cf3d8\n"
558 " mov r0, r4\n"
559 " bl sub_fc39fc56\n"
560 " mov r5, r0\n"
561 " lsls r0, r0, #0x1f\n"
562 " bne loc_fc1dca90\n"
563 " bl sub_fc152cee\n"
564 " mov r0, r4\n"
565 " bl sub_fc1dc678\n"
566 " ldr.w r0, [r6, #0x130]\n"
567 " cbnz r0, loc_fc1dc9f0\n"
568 " ldrh.w r0, [r6, #0x1a2]\n"
569 " cmp r0, #3\n"
570 " beq loc_fc1dc9f0\n"
571 " ldr r0, [r4, #8]\n"
572 " cmp r0, #1\n"
573 " bhi loc_fc1dc9f6\n"
574 "loc_fc1dc9f0:\n"
575 " movs r0, #2\n"
576 " bl sub_fc15980a\n"
577 "loc_fc1dc9f6:\n"
578 " ldr.w r0, [r6, #0xa8]\n"
579 " cmp r0, #0\n"
580 " beq loc_fc1dca6c\n"
581 " ldrh.w r0, [r6, #0x1a2]\n"
582 " movw r5, #0x1000\n"
583 " cmp r0, #3\n"
584 " beq loc_fc1dca26\n"
585 " ldr r0, [r4, #8]\n"
586 " cmp r0, #1\n"
587 " bls loc_fc1dca26\n"
588 " bl sub_fc1dd17e\n"
589 " movw r3, #0x112\n"
590 " movw r2, #0x3a98\n"
591 " mov r1, r5\n"
592 " str r3, [sp]\n"
593 " ldr r3, =0xfc1dcc28\n"
594 " bl sub_fc2d7ae4\n"
595 "loc_fc1dca26:\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_fc1dca42\n"
602 " movs r0, #0\n"
603 " movw r2, #0x116\n"
604 " ldr r1, =0xfc1dcc28\n"
605 " blx sub_fc2cf408\n"
606 "loc_fc1dca42:\n"
607 " ldr r0, [sp, #4]\n"
608 " cbnz r0, loc_fc1dca56\n"
609 " bl sub_fc1dd17e\n"
610 " b loc_fc1dca4e\n"
611 "loc_fc1dca4c:\n"
612 " b loc_fc1dca90\n"
613 "loc_fc1dca4e:\n"
614 " mov r1, r5\n"
615 " blx sub_fc2cf328\n"
616 " b loc_fc1dca6c\n"
617 "loc_fc1dca56:\n"
618 " bl sub_fc1dd17e\n"
619 " mov r1, r5\n"
620 " blx sub_fc2cf3d8\n"
621 " ldr r2, =0xfc1dc8c1\n"
622 " mov r3, r5\n"
623 " ldr r0, [sp, #4]\n"
624 " mov r1, r2\n"
625 " bl sub_fc322d70\n"
626 "loc_fc1dca6c:\n"
627 " ldr.w r0, [r6, #0xb0]\n"
628 " cbz r0, loc_fc1dca7a\n"
629 " mov r0, r4\n"
630 " bl sub_fc3a0740\n"
631 " b loc_fc1dcaa2\n"
632 "loc_fc1dca7a:\n"
633 " ldr.w r0, [r6, #0xb4]\n"
634 " cmp r0, #0\n"
635 " mov r0, r4\n"
636 " beq loc_fc1dca8a\n"
637 " bl sub_fc3a03ae\n"
638 " b loc_fc1dcaa2\n"
639 "loc_fc1dca8a:\n"
640
641 " bl sub_fc39ff78_my\n"
642 " b loc_fc1dcaa2\n"
643 "loc_fc1dca90:\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_fc1dd90c\n"
651 "loc_fc1dcaa2:\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_fc39ff78_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_fc39ff94\n"
665 " ldrh.w r0, [r7, #0x1a2]\n"
666 " cmp r0, #3\n"
667 " beq loc_fc39ff94\n"
668 " ldr r0, [r4, #8]\n"
669 " cmp r0, #1\n"
670 " bhi loc_fc39ff9e\n"
671 "loc_fc39ff94:\n"
672 " mov r0, r4\n"
673 " bl sub_fc1dc60e\n"
674 " bl sub_fc1dd03a\n"
675 "loc_fc39ff9e:\n"
676 " ldr.w r0, [r7, #0xa4]\n"
677 " cbnz r0, loc_fc39ffba\n"
678 " ldrh.w r0, [r7, #0x1a2]\n"
679 " cmp r0, #3\n"
680 " beq loc_fc39ffb2\n"
681 " ldr r0, [r4, #8]\n"
682 " cmp r0, #1\n"
683 " bhi loc_fc39ffba\n"
684 "loc_fc39ffb2:\n"
685 " bl sub_fc153152\n"
686 " bl sub_fc1dcc5a\n"
687 "loc_fc39ffba:\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_fc39ffd6\n"
694 " movs r0, #0\n"
695 " movw r2, #0x193\n"
696 " ldr r1, =0xfc3a0328\n"
697 " blx sub_fc2cf408\n"
698 "loc_fc39ffd6:\n"
699 " ldr r0, [sp, #4]\n"
700 " ubfx r0, r0, #8, #8\n"
701 " cmp r0, #6\n"
702 " bne loc_fc39ffe6\n"
703 " ldr r0, =0xfc39ff1b\n"
704 " movs r1, #0\n"
705 " b loc_fc39ffea\n"
706 "loc_fc39ffe6:\n"
707 " ldr r0, =0xfc1dc2d3\n"
708 " mov r1, r4\n"
709 "loc_fc39ffea:\n"
710 " bl sub_fc16fe1c\n"
711 " ldr.w r0, [r7, #0x18c]\n"
712 " cbz r0, loc_fc39fff8\n"
713 " bl sub_fc1dc546\n"
714 "loc_fc39fff8:\n"
715 " movs r0, #0\n"
716 " bl sub_fc15655e\n"
717
718 " mov r0, r4\n"
719 " bl sub_fc1dc724\n"
720 " ldr r1, =0x000265c4\n"
721 " movs r2, #4\n"
722 " movs r0, #0x8d\n"
723 " bl _GetPropertyCase\n"
724 " lsls r0, r0, #0x1f\n"
725 " beq loc_fc3a001e\n"
726 " movs r0, #0\n"
727 " movw r2, #0x1ae\n"
728 " ldr r1, =0xfc3a0328\n"
729 " blx sub_fc2cf408\n"
730 "loc_fc3a001e:\n"
731 " bl sub_fc156618\n"
732 " bl sub_fc1dc7c0\n"
733 " movs r1, #0\n"
734 " mov r0, r4\n"
735 " bl sub_fc39ff1c\n"
736 " mov r6, r0\n"
737 " BL wait_until_remote_button_is_released\n"
738 "bl log_remote_hook\n"
739 " ldr r0, [sp, #4]\n"
740 " ubfx r0, r0, #8, #8\n"
741 " cmp r0, #6\n"
742 " bne loc_fc3a003e\n"
743 " ldr r2, =0xfc1dc515\n"
744 " b loc_fc3a0040\n"
745 "loc_fc3a003e:\n"
746 " ldr r2, =0xfc1dc52b\n"
747 "loc_fc3a0040:\n"
748 " ldrh r0, [r4, #0x18]\n"
749 " ldr r5, =0x000265c4\n"
750 " cbz r0, loc_fc3a004e\n"
751 " cmp r0, #1\n"
752 " beq loc_fc3a0064\n"
753 " cmp r0, #4\n"
754 " bne loc_fc3a00ca\n"
755 "loc_fc3a004e:\n"
756 " str r6, [sp]\n"
757 " mov r3, r2\n"
758 " ldr r1, [r4, #0x5c]\n"
759 " mov r0, r4\n"
760 " ldr r2, [r5]\n"
761 " bl sub_fc1dc126\n"
762 " mov r5, r0\n"
763 " bl sub_fc28bb0a\n"
764 " b loc_fc3a00d8\n"
765 "loc_fc3a0064:\n"
766 " str r6, [sp]\n"
767 " mov r3, r2\n"
768 " ldr r1, [r4, #0x5c]\n"
769 " mov r8, r5\n"
770 " ldr r2, [r5]\n"
771 " mov r0, r4\n"
772 " bl sub_fc1dc186\n"
773 " movs r2, #1\n"
774 " mov r5, r0\n"
775 " movs r1, #0\n"
776 " movs r0, #0x45\n"
777 " bl sub_fc277200\n"
778
779 " lsls r0, r5, #0x1f\n"
780 " bne loc_fc3a00d8\n"
781 " ldr.w r0, [r7, #0x100]\n"
782 " cbz r0, loc_fc3a009a\n"
783 " ldr r1, [r4, #8]\n"
784 " ldr r2, =0x00212cc4\n"
785 " ldr r0, [r4, #0x5c]\n"
786 " add.w r1, r2, r1, lsl #2\n"
787 " str r0, [r1, #-0x4]\n"
788 " b loc_fc3a00c4\n"
789 "loc_fc3a009a:\n"
790 " ldr r0, =0xfc39ff1b\n"
791 " movs r1, #0\n"
792 " bl sub_fc16fe1c\n"
793 " movs r1, #1\n"
794 " mov r0, r4\n"
795 " bl sub_fc39ff1c\n"
796 " mov r6, r0\n"
797 " ldr.w r0, [r8]\n"
798 " mov r5, r8\n"
799 " bl sub_fc1dc5b0\n"
800 " ldr r1, [r4, #0x5c]\n"
801 " mov r3, r6\n"
802 " ldr r2, [r5]\n"
803 " mov r0, r4\n"
804 " bl sub_fc1dc1f4\n"
805 " mov r5, r0\n"
806 "loc_fc3a00c4:\n"
807 " bl sub_fc1dc0d0\n"
808 " b loc_fc3a00d8\n"
809 "loc_fc3a00ca:\n"
810 " movs r0, #0\n"
811 " movw r2, #0x1e1\n"
812 " ldr r1, =0xfc3a0328\n"
813 " blx sub_fc2cf408\n"
814 " movs r5, #0x1d\n"
815 "loc_fc3a00d8:\n"
816 " bl sub_fc1dc7c4\n"
817 " ldr.w r8, =0xfc39ff1b\n"
818 " lsls r0, r5, #0x1f\n"
819 " bne loc_fc3a0134\n"
820 " ldr.w r0, [r7, #0x108]\n"
821 " cbnz r0, loc_fc3a0100\n"
822 " mov r0, r4\n"
823 " bl sub_fc1dddba\n"
824 " lsls r0, r0, #0x1f\n"
825 " beq loc_fc3a0100\n"
826 " movs r0, #0\n"
827 " movw r2, #0x207\n"
828 " ldr r1, =0xfc3a0328\n"
829 " blx sub_fc2cf408\n"
830 "loc_fc3a0100:\n"
831 #ifdef CAPTSEQ_DEBUG_LOG
832 "bl log_rh\n"
833 #endif
834 "BL capt_seq_hook_raw_here\n"
835 "BL clear_current_raw_addr\n"
836 " mov r0, r4\n"
837 " bl sub_fc1dc7b0\n"
838 " mov r0, r4\n"
839 " bl sub_fc1dc784\n"
840 " cmp r6, r8\n"
841 " beq loc_fc3a0134\n"
842 " bl sub_fc1dd17e\n"
843 " movs r1, #4\n"
844 " movw sb, #0x214\n"
845 " ldr r3, =0xfc3a0328\n"
846 " movw r2, #0x3a98\n"
847 " str.w sb, [sp]\n"
848 " bl sub_fc2d7ae4\n"
849 " cbz r0, loc_fc3a0134\n"
850 " movs r0, #0\n"
851 " mov r2, sb\n"
852 " ldr r1, =0xfc3a0328\n"
853 " blx sub_fc2cf408\n"
854 "loc_fc3a0134:\n"
855 " ldr.w r0, [r7, #0x18c]\n"
856 " cbz r0, loc_fc3a0144\n"
857 " movs r2, #1\n"
858 " movs r1, #0\n"
859 " movs r0, #0x46\n"
860 " bl sub_fc277200\n"
861 "loc_fc3a0144:\n"
862 " movs r1, #2\n"
863 " mov r2, r4\n"
864 " mov r0, r5\n"
865 " bl sub_fc150f62\n"
866 " ldr r0, [r7, #0x28]\n"
867 " cmp r0, #0\n"
868 " mov r0, r8\n"
869 " beq loc_fc3a016a\n"
870 " cmp r6, r0\n"
871 " beq loc_fc3a015e\n"
872 " movs r1, #1\n"
873 " b loc_fc3a0160\n"
874 "loc_fc3a015e:\n"
875 " movs r1, #0\n"
876 "loc_fc3a0160:\n"
877 " mov r2, r5\n"
878 " mov r0, r4\n"
879 " bl sub_fc1dd794\n"
880 " b loc_fc3a017c\n"
881 "loc_fc3a016a:\n"
882 " cmp r6, r0\n"
883 " beq loc_fc3a0172\n"
884 " movs r1, #1\n"
885 " b loc_fc3a0174\n"
886 "loc_fc3a0172:\n"
887 " movs r1, #0\n"
888 "loc_fc3a0174:\n"
889 " mov r2, r5\n"
890 " mov r0, r4\n"
891 " bl sub_fc1dd74e\n"
892 "loc_fc3a017c:\n"
893 " mov r0, r5\n"
894 " pop.w {r2, r3, r4, r5, r6, r7, r8, sb, sl, pc}\n"
895 ".ltorg\n"
896 );
897 }
898
899 void log_remote_hook(void) {
900 _LogCameraEvent(0x60,"remote hook");
901 }
902 void log_rh(void) {
903 _LogCameraEvent(0x60,"raw hook");
904 }
905
906
907
908
909
910 void __attribute__((naked,noinline)) exp_drv_task() {
911 asm volatile (
912
913 " push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}\n"
914 " sub sp, #0x2c\n"
915 " ldr.w sb, =0x0000d1b0\n"
916 " ldr.w sl, =0xfffff400\n"
917 " movs r0, #0\n"
918 " ldr r6, =0x0005e458\n"
919 " add.w r8, sp, #0x1c\n"
920 " movw fp, #0xbb8\n"
921 " str r0, [sp, #0xc]\n"
922 "loc_fc291cea:\n"
923 " ldr.w r0, [sb, #0x20]\n"
924 " movs r2, #0\n"
925 " add r1, sp, #0x28\n"
926 " mov r4, sb\n"
927 " blx sub_fc2cf348\n"
928 " ldr r0, [sp, #0xc]\n"
929 " cmp r0, #1\n"
930 " bne loc_fc291d22\n"
931 " ldr r0, [sp, #0x28]\n"
932 " ldr r0, [r0]\n"
933 " cmp r0, #0x14\n"
934 "loc_fc291d04:\n"
935 " beq loc_fc291e04\n"
936 " cmp r0, #0x15\n"
937 " beq loc_fc291d04\n"
938 " cmp r0, #0x16\n"
939 " beq loc_fc291d04\n"
940 " cmp r0, #0x17\n"
941 " beq loc_fc291d04\n"
942 " cmp r0, #0x18\n"
943 " beq loc_fc291e14\n"
944 " cmp r0, #0x2e\n"
945 " beq loc_fc291dbe\n"
946 " movs r0, #0\n"
947 " add r1, sp, #0xc\n"
948 " bl sub_fc291c8a\n"
949 "loc_fc291d22:\n"
950 " ldr r0, [sp, #0x28]\n"
951 " ldr r1, [r0]\n"
952 " cmp r1, #0x34\n"
953 " bne loc_fc291d40\n"
954 " bl sub_fc292b82\n"
955 " ldr.w r0, [sb, #0x1c]\n"
956 " movs r1, #1\n"
957 " blx sub_fc2cf328\n"
958 " blx sub_fc2cf358\n"
959 " add sp, #0x2c\n"
960
961 " ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}\n"
962
963
964
965 "loc_fc291d40:\n"
966 " cmp r1, #0x33\n"
967 " bne loc_fc291d52\n"
968 " add.w r0, r0, #0xac\n"
969 " ldrd r2, r1, [r0]\n"
970 " mov r0, r1\n"
971 " blx r2\n"
972 " b loc_fc292162\n"
973 "loc_fc291d52:\n"
974 " cmp r1, #0x2c\n"
975 " bne loc_fc291d88\n"
976 " ldr r0, [r4, #0x1c]\n"
977 " movs r1, #0x80\n"
978 " blx sub_fc2cf3d8\n"
979 " ldr r0, =0xfc28db35\n"
980 " movs r1, #0x80\n"
981 " bl sub_fc14d27a\n"
982 " ldr r0, [r4, #0x1c]\n"
983 " movs r1, #0x80\n"
984 " mov r2, fp\n"
985 " blx sub_fc2cf1b8\n"
986 " lsls r0, r0, #0x1f\n"
987 " beq loc_fc291d7a\n"
988 " movw r2, #0x17d8\n"
989 " b loc_fc291e0a\n"
990 "loc_fc291d7a:\n"
991 " ldr r1, [sp, #0x28]\n"
992 " add.w r1, r1, #0xac\n"
993 " ldrd r1, r0, [r1]\n"
994 " blx r1\n"
995 " b loc_fc292162\n"
996 "loc_fc291d88:\n"
997 " cmp r1, #0x2d\n"
998 " bne loc_fc291dba\n"
999 " add r1, sp, #0xc\n"
1000 " bl sub_fc291c8a\n"
1001 " movw r5, #0x100\n"
1002 " ldr r0, [r4, #0x1c]\n"
1003 " mov r1, r5\n"
1004 " blx sub_fc2cf3d8\n"
1005 " ldr r0, =0xfc28db3f\n"
1006 " mov r1, r5\n"
1007 " bl sub_fc14dbfa\n"
1008 " ldr r0, [r4, #0x1c]\n"
1009 " mov r2, fp\n"
1010 " mov r1, r5\n"
1011 " blx sub_fc2cf1b8\n"
1012 " lsls r0, r0, #0x1f\n"
1013 " beq loc_fc291d7a\n"
1014 " movw r2, #0x17e2\n"
1015 " b loc_fc291e0a\n"
1016 "loc_fc291dba:\n"
1017 " cmp r1, #0x2e\n"
1018 " bne loc_fc291dc8\n"
1019 "loc_fc291dbe:\n"
1020 " ldr r0, [sp, #0x28]\n"
1021 " add r1, sp, #0xc\n"
1022 " bl sub_fc291c8a\n"
1023 " b loc_fc291d7a\n"
1024 "loc_fc291dc8:\n"
1025 " cmp r1, #0x31\n"
1026 " bne loc_fc291dda\n"
1027 " bl sub_fc16d89c\n"
1028 " bl sub_fc16e228\n"
1029 " bl sub_fc16df0a\n"
1030 " b loc_fc291d7a\n"
1031 "loc_fc291dda:\n"
1032 " cmp r1, #0x32\n"
1033 " bne loc_fc291e14\n"
1034 " ldr r0, [r4, #0x1c]\n"
1035 " movs r1, #4\n"
1036 " blx sub_fc2cf3d8\n"
1037 " ldr r1, =0xfc28db53\n"
1038 " movs r2, #4\n"
1039 " mov r0, sl\n"
1040 " bl sub_fc292bd4\n"
1041 " bl sub_fc16d5fe\n"
1042 " ldr r0, [r4, #0x1c]\n"
1043 " movs r1, #4\n"
1044 " mov r2, fp\n"
1045 " blx sub_fc2cf3d0\n"
1046 " lsls r0, r0, #0x1f\n"
1047 " beq loc_fc291d7a\n"
1048 " b loc_fc291e06\n"
1049 "loc_fc291e04:\n"
1050 " b loc_fc291e14\n"
1051 "loc_fc291e06:\n"
1052 " movw r2, #0x181a\n"
1053 "loc_fc291e0a:\n"
1054 " ldr r1, =0xfc28e360\n"
1055 " movs r0, #0\n"
1056 " blx sub_fc2cf408\n"
1057 " b loc_fc291d7a\n"
1058 "loc_fc291e14:\n"
1059 " ldr r0, [sp, #0x28]\n"
1060 " movs r5, #1\n"
1061 " ldr r1, [r0]\n"
1062 " cmp r1, #0x12\n"
1063 " beq loc_fc291e22\n"
1064 " cmp r1, #0x13\n"
1065 " bne loc_fc291e60\n"
1066 "loc_fc291e22:\n"
1067 " ldr.w r1, [r0, #0x94]\n"
1068 " mov r4, r8\n"
1069 " add.w r1, r1, r1, lsl #1\n"
1070 " add.w r1, r0, r1, lsl #2\n"
1071 " subs r1, #8\n"
1072 " ldm r1!, {r2, r3, r7}\n"
1073 " stm r4!, {r2, r3, r7}\n"
1074 " bl sub_fc290578\n"
1075 " ldr r0, [sp, #0x28]\n"
1076 " add.w r0, r0, #0x94\n"
1077 " ldrd r3, r2, [r0, #0x18]\n"
1078 " ldr r1, [r0]\n"
1079 " sub.w r0, r0, #0x90\n"
1080 " blx r3\n"
1081 " ldr r0, [sp, #0x28]\n"
1082 " bl sub_fc292dea\n"
1083 " ldr r0, [sp, #0x28]\n"
1084 " add.w r0, r0, #0x94\n"
1085 " ldr r1, [r0]\n"
1086 " ldrd r3, r2, [r0, #0x20]\n"
1087 " b loc_fc292088\n"
1088 "loc_fc291e60:\n"
1089 " cmp r1, #0x14\n"
1090 " beq loc_fc291e74\n"
1091 " cmp r1, #0x15\n"
1092 " beq loc_fc291e74\n"
1093 " cmp r1, #0x16\n"
1094 " beq loc_fc291e74\n"
1095 " cmp r1, #0x17\n"
1096 " beq loc_fc291e74\n"
1097 " cmp r1, #0x18\n"
1098 " bne loc_fc291ee6\n"
1099 "loc_fc291e74:\n"
1100 " add r3, sp, #0xc\n"
1101 " mov r2, sp\n"
1102 " add r1, sp, #0x1c\n"
1103 " bl sub_fc29074c\n"
1104 " cmp r0, #1\n"
1105 " mov r4, r0\n"
1106 " beq loc_fc291e88\n"
1107 " cmp r4, #5\n"
1108 " bne loc_fc291e9e\n"
1109 "loc_fc291e88:\n"
1110 " ldr r0, [sp, #0x28]\n"
1111 " mov r2, r4\n"
1112 " add.w r0, r0, #0x94\n"
1113 " ldrd r7, r3, [r0, #0x18]\n"
1114 " ldr r1, [r0]\n"
1115 " sub.w r0, r0, #0x90\n"
1116 " blx r7\n"
1117 " b loc_fc291ec4\n"
1118 "loc_fc291e9e:\n"
1119 " cmp r4, #2\n"
1120 " beq loc_fc291ea6\n"
1121 " cmp r4, #6\n"
1122 " bne loc_fc291ed0\n"
1123 "loc_fc291ea6:\n"
1124 " ldr r0, [sp, #0x28]\n"
1125 " mov r2, r4\n"
1126 " add.w r0, r0, #0x94\n"
1127 " ldrd r7, r3, [r0, #0x18]\n"
1128 " ldr r1, [r0]\n"
1129 " sub.w r0, r0, #0x90\n"
1130 " blx r7\n"
1131 " ldr r0, [sp, #0x28]\n"
1132 " add r1, sp, #0x1c\n"
1133 " mov r2, sp\n"
1134 " bl sub_fc291a18\n"
1135 "loc_fc291ec4:\n"
1136 " ldr r2, [sp, #0xc]\n"
1137 " mov r1, r4\n"
1138 " ldr r0, [sp, #0x28]\n"
1139 " bl sub_fc291c3a\n"
1140 " b loc_fc29208e\n"
1141 "loc_fc291ed0:\n"
1142 " ldr r0, [sp, #0x28]\n"
1143 " mov r2, r4\n"
1144 " add.w r0, r0, #0x94\n"
1145 " ldrd r7, r3, [r0, #0x18]\n"
1146 " ldr r1, [r0]\n"
1147 " sub.w r0, r0, #0x90\n"
1148 " blx r7\n"
1149 " b loc_fc29208e\n"
1150 "loc_fc291ee6:\n"
1151 " cmp r1, #0x28\n"
1152 " beq loc_fc291eee\n"
1153 " cmp r1, #0x29\n"
1154 " bne loc_fc291f20\n"
1155 "loc_fc291eee:\n"
1156 " ldr.w r1, [r0, #0x94]\n"
1157 " mov r4, r8\n"
1158 " add.w r1, r1, r1, lsl #1\n"
1159 " add.w r1, r0, r1, lsl #2\n"
1160 " subs r1, #8\n"
1161 " ldm r1!, {r2, r3, r7}\n"
1162 " stm r4!, {r2, r3, r7}\n"
1163 " bl sub_fc28f6ac\n"
1164 " ldr r0, [sp, #0x28]\n"
1165 " add.w r0, r0, #0x94\n"
1166 " ldrd r3, r2, [r0, #0x18]\n"
1167 " ldr r1, [r0]\n"
1168 " sub.w r0, r0, #0x90\n"
1169 " blx r3\n"
1170 " ldr r0, [sp, #0x28]\n"
1171 " bl sub_fc28fa9c\n"
1172 " b loc_fc29208e\n"
1173 "loc_fc291f20:\n"
1174 " adds r1, r0, #4\n"
1175 " mov r4, r8\n"
1176 " ldm r1!, {r2, r3, r7}\n"
1177 " stm r4!, {r2, r3, r7}\n"
1178 " ldr r1, [r0]\n"
1179 " cmp r1, #0x2c\n"
1180 " bhs loc_fc291f62\n"
1181 " tbb [pc, r1]\n"
1182 "branchtable_fc291f32:\n"
1183 " .byte((loc_fc291f5e - branchtable_fc291f32) / 2)\n"
1184 " .byte((loc_fc291f5e - branchtable_fc291f32) / 2)\n"
1185 " .byte((loc_fc291f64 - branchtable_fc291f32) / 2)\n"
1186 " .byte((loc_fc291f6a - branchtable_fc291f32) / 2)\n"
1187 " .byte((loc_fc291f6a - branchtable_fc291f32) / 2)\n"
1188 " .byte((loc_fc291f6a - branchtable_fc291f32) / 2)\n"
1189 " .byte((loc_fc291f5e - branchtable_fc291f32) / 2)\n"
1190 " .byte((loc_fc291f64 - branchtable_fc291f32) / 2)\n"
1191 " .byte((loc_fc291f6a - branchtable_fc291f32) / 2)\n"
1192 " .byte((loc_fc291f6a - branchtable_fc291f32) / 2)\n"
1193 " .byte((loc_fc291f7c - branchtable_fc291f32) / 2)\n"
1194 " .byte((loc_fc291f7c - branchtable_fc291f32) / 2)\n"
1195 " .byte((loc_fc29206c - branchtable_fc291f32) / 2)\n"
1196 " .byte((loc_fc292072 - branchtable_fc291f32) / 2)\n"
1197 " .byte((loc_fc292072 - branchtable_fc291f32) / 2)\n"
1198 " .byte((loc_fc292072 - branchtable_fc291f32) / 2)\n"
1199 " .byte((loc_fc292072 - branchtable_fc291f32) / 2)\n"
1200 " .byte((loc_fc292078 - branchtable_fc291f32) / 2)\n"
1201 " .byte((loc_fc29207c - branchtable_fc291f32) / 2)\n"
1202 " .byte((loc_fc29207c - branchtable_fc291f32) / 2)\n"
1203 " .byte((loc_fc29207c - branchtable_fc291f32) / 2)\n"
1204 " .byte((loc_fc29207c - branchtable_fc291f32) / 2)\n"
1205 " .byte((loc_fc29207c - branchtable_fc291f32) / 2)\n"
1206 " .byte((loc_fc29207c - branchtable_fc291f32) / 2)\n"
1207 " .byte((loc_fc29207c - branchtable_fc291f32) / 2)\n"
1208 " .byte((loc_fc291f70 - branchtable_fc291f32) / 2)\n"
1209 " .byte((loc_fc291f76 - branchtable_fc291f32) / 2)\n"
1210 " .byte((loc_fc291f76 - branchtable_fc291f32) / 2)\n"
1211 " .byte((loc_fc291f76 - branchtable_fc291f32) / 2)\n"
1212 " .byte((loc_fc291fac - branchtable_fc291f32) / 2)\n"
1213 " .byte((loc_fc291fac - branchtable_fc291f32) / 2)\n"
1214 " .byte((loc_fc291fac - branchtable_fc291f32) / 2)\n"
1215 " .byte((loc_fc291fb2 - branchtable_fc291f32) / 2)\n"
1216 " .byte((loc_fc291fdc - branchtable_fc291f32) / 2)\n"
1217 " .byte((loc_fc29207c - branchtable_fc291f32) / 2)\n"
1218 " .byte((loc_fc29207c - branchtable_fc291f32) / 2)\n"
1219 " .byte((loc_fc292006 - branchtable_fc291f32) / 2)\n"
1220 " .byte((loc_fc292030 - branchtable_fc291f32) / 2)\n"
1221 " .byte((loc_fc29205a - branchtable_fc291f32) / 2)\n"
1222 " .byte((loc_fc29205a - branchtable_fc291f32) / 2)\n"
1223 " .byte((loc_fc29207c - branchtable_fc291f32) / 2)\n"
1224 " .byte((loc_fc29207c - branchtable_fc291f32) / 2)\n"
1225 " .byte((loc_fc292060 - branchtable_fc291f32) / 2)\n"
1226 " .byte((loc_fc292066 - branchtable_fc291f32) / 2)\n"
1227 ".align 1\n"
1228 "loc_fc291f5e:\n"
1229 " bl sub_fc28e0b0\n"
1230 "loc_fc291f62:\n"
1231 " b loc_fc29207c\n"
1232 "loc_fc291f64:\n"
1233 " bl sub_fc28e314\n"
1234 " b loc_fc29207c\n"
1235 "loc_fc291f6a:\n"
1236 " bl sub_fc28e53e\n"
1237 " b loc_fc29207c\n"
1238 "loc_fc291f70:\n"
1239 " bl sub_fc28e7e2\n"
1240 " b loc_fc29207c\n"
1241 "loc_fc291f76:\n"
1242 " bl sub_fc28e996\n"
1243 " b loc_fc29207c\n"
1244 "loc_fc291f7c:\n"
1245
1246 " bl sub_fc28edc8_my\n"
1247 " movs r5, #0\n"
1248 " b loc_fc29207c\n"
1249 ".ltorg\n"
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288 "loc_fc291fac:\n"
1289 " bl sub_fc28eec2\n"
1290 " b loc_fc29207c\n"
1291 "loc_fc291fb2:\n"
1292 " ldrh r1, [r0, #4]\n"
1293 " strh.w r1, [sp, #0x1c]\n"
1294 " ldrh r1, [r6, #2]\n"
1295 " strh.w r1, [sp, #0x1e]\n"
1296 " ldrh r1, [r6, #4]\n"
1297 " strh.w r1, [sp, #0x20]\n"
1298 " ldrh r1, [r6, #6]\n"
1299 " strh.w r1, [sp, #0x22]\n"
1300 " ldrh r1, [r0, #0xc]\n"
1301 " strh.w r1, [sp, #0x24]\n"
1302 " ldrh r1, [r6, #0xa]\n"
1303 " strh.w r1, [sp, #0x26]\n"
1304 " bl sub_fc28f3f2\n"
1305 " b loc_fc29207c\n"
1306 "loc_fc291fdc:\n"
1307 " ldrh r1, [r0, #4]\n"
1308 " strh.w r1, [sp, #0x1c]\n"
1309 " ldrh r1, [r6, #2]\n"
1310 " strh.w r1, [sp, #0x1e]\n"
1311 " ldrh r1, [r6, #4]\n"
1312 " strh.w r1, [sp, #0x20]\n"
1313 " ldrh r1, [r6, #6]\n"
1314 " strh.w r1, [sp, #0x22]\n"
1315 " ldrh r1, [r6, #8]\n"
1316 " strh.w r1, [sp, #0x24]\n"
1317 " ldrh r1, [r6, #0xa]\n"
1318 " strh.w r1, [sp, #0x26]\n"
1319 " bl sub_fc292c40\n"
1320 " b loc_fc29207c\n"
1321 "loc_fc292006:\n"
1322 " ldrh r1, [r6]\n"
1323 " strh.w r1, [sp, #0x1c]\n"
1324 " ldrh r1, [r0, #6]\n"
1325 "loc_fc29200e:\n"
1326 " strh.w r1, [sp, #0x1e]\n"
1327 " ldrh r1, [r6, #4]\n"
1328 " strh.w r1, [sp, #0x20]\n"
1329 " ldrh r1, [r6, #6]\n"
1330 " strh.w r1, [sp, #0x22]\n"
1331 " ldrh r1, [r6, #8]\n"
1332 " strh.w r1, [sp, #0x24]\n"
1333 " ldrh r1, [r6, #0xa]\n"
1334 " strh.w r1, [sp, #0x26]\n"
1335 "loc_fc29202a:\n"
1336 " bl sub_fc292cc6\n"
1337 " b loc_fc29207c\n"
1338 "loc_fc292030:\n"
1339 " ldrh r1, [r6]\n"
1340 " strh.w r1, [sp, #0x1c]\n"
1341 " ldrh r1, [r6, #2]\n"
1342 " strh.w r1, [sp, #0x1e]\n"
1343 " ldrh r1, [r6, #4]\n"
1344 " strh.w r1, [sp, #0x20]\n"
1345 " ldrh r1, [r6, #6]\n"
1346 " strh.w r1, [sp, #0x22]\n"
1347 " ldrh r1, [r0, #0xc]\n"
1348 " strh.w r1, [sp, #0x24]\n"
1349 " ldrh r1, [r6, #0xa]\n"
1350 " strh.w r1, [sp, #0x26]\n"
1351 " bl sub_fc292d7c\n"
1352 " b loc_fc29207c\n"
1353 "loc_fc29205a:\n"
1354 " bl sub_fc28f4d2\n"
1355 " b loc_fc29207c\n"
1356 "loc_fc292060:\n"
1357 " bl sub_fc28fb64\n"
1358 " b loc_fc29207c\n"
1359 "loc_fc292066:\n"
1360 " bl sub_fc28ff46\n"
1361 " b loc_fc29207c\n"
1362 "loc_fc29206c:\n"
1363 " bl sub_fc29014c\n"
1364 " b loc_fc29207c\n"
1365 "loc_fc292072:\n"
1366 " bl sub_fc2902a2\n"
1367 " b loc_fc29207c\n"
1368 "loc_fc292078:\n"
1369 " bl sub_fc2903be\n"
1370 "loc_fc29207c:\n"
1371 " ldr r0, [sp, #0x28]\n"
1372 " add.w r0, r0, #0x94\n"
1373 " ldrd r3, r2, [r0, #0x18]\n"
1374 " ldr r1, [r0]\n"
1375 "loc_fc292088:\n"
1376 " sub.w r0, r0, #0x90\n"
1377 " blx r3\n"
1378 "loc_fc29208e:\n"
1379 " ldr r0, [sp, #0x28]\n"
1380 " ldr r0, [r0]\n"
1381 " cmp r0, #0x10\n"
1382 " beq loc_fc2920b2\n"
1383 " bgt loc_fc2920a6\n"
1384 " cmp r0, #1\n"
1385 " beq loc_fc2920b2\n"
1386 " cmp r0, #4\n"
1387 " beq loc_fc2920b2\n"
1388 " cmp r0, #0xe\n"
1389 " bne loc_fc2920e0\n"
1390 " b loc_fc2920b2\n"
1391 "loc_fc2920a6:\n"
1392 " cmp r0, #0x13\n"
1393 " beq loc_fc2920b2\n"
1394 " cmp r0, #0x18\n"
1395 " beq loc_fc2920b2\n"
1396 " cmp r0, #0x1b\n"
1397 " bne loc_fc2920e0\n"
1398 "loc_fc2920b2:\n"
1399 " ldrsh.w r1, [r6]\n"
1400 " mov r2, sl\n"
1401 " cmp r1, sl\n"
1402 " beq loc_fc2920c4\n"
1403 " ldrsh.w r0, [r6, #8]\n"
1404 " cmp r0, r2\n"
1405 " bne loc_fc2920d8\n"
1406 "loc_fc2920c4:\n"
1407 " add r0, sp, #0x10\n"
1408 " bl sub_fc2dd202\n"
1409 " ldrh.w r0, [sp, #0x10]\n"
1410 " strh.w r0, [sp, #0x1c]\n"
1411 " ldrh.w r0, [sp, #0x18]\n"
1412 " b loc_fc2920dc\n"
1413 "loc_fc2920d8:\n"
1414 " strh.w r1, [sp, #0x1c]\n"
1415 "loc_fc2920dc:\n"
1416 " strh.w r0, [sp, #0x24]\n"
1417 "loc_fc2920e0:\n"
1418 " cmp r5, #1\n"
1419 " ldr r0, [sp, #0x28]\n"
1420 " bne loc_fc292118\n"
1421 " movs r2, #0xc\n"
1422 " ldr.w r1, [r0, #0x94]\n"
1423 " add.w r1, r1, r1, lsl #1\n"
1424 " add.w r4, r0, r1, lsl #2\n"
1425 " ldr r0, =0x0005e458\n"
1426 " subs r4, #8\n"
1427 " add r1, sp, #0x1c\n"
1428 " blx sub_fc2cf428\n"
1429 " ldr r0, =0x0005e458\n"
1430 " movs r2, #0xc\n"
1431 " add r1, sp, #0x1c\n"
1432 " adds r0, #0xc\n"
1433 " blx sub_fc2cf428\n"
1434 " ldr r0, =0x0005e458\n"
1435 " movs r2, #0xc\n"
1436 " mov r1, r4\n"
1437 " adds r0, #0x18\n"
1438 " blx sub_fc2cf428\n"
1439 " b loc_fc292162\n"
1440 "loc_fc292118:\n"
1441 " ldr r0, [r0]\n"
1442 " mov.w r3, #1\n"
1443 " cmp r0, #0xb\n"
1444 " bne loc_fc292142\n"
1445 " movs r2, #0\n"
1446 " mov r1, r3\n"
1447 " strd r2, r3, [sp]\n"
1448 " movs r0, #0\n"
1449 " mov r2, r3\n"
1450 " bl sub_fc28df02\n"
1451 " movs r3, #1\n"
1452 " movs r2, #0\n"
1453 " mov r1, r3\n"
1454 " movs r0, #0\n"
1455 " strd r2, r3, [sp]\n"
1456 " mov r2, r3\n"
1457 " b loc_fc29215e\n"
1458 "loc_fc292142:\n"
1459 " movs r2, #1\n"
1460 " strd r2, r3, [sp]\n"
1461 " mov r3, r2\n"
1462 " mov r1, r2\n"
1463 " mov r0, r2\n"
1464 " bl sub_fc28df02\n"
1465 " movs r3, #1\n"
1466 " str r3, [sp]\n"
1467 " mov r2, r3\n"
1468 " mov r1, r3\n"
1469 " mov r0, r3\n"
1470 " str r3, [sp, #4]\n"
1471 "loc_fc29215e:\n"
1472 " bl sub_fc28e036\n"
1473 "loc_fc292162:\n"
1474 " ldr r0, [sp, #0x28]\n"
1475 " bl sub_fc292b82\n"
1476 " b loc_fc291cea\n"
1477 ".ltorg\n"
1478 );
1479 }
1480
1481 void __attribute__((naked,noinline)) sub_fc28edc8_my() {
1482 asm volatile (
1483 " push.w {r4, r5, r6, r7, r8, lr}\n"
1484 " ldr r7, =0x0000d1b0\n"
1485 " movs r1, #0x3e\n"
1486 " mov r4, r0\n"
1487 " ldr r0, [r7, #0x1c]\n"
1488 " blx sub_fc2cf3d8\n"
1489 " movs r2, #0\n"
1490 " ldrsh.w r0, [r4, #4]\n"
1491 " movs r3, #1\n"
1492 " mov r1, r2\n"
1493 " bl sub_fc28db94\n"
1494 " mov r6, r0\n"
1495 " ldrsh.w r0, [r4, #6]\n"
1496 " bl sub_fc28dd32\n"
1497 " ldrsh.w r0, [r4, #8]\n"
1498 " bl sub_fc28dd76\n"
1499 " ldrsh.w r0, [r4, #0xa]\n"
1500 " bl sub_fc28ddba\n"
1501 " ldrsh.w r0, [r4, #0xc]\n"
1502 " movs r1, #0\n"
1503 " bl sub_fc28ddfe\n"
1504 " mov r5, r0\n"
1505 " ldr r0, [r4]\n"
1506 " ldr.w r8, =0x0005e470\n"
1507 " cmp r0, #0xb\n"
1508 " bne loc_fc28ee1c\n"
1509 " movs r6, #0\n"
1510 " mov r5, r6\n"
1511 " b loc_fc28ee34\n"
1512 "loc_fc28ee1c:\n"
1513 " cmp r6, #1\n"
1514 " bne loc_fc28ee34\n"
1515 " ldrsh.w r0, [r4, #4]\n"
1516 " movs r2, #2\n"
1517 " ldr r1, =0xfc28db2b\n"
1518 " bl sub_fc14d46a\n"
1519 " strh r0, [r4, #4]\n"
1520 " movs r0, #0\n"
1521 " str r0, [r7, #0x28]\n"
1522 " b loc_fc28ee3a\n"
1523 "loc_fc28ee34:\n"
1524 " ldrh.w r0, [r8]\n"
1525 " strh r0, [r4, #4]\n"
1526 "loc_fc28ee3a:\n"
1527 " cmp r5, #1\n"
1528 " bne loc_fc28ee4c\n"
1529 " ldrsh.w r0, [r4, #0xc]\n"
1530 " movs r2, #0x20\n"
1531 " ldr r1, =0xfc28db7f\n"
1532 " bl sub_fc292c16\n"
1533 " b loc_fc28ee50\n"
1534 "loc_fc28ee4c:\n"
1535 " ldrh.w r0, [r8, #8]\n"
1536 "loc_fc28ee50:\n"
1537 " strh r0, [r4, #0xc]\n"
1538 " ldrsh.w r0, [r4, #6]\n"
1539
1540 " bl sub_fc16d658_my\n"
1541 "ldr pc, =0xfc28ee5b\n"
1542 ".ltorg\n"
1543
1544
1545
1546
1547
1548
1549 );
1550 }
1551
1552 void __attribute__((naked,noinline)) sub_fc16d658_my() {
1553 asm volatile (
1554 " push {r4, r5, r6, lr}\n"
1555 " ldr r5, =0x0000cd4c\n"
1556 " mov r4, r0\n"
1557 " ldr r0, [r5, #4]\n"
1558 " cmp r0, #1\n"
1559 " beq loc_fc16d670\n"
1560 " movs r0, #0\n"
1561 " movw r2, #0x16b\n"
1562 " ldr r1, =0xfc16d6b8\n"
1563 " blx sub_fc2cf408\n"
1564 "loc_fc16d670:\n"
1565 " ldr r0, =0xfffff400\n"
1566 " cmp r4, r0\n"
1567 " bne loc_fc16d67a\n"
1568 " ldrsh.w r4, [r5, #2]\n"
1569 "loc_fc16d67a:\n"
1570 " strh r4, [r5, #2]\n"
1571 " cmp r4, r0\n"
1572 " bne loc_fc16d68c\n"
1573 " movs r0, #0\n"
1574 " movw r2, #0x171\n"
1575 " ldr r1, =0xfc16d6b8\n"
1576 " blx sub_fc2cf408\n"
1577 "loc_fc16d68c:\n"
1578 " mov r0, r4\n"
1579 " bl apex2us\n"
1580
1581
1582
1583 " bl sub_fc199bb8\n"
1584 " lsls r0, r0, #0x1f\n"
1585 " beq loc_fc16d6b2\n"
1586 " pop.w {r4, r5, r6, lr}\n"
1587 " movs r0, #0\n"
1588 " movw r2, #0x176\n"
1589 " ldr r1, =0xfc16d6b8\n"
1590
1591 "ldr pc, =0xfc2ce951\n"
1592 "loc_fc16d6b2:\n"
1593 " pop {r4, r5, r6, pc}\n"
1594 ".ltorg\n"
1595 );
1596 }
1597
1598
1599