This source file includes following definitions.
- spytask
- CreateTask_spytask
- boot
- CreateTask_my
- sub_fc06c500_my
- sub_fc06c691_my
- sub_fc06ca9a_my
- sub_fc06ca35_my
- sub_fc0f94ae_my
- sub_fc08c4b8_my
- init_required_fw_features
- support_fi2_boot
- sub_fc08c8ee_my
- init_file_modules_task
- kbd_p2_f_my
- sub_fc07eeac_my
- kbd_p1_f_cont_my
- sub_fc08c6e8_my
- task_TricInitTask_my
1
2 #include "lolevel.h"
3 #include "platform.h"
4 #include "core.h"
5 #include "dryos31.h"
6 #include "cache.h"
7
8 #define offsetof(TYPE, MEMBER) ((int) &((TYPE *)0)->MEMBER)
9
10 const char * const new_sa = &_end;
11
12
13 extern volatile int jogdial_stopped;
14 void JogDial_task_my(void);
15
16 extern void task_CaptSeq();
17 extern void task_InitFileModules();
18 extern void task_MovieRecord();
19 extern void task_ExpDrv();
20
21
22
23
24
25 void spytask(long ua, long ub, long uc, long ud, long ue, long uf)
26 {
27 (void)ua; (void)ub; (void)uc; (void)ud; (void)ue; (void)uf;
28 core_spytask();
29 }
30
31
32
33
34 void CreateTask_spytask()
35 {
36 _CreateTask("SpyTask", 0x19, 0x2000, spytask, 0);
37 }
38
39
40
41
42
43
44
45
46
47
48
49
50
51 void __attribute__((naked,noinline)) boot() {
52 asm volatile (
53 " movw r0, #0x4000\n"
54 " movt r0, #0\n"
55 " mov sp, r0\n"
56 " bl sub_fc02007e\n"
57 " ldr r2, =0xc0242010\n"
58 " ldr r1, [r2]\n"
59 " orr r1, r1, #1\n"
60 " str r1, [r2]\n"
61 " ldr r0, =0xfceb1938\n"
62 " ldr r1, =0x010e1000\n"
63 " ldr r3, =0x01107d60\n"
64 "loc_fc02002a:\n"
65 " cmp r1, r3\n"
66 " itt lo\n"
67 " ldrlo r2, [r0], #4\n"
68 " strlo r2, [r1], #4\n"
69 " blo loc_fc02002a\n"
70 " ldr r0, =0x010e1000\n"
71 " ldr r1, =0x00026d60\n"
72 " bl sub_fc1267ca\n"
73 " ldr r0, =0xfced8698\n"
74 " ldr r1, =0xbfe10800\n"
75 " ldr r3, =0xbfe1741d\n"
76 "loc_fc020046:\n"
77 " cmp r1, r3\n"
78 " itt lo\n"
79 " ldrlo r2, [r0], #4\n"
80 " strlo r2, [r1], #4\n"
81 " blo loc_fc020046\n"
82
83
84
85 "adr r0, patch_CreateTask\n"
86 "ldr r1, =hook_CreateTask\n"
87 "add r2, r0, #8\n"
88 "task_hook_loop:\n"
89 "ldrh r3, [r0],#2\n"
90 "strh r3, [r1],#2\n"
91 "cmp r0,r2\n"
92 "blo task_hook_loop\n"
93
94 " ldr r0, =0xfce64604\n"
95 " ldr r1, =0x00008000\n"
96 " ldr r3, =0x00055334\n"
97 "loc_fc02005a:\n"
98 " cmp r1, r3\n"
99 " itt lo\n"
100 " ldrlo r2, [r0], #4\n"
101 " strlo r2, [r1], #4\n"
102 " blo loc_fc02005a\n"
103 " ldr r3, =0x00055334\n"
104 " ldr r1, =0x003d6ffc\n"
105 " mov.w r2, #0\n"
106 "loc_fc020070:\n"
107 " cmp r3, r1\n"
108 " it lo\n"
109 " strlo r2, [r3], #4\n"
110 " blo loc_fc020070\n"
111 " b.w sub_fc06c500_my\n"
112
113
114 ".align 2\n"
115 "patch_CreateTask:\n"
116 "ldr.w pc, _createtask_my\n"
117 "_createtask_my:\n"
118 ".long CreateTask_my + 1\n"
119 ".align 1\n"
120
121 );
122 }
123
124
125 void __attribute__((naked,noinline)) CreateTask_my() {
126 asm volatile (
127 " push {r0}\n"
128
129 " ldr r0, =task_CaptSeq\n"
130 " cmp r0, r3\n"
131 " itt eq\n"
132 " ldreq r3, =capt_seq_task\n"
133 " orreq r3, #1\n"
134 " beq exitHook\n"
135
136 " LDR R0, =task_ExpDrv\n"
137 " CMP R0, R3\n"
138 " itt eq\n"
139 " LDREQ R3, =exp_drv_task\n"
140 " orreq r3, #1\n"
141 " BEQ exitHook\n"
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160 " LDR R0, =task_TricInitTask\n"
161 " CMP R0, R3\n"
162 " itt eq\n"
163 " LDREQ R3, =task_TricInitTask_my\n"
164 " orreq r3, #1\n"
165 " BEQ exitHook\n"
166
167 " LDR R0, =0xFC255E7B\n"
168 " CMP R0, R3\n"
169 " itt eq\n"
170 " LDREQ R3, =task_cocoa0\n"
171 " orreq r3, #1\n"
172 " BEQ exitHook\n"
173
174 " LDR R0, =task_MovieRecord\n"
175 " CMP R0, R3\n"
176 " itt eq\n"
177 " LDREQ R3, =movie_record_task\n"
178 " orreq r3, #1\n"
179 " BEQ exitHook\n"
180
181 " ldr r0, =task_InitFileModules\n"
182 " cmp r0, r3\n"
183 " itt eq\n"
184 " ldreq r3, =init_file_modules_task\n"
185 " orreq r3, #1\n"
186 "exitHook:\n"
187
188 " pop {r0}\n"
189
190 " stmdb sp!, {r1, r2, r3, r4, r5, r6, r7, r8, r9, lr}\n"
191 " mov r4, r0\n"
192 " ldr r0, =0x8160\n"
193 " ldr.w pc, =(hook_CreateTask + 8 + 1) \n"
194 ".ltorg\n"
195 );
196 }
197
198 void __attribute__((naked,noinline)) sub_fc06c500_my() {
199 asm volatile (
200 " push {r4, lr}\n"
201 #if defined(CHDK_NOT_IN_CANON_HEAP)
202 "ldr r4, =0x003d6ffc\n"
203 #else
204 "ldr r4, =new_sa\n"
205 "ldr r4, [r4]\n"
206 #endif
207 " sub sp, #0x78\n"
208 " ldr r0, =0x0074e000\n"
209 " ldr r1, =0x000b1fec\n"
210 " subs r0, r0, r4\n"
211 " cmp r0, r1\n"
212 " bhs loc_fc06c512\n"
213 "loc_fc06c510:\n"
214 " b loc_fc06c510\n"
215 "loc_fc06c512:\n"
216 " ldr r1, =0x00008074\n"
217 " mov.w r0, #0x80000\n"
218 " str r0, [r1]\n"
219 " ldr r1, =0x00008078\n"
220 " ldr r0, =0x421bcb00\n"
221 " str r0, [r1]\n"
222 " ldr r1, =0x0000807c\n"
223 " ldr r0, =0x421beb00\n"
224 " str r0, [r1]\n"
225 " movs r1, #0x78\n"
226 " mov r0, sp\n"
227 " blx sub_fc314e60\n"
228 " ldr r0, =0x0068e000\n"
229 " mov.w r1, #0xc0000\n"
230 " stm.w sp, {r0, r1, r4}\n"
231 " ldr r1, =0x00680014\n"
232 " subs r2, r1, r4\n"
233 " strd r2, r1, [sp, #0xc]\n"
234 " str r0, [sp, #0x14]\n"
235 " movs r0, #0x22\n"
236 " str r0, [sp, #0x18]\n"
237 " movs r0, #0xca\n"
238 " str r0, [sp, #0x1c]\n"
239 " movw r0, #0x2b0\n"
240 " str r0, [sp, #0x20]\n"
241 " movs r0, #0xfa\n"
242 " str r0, [sp, #0x24]\n"
243 " movw r0, #0x11a\n"
244 " str r0, [sp, #0x28]\n"
245 " movs r0, #0x85\n"
246 " str r0, [sp, #0x2c]\n"
247 " movs r0, #0x40\n"
248 " str r0, [sp, #0x30]\n"
249 " movs r0, #4\n"
250 " str r0, [sp, #0x34]\n"
251 " movs r0, #0\n"
252 " str r0, [sp, #0x38]\n"
253 " movs r0, #0x10\n"
254 " str r0, [sp, #0x5c]\n"
255 " movs r2, #0\n"
256 " lsls r0, r0, #8\n"
257 " str r0, [sp, #0x60]\n"
258 " ldr r1, =sub_fc06c691_my\n"
259 " asrs r0, r0, #4\n"
260 " str r0, [sp, #0x64]\n"
261 " lsls r0, r0, #5\n"
262 " str r0, [sp, #0x68]\n"
263 " mov r0, sp\n"
264 " blx sub_fc3145c4\n"
265 " add sp, #0x78\n"
266 " pop {r4, pc}\n"
267 " .ltorg\n"
268 );
269 }
270
271 void __attribute__((naked,noinline)) sub_fc06c691_my() {
272 asm volatile (
273 " push {r4, lr}\n"
274 " ldr r4, =0xfc06c738\n"
275 " bl sub_fc06d938\n"
276 " ldr r0, =0x000080ec\n"
277 " ldr r1, [r0]\n"
278 " ldr r0, =0x00008074\n"
279 " ldr r0, [r0]\n"
280 " adds r0, #0x10\n"
281 " cmp r1, r0\n"
282 " bhs loc_fc06c6ac\n"
283 " ldr r0, =0xfc06c748\n"
284 " bl sub_fc06c722\n"
285 "loc_fc06c6ac:\n"
286 " bl sub_fc1268a4\n"
287 " ldr r1, =0xbfe10000\n"
288 " mov.w r2, #0xeeeeeeee\n"
289 " ldr r3, =0xbfe10800\n"
290 "loc_fc06c6b8:\n"
291 " stm r1!, {r2}\n"
292 " cmp r1, r3\n"
293 " blo loc_fc06c6b8\n"
294 " bl sub_fc1268b6\n"
295 " bl sub_fc1eb840\n"
296 " cmp r0, #0\n"
297 " bge loc_fc06c6d0\n"
298 " ldr r0, =0xfc06c768\n"
299 " bl sub_fc06c722\n"
300 "loc_fc06c6d0:\n"
301 " bl sub_fc06cedc\n"
302 " cmp r0, #0\n"
303 " bge loc_fc06c6de\n"
304 " ldr r0, =0xfc06c770\n"
305 " bl sub_fc06c722\n"
306 "loc_fc06c6de:\n"
307 " mov r0, r4\n"
308 " bl sub_fc06cf6a\n"
309 " cmp r0, #0\n"
310 " bge loc_fc06c6ee\n"
311 " ldr r0, =0xfc06c780\n"
312 " bl sub_fc06c722\n"
313 "loc_fc06c6ee:\n"
314 " mov r0, r4\n"
315 " bl sub_fc06c8cc\n"
316 " cmp r0, #0\n"
317 " bge loc_fc06c6fe\n"
318 " ldr r0, =0xfc06c794\n"
319 " bl sub_fc06c722\n"
320 "loc_fc06c6fe:\n"
321 " bl sub_fc06ca10\n"
322 " cmp r0, #0\n"
323 " bge loc_fc06c70c\n"
324 " ldr r0, =0xfc06c7a0\n"
325 " bl sub_fc06c722\n"
326 "loc_fc06c70c:\n"
327 " bl sub_fc1268f8\n"
328 " cmp r0, #0\n"
329 " bge loc_fc06c71a\n"
330 " ldr r0, =0xfc06c7ac\n"
331 " bl sub_fc06c722\n"
332 "loc_fc06c71a:\n"
333 " pop.w {r4, lr}\n"
334 " b.w sub_fc06ca9a_my\n"
335 " .ltorg\n"
336 );
337 }
338
339 void __attribute__((naked,noinline)) sub_fc06ca9a_my() {
340 asm volatile (
341 " push {r3, lr}\n"
342 " bl sub_fc06cba0\n"
343 " bl sub_fc07ea92\n"
344 " bl sub_fc08c9c8\n"
345 " cbnz r0, loc_fc06cab0\n"
346 " bl sub_fc06cb8e\n"
347 "loc_fc06caae:\n"
348 " b loc_fc06caae\n"
349 "loc_fc06cab0:\n"
350 " blx sub_fc31461c\n"
351 " ldr r1, =0x0074e000\n"
352 " movs r0, #0\n"
353 " bl sub_fc38cd54\n"
354 " movs r3, #0\n"
355 " str r3, [sp]\n"
356 " ldr r3, =sub_fc06ca35_my\n"
357 " movs r2, #0\n"
358 " movs r1, #0x19\n"
359 " ldr r0, =0xfc06cad8\n"
360 " blx sub_fc314b58\n"
361 " movs r0, #0\n"
362 " pop {r3, pc}\n"
363 ".ltorg\n"
364 );
365 }
366
367
368 void __attribute__((naked,noinline)) sub_fc06ca35_my() {
369 asm volatile (
370 " push {r4, lr}\n"
371 " bl sub_fc127668\n"
372 " bl sub_fc06cb6c\n"
373 " bl sub_fc06cccc\n"
374 " bl sub_fc0f947c\n"
375
376
377 " bl sub_10e173c\n"
378
379 " bl sub_fc37258e\n"
380 " bl sub_fc0f95d4\n"
381 " bl sub_fc06ce1c\n"
382 " bl sub_fc06cc5c\n"
383 " bl sub_fc0f94ae_my\n"
384 " bl sub_fc1ebff4\n"
385 " bl sub_fc0f95da\n"
386
387 " bl sub_fc08c8ee_my\n"
388 " bl CreateTask_spytask\n"
389 " bl init_required_fw_features\n"
390 " bl sub_fc2a51d2\n"
391 " bl sub_fc0f95f0\n"
392 " bl sub_fc0d1748\n"
393 " bl sub_fc127236\n"
394 " bl sub_fc127816\n"
395 " bl sub_fc1275b6\n"
396 " bl sub_fc1271f2\n"
397 " bl sub_fc06ce20\n"
398 " bl sub_fc363858\n"
399 " bl sub_fc1271c6\n"
400 " bl sut_done \n"
401 " pop.w {r4, lr}\n"
402 " b.w sub_fc12763e\n"
403 ".ltorg\n"
404 );
405 }
406
407 void __attribute__((naked,noinline)) sub_fc0f94ae_my() {
408 asm volatile (
409 " push {r4, lr}\n"
410 " bl sub_fc1fb2d8\n"
411 " movs r1, #4\n"
412 " movs r0, #2\n"
413 " bl sub_fc1fabfc\n"
414 " bl sub_fc1fac5c\n"
415 " bl sub_fc33e422\n"
416 " bl sub_fc1fa1b8\n"
417 " bl sub_fc138d8e\n"
418 " bl sub_fc130b44\n"
419 " bl sub_fc131f6c\n"
420 " bl sub_fc08d11c\n"
421 " bl sub_fc1f3704\n"
422 " bl sub_fc1f2b84\n"
423 " bl sub_fc1fae34\n"
424 " ldr r2, =0x12cea600\n"
425 " ldr r1, =0x7fe8177f\n"
426 " blx sub_fc314624\n"
427 " bl sub_fc1f34a2\n"
428 " bl sub_fc07eac8\n"
429 " bl sub_fc136fe2\n"
430 " bl sub_fc130a14\n"
431 " bl sub_fc07ea92\n"
432 " cbz r0, loc_fc0f9506\n"
433 " bl sub_fc1309bc\n"
434 "loc_fc0f9506:\n"
435 " bl sub_fc08c4b8_my\n"
436 " ldr pc, =0xfc0f950b\n"
437 );
438 }
439
440 void __attribute__((naked,noinline)) sub_fc08c4b8_my() {
441 asm volatile (
442 " push {r4, r5, r6, r7, lr}\n"
443 " ldr r6, =0x000082cc\n"
444 " sub sp, #0x84\n"
445 " ldr r0, [r6]\n"
446 " cmp r0, #1\n"
447 " beq sub_fc08c55e\n"
448 " ldr r0, =0x00056c10\n"
449 " bl sub_fc07eb8c\n"
450 " bl sub_fc07d624\n"
451 " bl sub_fc07ed70\n"
452 "bl support_fi2_boot\n"
453 " ldr pc, =0xfc08c4d3\n"
454 );
455 }
456
457
458
459
460
461
462 void init_required_fw_features(void) {
463 extern int _CreateBinarySemaphore(int, int);
464
465
466 *(int*)0x2E804 = _CreateBinarySemaphore(0, 0);
467
468 *(int*)(0x2E7E0+0xC) = _CreateBinarySemaphore(0, 0);
469 }
470
471 void support_fi2_boot(void) {
472
473 if (*(int*)0x9bbc == 0) *(int*)0x9bbc = 0x8000000;
474 }
475
476
477 void __attribute__((naked,noinline)) sub_fc08c8ee_my() {
478 asm volatile (
479 " push {r3, r4, r5, lr}\n"
480 " bl sub_fc08029c\n"
481 " bl sub_fc07ea10\n"
482 " cbnz r0, loc_fc08c8fe\n"
483 " bl sub_fc080240\n"
484 "loc_fc08c8fe:\n"
485 " ldr r4, =0x000082cc\n"
486 " ldr r0, [r4, #4]\n"
487 " cmp r0, #0\n"
488 " bne loc_fc08c91a\n"
489 " movs r3, #0\n"
490 " str r3, [sp]\n"
491 " ldr r3, =mykbd_task\n"
492 " movs r1, #0x17\n"
493 " ldr r0, =0xfc08cc2c\n"
494 " movw r2, #0x2000\n"
495 " blx sub_fc314cf0\n"
496 " str r0, [r4, #4]\n"
497 "loc_fc08c91a:\n"
498 " pop {r3, r4, r5, pc}\n"
499 ".ltorg\n"
500 );
501 }
502
503 void __attribute__((naked,noinline)) init_file_modules_task() {
504 asm volatile (
505
506 " push {r4, r5, r6, lr}\n"
507 " movs r0, #6\n"
508 " bl sub_fc3630a6\n"
509 " bl sub_fc138bc0\n"
510 " movs r4, r0\n"
511 " movw r5, #0x5006\n"
512 " beq loc_fc0d4a1c\n"
513 " movs r1, #0\n"
514 " mov r0, r5\n"
515 " bl _PostLogicalEventToUI\n"
516 "loc_fc0d4a1c:\n"
517 " bl sub_fc138bea\n"
518 " BL ifm_done\n"
519 " cmp r4, #0\n"
520 " bne loc_fc0d4a30\n"
521 " mov r0, r5\n"
522 " pop.w {r4, r5, r6, lr}\n"
523 " movs r1, #1\n"
524 " b.w _PostLogicalEventToUI\n"
525 "loc_fc0d4a30:\n"
526 " pop {r4, r5, r6, pc}\n"
527 ".ltorg\n"
528 );
529 }
530
531 void __attribute__((naked,noinline)) kbd_p2_f_my() {
532 asm volatile(
533
534 " push.w {r4, r5, r6, r7, r8, lr}\n"
535 " ldr r6, =0x00056c10\n"
536 " sub sp, #0x18\n"
537 " add r7, sp, #8\n"
538 " subs r6, #0xc\n"
539 " b loc_fc08c666\n"
540 "loc_fc08c632:\n"
541 " ldr r1, =0x00056c10\n"
542 " add r3, sp, #8\n"
543 " ldrb.w r0, [sp, #4]\n"
544 " add r2, sp, #0x14\n"
545 " subs r1, #0x18\n"
546 " bl sub_fc07f358\n"
547 " cbnz r0, loc_fc08c64c\n"
548 " ldr r1, [sp, #0x14]\n"
549 " movs r0, #0\n"
550 " bl sub_fc08c596\n"
551 "loc_fc08c64c:\n"
552 " movs r0, #2\n"
553 "loc_fc08c64e:\n"
554 " ldr.w r1, [r7, r0, lsl #2]\n"
555 " cbz r1, loc_fc08c65e\n"
556 " ldr.w r2, [r6, r0, lsl #2]\n"
557 " bics r2, r1\n"
558 " str.w r2, [r6, r0, lsl #2]\n"
559 "loc_fc08c65e:\n"
560 " subs r0, r0, #1\n"
561 " sxtb r0, r0\n"
562 " cmp r0, #0\n"
563 " bge loc_fc08c64e\n"
564 "loc_fc08c666:\n"
565 " ldr r0, =0x00056c10\n"
566 " add r1, sp, #4\n"
567 " subs r0, #0xc\n"
568 " bl sub_fc07f072\n"
569 " cmp r0, #0\n"
570 " bne loc_fc08c632\n"
571 " ldr.w r8, =0x00056c10\n"
572 " movs r4, #0\n"
573 "loc_fc08c67a:\n"
574 " movs r5, #0\n"
575 " ldr.w r0, [r6, r4, lsl #2]\n"
576 " ldr.w r1, [r8, r4, lsl #2]\n"
577 " ands r0, r1\n"
578 " str.w r0, [r6, r4, lsl #2]\n"
579 " b loc_fc08c6d2\n"
580 "loc_fc08c68c:\n"
581 " lsrs r0, r5\n"
582 " lsls r0, r0, #0x1f\n"
583 " beq loc_fc08c6ca\n"
584 " ldr r1, =0x00056c10\n"
585 " add.w r0, r5, r4, lsl #5\n"
586 " add r3, sp, #8\n"
587 " subs r1, #0x18\n"
588 " add r2, sp, #0x14\n"
589 " uxtb r0, r0\n"
590 " bl sub_fc07f358\n"
591 " cbnz r0, loc_fc08c6ae\n"
592 " ldr r1, [sp, #0x14]\n"
593 " movs r0, #1\n"
594 " bl sub_fc08c596\n"
595 "loc_fc08c6ae:\n"
596 " mov r0, r4\n"
597 " b loc_fc08c6c6\n"
598 "loc_fc08c6b2:\n"
599 " ldr.w r1, [r7, r0, lsl #2]\n"
600 " cbz r1, loc_fc08c6c2\n"
601 " ldr.w r2, [r6, r0, lsl #2]\n"
602 " bics r2, r1\n"
603 " str.w r2, [r6, r0, lsl #2]\n"
604 "loc_fc08c6c2:\n"
605 " adds r0, r0, #1\n"
606 " sxtb r0, r0\n"
607 "loc_fc08c6c6:\n"
608 " cmp r0, #3\n"
609 " blt loc_fc08c6b2\n"
610 "loc_fc08c6ca:\n"
611 " ldr.w r0, [r6, r4, lsl #2]\n"
612 " adds r5, r5, #1\n"
613 " uxtb r5, r5\n"
614 "loc_fc08c6d2:\n"
615 " cmp r0, #0\n"
616 " bne loc_fc08c68c\n"
617 " adds r4, r4, #1\n"
618 " sxtb r4, r4\n"
619 " cmp r4, #3\n"
620 " blt loc_fc08c67a\n"
621 " bl sub_fc07eeac_my\n"
622 " add sp, #0x18\n"
623 " pop.w {r4, r5, r6, r7, r8, pc}\n"
624 ".ltorg\n"
625 );
626 }
627
628 void __attribute__((naked,noinline)) sub_fc07eeac_my() {
629 asm volatile(
630 " push {r4, lr}\n"
631 " ldr r4, =0x00009bd0\n"
632 " subs r4, #0x1c\n"
633 " ldr r0, [r4, #0xc]\n"
634 " bl sub_fc0804c0\n"
635 " ldr r0, [r4, #0x10]\n"
636 " bl sub_fc08054a\n"
637 " bl sub_fc17a00c\n"
638 " ldr r0, [r4, #0x14]\n"
639 " bl sub_fc0803f0\n"
640
641
642 " bl handle_jogdial\n"
643 " cmp r0, #0\n"
644 " beq no_scroll\n"
645 " bl sub_fc0c3b3c\n"
646 "no_scroll:\n"
647 " pop {r4, pc}\n"
648 ".ltorg\n"
649 );
650 }
651
652 void __attribute__((naked,noinline)) kbd_p1_f_cont_my() {
653 asm volatile(
654
655 " ldr r3, =0x00056bec\n"
656 " movs r0, #2\n"
657 " mov r5, sp\n"
658 " add.w r6, r3, #0x24\n"
659 "loc_fc08cbbe:\n"
660 " add.w r1, r6, r0, lsl #2\n"
661 " ldr.w r2, [r3, r0, lsl #2]\n"
662 " ldr r7, [r1, #0xc]\n"
663 " ldr r1, [r1, #0x18]\n"
664 " and.w r2, r2, r7\n"
665 " eor.w r2, r2, r1\n"
666 " str.w r2, [r5, r0, lsl #2]\n"
667 " subs r0, r0, #1\n"
668 " bpl loc_fc08cbbe\n"
669 " bl xtra_kbd_cb \n"
670 " mov r3, r0 \n"
671 " ldr r2, =0x00056bec\n"
672 " mov r0, sp\n"
673 " adds r2, #0x18\n"
674 " sub.w r1, r2, #0xc\n"
675 " bl sub_fc08c6e8_my\n"
676 " ldr r0, =0x00056bec\n"
677 " adds r0, #0xc\n"
678 " bl sub_fc07ee60\n"
679 " cmp r0, #1\n"
680 " bne loc_fc08cbf6\n"
681 " movs r4, #1\n"
682 "loc_fc08cbf6:\n"
683 " ldr r2, =0x00056bec\n"
684 " movs r0, #2\n"
685 " adds r2, #0x18\n"
686 " sub.w r3, r2, #0xc\n"
687 "loc_fc08cc00:\n"
688 " ldr.w r1, [r2, r0, lsl #2]\n"
689 " cbz r1, loc_fc08cc1a\n"
690 " ldr.w r4, [r3, r0, lsl #2]\n"
691 " ldr.w r6, [r5, r0, lsl #2]\n"
692 " bics r4, r1\n"
693 " ands r1, r6\n"
694 " orrs r4, r1\n"
695 " str.w r4, [r3, r0, lsl #2]\n"
696 " movs r4, #1\n"
697 "loc_fc08cc1a:\n"
698 " subs r0, r0, #1\n"
699 " bpl loc_fc08cc00\n"
700 " mov r0, r4\n"
701 " pop {r1, r2, r3, r4, r5, r6, r7, pc}\n"
702 ".ltorg\n"
703 );
704 }
705
706 void __attribute__((naked,noinline)) sub_fc08c6e8_my() {
707 asm volatile(
708 " push.w {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, lr}\n"
709 " ldr r4, =0x00056c10\n"
710 " mov r5, r0\n"
711
712 " mov r0, r3 \n"
713 " b sub_fc08c6f4\n"
714 );
715 }
716
717 void __attribute__((naked,noinline)) task_TricInitTask_my() {
718 asm volatile(
719
720
721 " push.w {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, lr}\n"
722 " movs r0, #8\n"
723 " ldr r1, =0xfc5609ec\n"
724 " bl sub_fc37fab6\n"
725 " ldr.w sl, =0x0002e7d8\n"
726 " movw fp, #0x1000\n"
727 " ldr r4, =0x0002e7d4\n"
728 " movs r2, #0\n"
729 " ldr r1, =0x0703870f\n"
730 " ldr r0, [r4]\n"
731 " blx sub_fc314e48\n"
732 " lsls r0, r0, #0x1f\n"
733 " beq loc_fc5607f6\n"
734 " movs r0, #8\n"
735 " ldr r1, =0xfc560a04\n"
736 " bl sub_fc37fb16\n"
737 " ldr r1, =0x0002e7c0\n"
738 " movs r0, #0\n"
739 " str r0, [r1]\n"
740 " pop.w {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, pc}\n"
741 "loc_fc5607f6:\n"
742 " ldr r4, =0x0002e7d4\n"
743 " add r1, sp, #0xc\n"
744 " ldr r0, [r4]\n"
745 " blx sub_fc314ba8\n"
746 " ldr r1, [sp, #0xc]\n"
747 " ldr r0, [r4]\n"
748 " blx sub_fc314da0\n"
749 " ldr r0, =0x02000003\n"
750 " ldr r7, [sp, #0xc]\n"
751 " tst r7, r0\n"
752 " beq sub_fc5608fa\n"
753 " lsls r0, r7, #0x1f\n"
754 " beq sub_fc56081a\n"
755
756 " ldr r0, =0xd2020074\n"
757 " ldr r0, [r0]\n"
758 " subs r0, #0\n"
759 " beq tric1\n"
760 " ldr r0, [r4]\n"
761 " mov r1, #0x80\n"
762 " bl _SetEventFlag\n"
763 "tric1:\n"
764
765 " bl sub_fc560c9e\n"
766 " b sub_fc560886\n"
767 );
768 }
769