This source file includes following definitions.
- blink
- taskHook
- CreateTask_spytask
- boot
- sub_FF810354_my
- sub_FF811198_my
- sub_FF815EE0_my
- taskcreate_Startup_my
- task_Startup_my
- JogDial_task_my
- init_file_modules_task
- sub_FF8966B4_my
- sub_FF87538C_my
- sub_FF874FB4_my
- sub_FF874CD4_my
1 #include "lolevel.h"
2 #include "platform.h"
3 #include "core.h"
4 #include "dryos31.h"
5
6
7 extern void task_FileWrite();
8
9
10
11 #define LED_PR 0xC0220138
12 void __attribute__((naked,noinline)) blink()
13 {
14 volatile long *p=(void*)LED_PR;
15 int i;
16 int cnt =100;
17 for(;cnt>0;cnt--){
18 p[0]=0x46;
19
20 for(i=0;i<0x200000;i++){
21 asm ("nop\n");
22 asm ("nop\n");
23 }
24 p[0]=0x44;
25 for(i=0;i<0x200000;i++){
26 asm ("nop\n");
27 asm ("nop\n");
28 }
29 }
30 shutdown();
31 }
32
33 #define offsetof(TYPE, MEMBER) ((int) &((TYPE *)0)->MEMBER)
34
35 void JogDial_task_my(void);
36
37 const char * const new_sa = &_end;
38
39 void taskHook(context_t **context) {
40
41 task_t *tcb=(task_t*)((char*)context-offsetof(task_t, context));
42
43 if(!_strcmp(tcb->name, "PhySw")) tcb->entry = (void*)mykbd_task;
44 if(!_strcmp(tcb->name, "CaptSeqTask")) tcb->entry = (void*)capt_seq_task;
45 if(!_strcmp(tcb->name, "InitFileModules")) tcb->entry = (void*)init_file_modules_task;
46 if(!_strcmp(tcb->name, "MovieRecord")) tcb->entry = (void*)movie_record_task;
47 if(!_strcmp(tcb->name, "ExpDrvTask")) tcb->entry = (void*)exp_drv_task;
48 if(!_strcmp(tcb->name, "RotarySw")) tcb->entry = (void*)JogDial_task_my;
49 if(tcb->entry == (void*)task_FileWrite) tcb->entry = (void*)filewritetask;
50
51 }
52
53 void CreateTask_spytask() {
54 _CreateTask("SpyTask", 0x19, 0x2000, core_spytask, 0);
55 };
56
57
58 void __attribute__((naked,noinline)) boot() {
59 asm volatile (
60
61 "LDR R1, =0xC0410000\n"
62 "MOV R0, #0\n"
63 "STR R0, [R1]\n"
64 "MOV R1, #0x78\n"
65 "MCR p15, 0, R1,c1,c0\n"
66 "MOV R1, #0\n"
67 "MCR p15, 0, R1,c7,c10, 4\n"
68 "MCR p15, 0, R1,c7,c5\n"
69 "MCR p15, 0, R1,c7,c6\n"
70 "MOV R0, #0x3D\n"
71 "MCR p15, 0, R0,c6,c0\n"
72 "MOV R0, #0xC000002F\n"
73 "MCR p15, 0, R0,c6,c1\n"
74 "MOV R0, #0x35\n"
75 "MCR p15, 0, R0,c6,c2\n"
76 "MOV R0, #0x40000035\n"
77 "MCR p15, 0, R0,c6,c3\n"
78 "MOV R0, #0x80000017\n"
79 "MCR p15, 0, R0,c6,c4\n"
80 "LDR R0, =0xFF80002D\n"
81 "MCR p15, 0, R0,c6,c5\n"
82 "MOV R0, #0x34\n"
83 "MCR p15, 0, R0,c2,c0\n"
84 "MOV R0, #0x34\n"
85 "MCR p15, 0, R0,c2,c0, 1\n"
86 "MOV R0, #0x34\n"
87 "MCR p15, 0, R0,c3,c0\n"
88 "LDR R0, =0x3333330\n"
89 "MCR p15, 0, R0,c5,c0, 2\n"
90 "LDR R0, =0x3333330\n"
91 "MCR p15, 0, R0,c5,c0, 3\n"
92 "MRC p15, 0, R0,c1,c0\n"
93 "ORR R0, R0, #0x1000\n"
94 "ORR R0, R0, #4\n"
95 "ORR R0, R0, #1\n"
96 "MCR p15, 0, R0,c1,c0\n"
97 "MOV R1, #0x80000006\n"
98 "MCR p15, 0, R1,c9,c1\n"
99 "MOV R1, #6\n"
100 "MCR p15, 0, R1,c9,c1, 1\n"
101 "MRC p15, 0, R1,c1,c0\n"
102 "ORR R1, R1, #0x50000\n"
103 "MCR p15, 0, R1,c1,c0\n"
104 "LDR R2, =0xC0200000\n"
105 "MOV R1, #1\n"
106 "STR R1, [R2,#0x10C]\n"
107 "MOV R1, #0xFF\n"
108 "STR R1, [R2,#0xC]\n"
109 "STR R1, [R2,#0x1C]\n"
110 "STR R1, [R2,#0x2C]\n"
111 "STR R1, [R2,#0x3C]\n"
112 "STR R1, [R2,#0x4C]\n"
113 "STR R1, [R2,#0x5C]\n"
114 "STR R1, [R2,#0x6C]\n"
115 "STR R1, [R2,#0x7C]\n"
116 "STR R1, [R2,#0x8C]\n"
117 "STR R1, [R2,#0x9C]\n"
118 "STR R1, [R2,#0xAC]\n"
119 "STR R1, [R2,#0xBC]\n"
120 "STR R1, [R2,#0xCC]\n"
121 "STR R1, [R2,#0xDC]\n"
122 "STR R1, [R2,#0xEC]\n"
123 "STR R1, [R2,#0xFC]\n"
124 "LDR R1, =0xC0400008\n"
125 "LDR R2, =0x430005\n"
126 "STR R2, [R1]\n"
127 "MOV R1, #1\n"
128 "LDR R2, =0xC0243100\n"
129 "STR R2, [R1]\n"
130 "LDR R2, =0xC0242010\n"
131 "LDR R1, [R2]\n"
132 "ORR R1, R1, #1\n"
133 "STR R1, [R2]\n"
134 "LDR R0, =0xFFC56CD0\n"
135 "LDR R1, =0x1900\n"
136 "LDR R3, =0x10728\n"
137 "loc_FF81013C:\n"
138
139 "CMP R1, R3\n"
140 "LDRCC R2, [R0],#4\n"
141 "STRCC R2, [R1],#4\n"
142 "BCC loc_FF81013C\n"
143 "LDR R1, =0x172BF8\n"
144 "MOV R2, #0\n"
145 "loc_FF810154:\n"
146 "CMP R3, R1\n"
147 "STRCC R2, [R3],#4\n"
148 "BCC loc_FF810154\n"
149 "B sub_FF810354_my\n"
150
151 );
152 }
153
154
155 void __attribute__((naked,noinline)) sub_FF810354_my() {
156
157
158
159 *(int*)0x1938=(int)taskHook;
160 *(int*)0x193C=(int)taskHook;
161
162
163 if ((*(int*) 0xC022010C) & 1)
164 *(int*)(0x254C) = 0x400000;
165 else
166 *(int*)(0x254C) = 0x200000;
167
168 asm volatile (
169 "LDR R0, =0xFF8103CC\n"
170 "MOV R1, #0\n"
171 "LDR R3, =0xFF810404\n"
172 "loc_FF810360:\n"
173 "CMP R0, R3\n"
174 "LDRCC R2, [R0],#4\n"
175 "STRCC R2, [R1],#4\n"
176 "BCC loc_FF810360\n"
177 "LDR R0, =0xFF810404\n"
178 "MOV R1, #0x4B0\n"
179 "LDR R3, =0xFF810618\n"
180 "loc_FF81037C:\n"
181 "CMP R0, R3\n"
182 "LDRCC R2, [R0],#4\n"
183 "STRCC R2, [R1],#4\n"
184 "BCC loc_FF81037C\n"
185 "MOV R0, #0xD2\n"
186 "MSR CPSR_cxsf, R0\n"
187 "MOV SP, #0x1000\n"
188 "MOV R0, #0xD3\n"
189 "MSR CPSR_cxsf, R0\n"
190 "MOV SP, #0x1000\n"
191 "LDR R0, =0x6C4\n"
192 "LDR R2, =0xEEEEEEEE\n"
193 "MOV R3, #0x1000\n"
194 "loc_FF8103B0:\n"
195 "CMP R0, R3\n"
196 "STRCC R2, [R0],#4\n"
197 "BCC loc_FF8103B0\n"
198 "BL sub_FF811198_my\n"
199
200
201
202
203 "loc_FF8103C0:\n"
204 "ANDEQ R0, R0, R4,ASR#13\n"
205 "loc_FF8103C4:\n"
206 "ANDEQ R0, R0, R0,ROR R6\n"
207 "loc_FF8103C8:\n"
208 "ANDEQ R0, R0, R4,ROR R6\n"
209 "loc_FF8103CC:\n"
210 "NOP\n"
211 "LDR PC, =0xFF810618\n"
212 );
213 }
214
215 void __attribute__((naked,noinline)) sub_FF811198_my() {
216 asm volatile (
217 "STR LR, [SP,#-4]!\n"
218 "SUB SP, SP, #0x74\n"
219 "MOV R0, SP\n"
220 "MOV R1, #0x74\n"
221 "BL sub_FFB87550\n"
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251 "MOV R0, #0x53000\n"
252 "STR R0, [SP,#4]\n"
253 #if defined(CHDK_NOT_IN_CANON_HEAP)
254 " LDR R0, =0x172BF8 \n"
255 #else
256 " LDR R0, =new_sa\n"
257 " LDR R0, [R0]\n"
258 #endif
259
260 "LDR R1, =0x379C00\n"
261 "STR R0, [SP,#8]\n"
262
263 "RSB R0, R0, #0x1F80\n"
264 "ADD R0, R0, #0x370000\n"
265 "STR R0, [SP,#0x0c]\n"
266 "LDR R0, =0x371F80\n"
267
268 "STR R1, [SP,#0] \n"
269 "STRD R0, [SP,#0x10] \n"
270 "MOV R0, #0x22 \n"
271 "STR R0, [SP,#0x18] \n"
272 "MOV R0, #0x68 \n"
273 "STR R0, [SP,#0x1c] \n"
274 "LDR R0, =0x19B \n"
275
276
277
278
279 "LDR R1, =sub_FF815EE0_my\n"
280
281
282
283
284
285
286
287
288 "STR R0, [SP,#0x20]\n"
289 "MOV R0, #0x96\n"
290 "STR R0, [SP,#0x24]\n"
291
292 "STR R0, [SP,#0x28]\n"
293 "MOV R0, #0x64\n"
294 "STR R0, [SP,#0x2C]\n"
295 "MOV R0, #0\n"
296 "STR R0, [SP,#0x30]\n"
297 "STR R0, [SP,#0x34]\n"
298 "MOV R0, #0x10\n"
299 "STR R0, [SP,#0x5C]\n"
300 "MOV R0, #0x800\n"
301 "STR R0, [SP,#0x60]\n"
302 "MOV R0, #0xA0\n"
303 "STR R0, [SP,#0x64]\n"
304 "MOV R0, #0x280\n"
305 "STR R0, [SP,#0x68]\n"
306 "MOV R0, SP\n"
307 "MOV R2, #0\n"
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331 "BL sub_FF8134B8\n"
332
333 "ADD SP, SP, #0x74\n"
334 "LDR PC, [SP],#4\n"
335 );
336 }
337
338
339
340 void __attribute__((naked,noinline)) sub_FF815EE0_my() {
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411 asm volatile (
412 "STMFD SP!, {R4,LR}\n"
413 "BL sub_FF810B20\n"
414 "BL sub_FF81A33C\n"
415 "CMP R0, #0\n"
416 "LDRLT R0, =0xFF815FF4\n"
417 "BLLT sub_FF815FD4\n"
418 "BL sub_FF815B1C\n"
419 "CMP R0, #0\n"
420 "LDRLT R0, =0xFF815FFC\n"
421 "BLLT sub_FF815FD4\n"
422 "LDR R0, =0xFF81600C\n"
423 "BL sub_FF815C04\n"
424 "CMP R0, #0\n"
425 "LDRLT R0, =0xFF816014\n"
426 "BLLT sub_FF815FD4\n"
427 "LDR R0, =0xFF81600C\n"
428 "BL sub_FF813CA4\n"
429 "CMP R0, #0\n"
430 "LDRLT R0, =0xFF816028\n"
431 "BLLT sub_FF815FD4\n"
432 "BL sub_FF819CC4\n"
433 "CMP R0, #0\n"
434 "LDRLT R0, =0xFF816034\n"
435 "BLLT sub_FF815FD4\n"
436 "BL sub_FF81167C\n"
437 "CMP R0, #0\n"
438 "LDRLT R0, =0xFF816040\n"
439 "BLLT sub_FF815FD4\n"
440 "LDMFD SP!, {R4,LR}\n"
441 "B taskcreate_Startup_my\n"
442
443
444 " MOV R0, #0 \n"
445 " LDMFD SP!, {R3-R5,PC} \n"
446
447 );
448 };
449
450
451
452
453 void __attribute__((naked,noinline)) taskcreate_Startup_my() {
454 asm volatile (
455
456 "STMFD SP!, {R3-R5,LR}\n"
457 "BL sub_FF8348CC\n"
458 "BL sub_FF83D1D4\n"
459 "CMP R0, #0\n"
460
461 "BNE loc_FF81FBFC\n"
462
463
464 "BL sub_FF8370E8\n"
465 "CMP R0, #0\n"
466 "BEQ loc_FF81FBFC\n"
467
468
469 "LDR R4, =0xC0220000\n"
470
471
472
473 "LDR R0, [R4,#0x120]\n"
474 "TST R0, #1\n"
475 "MOVEQ R0, #0x12C\n"
476
477
478
479
480 "BLEQ sub_FF83B574\n"
481
482
483
484 "BL sub_FF8348C8\n"
485 "CMP R0, #0\n"
486 "BNE loc_FF81FBFC\n"
487 "BL sub_FF833F34\n"
488 "MOV R0, #0x44\n"
489 "STR R0, [R4,#0x1C]\n"
490 "BL sub_FF834120\n"
491 "loc_FF81FBF8:\n"
492 "B loc_FF81FBF8\n"
493
494
495 "loc_FF81FBFC:\n"
496
497
498 "BL sub_FF8348D0\n"
499 "BL sub_FF83B3EC\n"
500
501 "LDR R1, =0x3CE000\n"
502 "MOV R0, #0\n"
503
504 "BL sub_FF83B834\n"
505 "BL sub_FF83B5E0\n"
506 "MOV R3, #0\n"
507
508 "STR R3, [SP]\n"
509
510 "LDR R3, =task_Startup_my\n"
511
512
513 "MOV R2, #0\n"
514 "MOV R1, #0x19\n"
515 "LDR R0, =0xFF81FC60\n"
516
517
518 "BL sub_FF81E8A0\n"
519 "MOV R0, #0\n"
520 "LDMFD SP!, {R3-R5,PC}\n"
521
522
523
524
525 );
526 }
527
528
529
530
531 void __attribute__((naked,noinline)) task_Startup_my() {
532 asm volatile (
533
534 "STMFD SP!, {R4,LR}\n"
535
536 "BL sub_FF816594\n"
537 "BL sub_FF835A30\n"
538 "BL sub_FF833B3C\n"
539 "BL sub_FF83D218\n"
540 "BL sub_FF83D404\n"
541
542 "BL sub_FF83D5AC\n"
543 "BL sub_FF81648C\n"
544 "BL sub_FF836754\n"
545 "LDR R1, =0x7C007C00\n"
546 "LDR R0, =0xC0F1800C\n"
547 "BL sub_FF835A3C\n"
548 "LDR R0, =0xC0F18010\n"
549 "MOV R1, #0\n"
550
551 "BL sub_FF835A3C\n"
552 "LDR R0, =0xC0F18018\n"
553 "MOV R1, #0\n"
554 "BL sub_FF835A3C\n"
555 "LDR R0, =0xC0F1801C\n"
556 "MOV R1, #0x1000\n"
557 "BL sub_FF835A3C\n"
558 "LDR R0, =0xC0F18020\n"
559 "MOV R1, #8\n"
560 "BL sub_FF835A3C\n"
561
562
563
564 "LDR R0, =0xC022D06C\n"
565 "MOV R1, #0xE000000\n"
566 "BL sub_FF835A3C\n"
567 "BL sub_FF8164CC\n"
568
569
570 "BL sub_FF8324F4\n"
571
572
573
574
575 "BL sub_FF83D434\n"
576
577
578
579
580
581 "BL sub_FF83AB90\n"
582 "BL sub_FF83D5B0\n"
583
584 "BL CreateTask_spytask\n"
585
586 "BL sub_FF834788\n"
587 );
588
589
590
591
592
593
594
595
596
597
598 asm volatile (
599
600
601 "BL sub_FF838CF0\n"
602 "BL sub_FF83D5C8\n"
603 "BL sub_FF8318F8\n"
604 "BL sub_FF8334A0\n"
605 "BL sub_FF83CF9C\n"
606 "BL sub_FF833AF0\n"
607 "BL sub_FF83343C\n"
608 "BL sub_FF832528\n"
609 "BL sub_FF83E1D0\n"
610 "BL sub_FF8333F8\n"
611 "LDMFD SP!, {R4,LR}\n"
612 "B sub_FF8166B4\n"
613 );
614 }
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660 void __attribute__((naked,noinline)) JogDial_task_my() {
661 asm volatile (
662 " STMFD SP!, {R4-R11,LR} \n"
663 " SUB SP, SP, #0x1C \n"
664 " BL sub_FF863A68 \n"
665 " LDR R1, =0x2560 \n"
666 " LDR R6, =0xFFB8D5F4 \n"
667 " MOV R0, #0 \n"
668 " ADD R3, SP, #0x10 \n"
669 " ADD R12, SP, #0x14 \n"
670 " ADD R10, SP, #0x08 \n"
671 " MOV R2, #0 \n"
672 " ADD R9, SP, #0xC \n"
673
674 "loc_FF863668: \n"
675 " ADD R12, SP, #0x14 \n"
676 " ADD LR, R12, R0,LSL#1 \n"
677 " MOV R2, #0 \n"
678 " ADD R3, SP, #0x10 \n"
679 " STRH R2, [LR] \n"
680 " ADD LR, R3, R0,LSL#1 \n"
681 " STRH R2, [LR] \n"
682 " STR R2, [R9,R0,LSL#2] \n"
683 " STR R2, [R10,R0,LSL#2] \n"
684 " ADD R0, R0, #1 \n"
685 " CMP R0, #2 \n"
686 " BLT loc_FF863668 \n"
687
688 "loc_FF863698: \n"
689 " LDR R0, =0x2560 \n"
690 " MOV R2, #0 \n"
691 " LDR R0, [R0,#0xC] \n"
692 " MOV R1, SP \n"
693 " BL sub_FF83AE20 \n"
694 " CMP R0, #0 \n"
695 " LDRNE R1, =0x262 \n"
696
697
698 " LDRNE R0, =0xFF8638F8 \n"
699
700 " BLNE sub_FF81EB78 \n"
701
702
703 "labelA:\n"
704 "LDR R0, =jogdial_stopped\n"
705 "LDR R0, [R0]\n"
706 "CMP R0, #1\n"
707 "BNE labelB\n"
708 "MOV R0, #40\n"
709 "BL _SleepTask\n"
710 "B labelA\n"
711 "labelB:\n"
712
713
714 " LDR R0, [SP] \n"
715 " AND R4, R0, #0xFF \n"
716 " AND R0, R0, #0xFF00 \n"
717 " CMP R0, #0x100 \n"
718 " BEQ loc_FF863708 \n"
719 " CMP R0, #0x200 \n"
720 " BEQ loc_FF863740 \n"
721 " CMP R0, #0x300 \n"
722 " BEQ loc_FF863938 \n"
723 " CMP R0, #0x400 \n"
724 " BNE loc_FF863698 \n"
725 " CMP R4, #0 \n"
726 " LDRNE R1, =0x2ED \n"
727
728
729 " LDRNE R0, =0xFF8638F8 \n"
730
731 " BLNE sub_FF81EB78 \n"
732 " RSB R0, R4, R4,LSL#3 \n"
733 " LDR R0, [R6,R0,LSL#2] \n"
734
735 "loc_FF863700: \n"
736 " BL sub_FF863A40 \n"
737 " B loc_FF863698 \n"
738
739 "loc_FF863708: \n"
740 " LDR R7, =0x2570 \n"
741 " LDR R0, [R7,R4,LSL#2] \n"
742 " BL sub_FF83BDB8 \n"
743
744
745 " LDR R2, =0xFF863588 \n"
746
747 " ADD R1, R2, #0 \n"
748 " ORR R3, R4, #0x200 \n"
749 " MOV R0, #0x28 \n"
750 " BL sub_FF83BCD4 \n"
751 " TST R0, #1 \n"
752 " CMPNE R0, #0x15 \n"
753 " STR R0, [R10,R4,LSL#2] \n"
754 " BEQ loc_FF863698 \n"
755 " MOV R1, #0x274 \n"
756 " B loc_FF8638E4 \n"
757
758 "loc_FF863740: \n"
759 " RSB R5, R4, R4,LSL#3 \n"
760 " LDR R0, [R6,R5,LSL#2] \n"
761 " LDR R1, =0xC0240104 \n"
762 " LDR R0, [R1,R0,LSL#8] \n"
763 " MOV R2, R0,ASR#16 \n"
764 " ADD R0, SP, #0x14 \n"
765 " ADD R0, R0, R4,LSL#1 \n"
766 " STR R0, [SP,#0x18] \n"
767 " STRH R2, [R0] \n"
768 " ADD R0, SP, #0x10 \n"
769 " ADD R11, R0, R4,LSL#1 \n"
770 " LDRSH R3, [R11] \n"
771 " SUB R0, R2, R3 \n"
772 " CMP R0, #0 \n"
773 " BNE loc_FF8637C0 \n"
774 " LDR R0, [R9,R4,LSL#2] \n"
775 " CMP R0, #0 \n"
776 " BEQ loc_FF8638A0 \n"
777 " LDR R7, =0x2570 \n"
778 " LDR R0, [R7,R4,LSL#2] \n"
779 " BL sub_FF83BDB8 \n"
780
781
782 " LDR R2, =0xFF863594 \n"
783
784 " ADD R1, R2, #0 \n"
785 " ORR R3, R4, #0x300 \n"
786 " MOV R0, #0x1F4 \n"
787 " BL sub_FF83BCD4 \n"
788 " TST R0, #1 \n"
789 " CMPNE R0, #0x15 \n"
790 " STR R0, [R7,R4,LSL#2] \n"
791 " BEQ loc_FF8638A0 \n"
792 " LDR R1, =0x28D \n"
793 " B loc_FF863898 \n"
794
795 "loc_FF8637C0: \n"
796 " MOV R1, R0 \n"
797 " RSBLT R0, R0, #0 \n"
798 " MOVLE R7, #0 \n"
799 " MOVGT R7, #1 \n"
800 " CMP R0, #0xFF \n"
801 " BLS loc_FF863800 \n"
802 " CMP R1, #0 \n"
803 " RSBLE R0, R3, #0xFF \n"
804 " ADDLE R0, R0, #0x7F00 \n"
805 " ADDLE R0, R0, R2 \n"
806 " RSBGT R0, R2, #0xFF \n"
807 " ADDGT R0, R0, #0x7F00 \n"
808 " ADDGT R0, R0, R3 \n"
809 " ADD R0, R0, #0x8000 \n"
810 " ADD R0, R0, #1 \n"
811 " EOR R7, R7, #1 \n"
812
813 "loc_FF863800: \n"
814 " STR R0, [SP,#0x04] \n"
815 " LDR R0, [R9,R4,LSL#2] \n"
816 " CMP R0, #0 \n"
817 " ADDEQ R0, R6, R5,LSL#2 \n"
818 " LDREQ R0, [R0,#8] \n"
819 " BEQ loc_FF863838 \n"
820 " ADD R8, R6, R5,LSL#2 \n"
821 " ADD R1, R8, R7,LSL#2 \n"
822 " LDR R1, [R1,#0x10] \n"
823 " CMP R1, R0 \n"
824 " BEQ loc_FF86383C \n"
825 " LDR R0, [R8,#0xC] \n"
826 " BL sub_FF89C2E4 \n"
827 " LDR R0, [R8,#8] \n"
828
829 "loc_FF863838: \n"
830 " BL sub_FF89C2E4 \n"
831
832 "loc_FF86383C: \n"
833 " ADD R0, R6, R5,LSL#2 \n"
834 " ADD R7, R0, R7,LSL#2 \n"
835 " LDR R0, [R7,#0x10] \n"
836 " LDR R1, [SP,#0x04] \n"
837 " BL sub_FF89C20C \n"
838 " LDR R0, [R7,#0x10] \n"
839 " LDR R7, =0x2570 \n"
840 " STR R0, [R9,R4,LSL#2] \n"
841 " LDR R0, [SP,#0x18] \n"
842 " LDRH R0, [R0] \n"
843 " STRH R0, [R11] \n"
844 " LDR R0, [R7,R4,LSL#2] \n"
845 " BL sub_FF83BDB8 \n"
846
847
848 " LDR R2, =0xFF863594 \n"
849
850 " ADD R1, R2, #0 \n"
851 " ORR R3, R4, #0x300 \n"
852 " MOV R0, #0x1F4 \n"
853 " BL sub_FF83BCD4 \n"
854 " TST R0, #1 \n"
855 " CMPNE R0, #0x15 \n"
856 " STR R0, [R7,R4,LSL#2] \n"
857 " BEQ loc_FF8638A0 \n"
858 " LDR R1, =0x2CF \n"
859
860 "loc_FF863898: \n"
861
862 " LDR R0, =0xFF8638F8 \n"
863
864 " BL sub_FF81EB78 \n"
865
866 "loc_FF8638A0: \n"
867 " ADD R0, R6, R5,LSL#2 \n"
868 " LDR R0, [R0,#0x18] \n"
869 " CMP R0, #1 \n"
870 " BNE loc_FF863930 \n"
871 " LDR R0, =0x2560 \n"
872 " LDR R0, [R0,#0x14] \n"
873 " CMP R0, #0 \n"
874 " BEQ loc_FF863930 \n"
875
876
877 " LDR R2, =0xFF863588 \n"
878
879 " ADD R1, R2, #0 \n"
880 " ORR R3, R4, #0x400 \n"
881 " BL sub_FF83BCD4 \n"
882 " TST R0, #1 \n"
883 " CMPNE R0, #0x15 \n"
884 " STR R0, [R10,R4,LSL#2] \n"
885 " BEQ loc_FF863698 \n"
886 " LDR R1, =0x2D6 \n"
887
888 "loc_FF8638E4: \n"
889
890 " LDR R0, =0xFF8638F8 \n"
891
892 " BL sub_FF81EB78 \n"
893 " B loc_FF863698 \n"
894
895 "NOP \n"
896
897
898 "loc_FF863930: \n"
899 " LDR R0, [R6,R5,LSL#2] \n"
900 " B loc_FF863700 \n"
901
902 "loc_FF863938: \n"
903 " LDR R0, [R9,R4,LSL#2] \n"
904 " CMP R0, #0 \n"
905 " MOVEQ R1, #0x2E0 \n"
906
907
908 " LDREQ R0, =0xFF8638F8 \n"
909
910 " BLEQ sub_FF81EB78 \n"
911 " RSB R0, R4, R4,LSL#3 \n"
912 " ADD R0, R6, R0,LSL#2 \n"
913 " LDR R0, [R0,#0xC] \n"
914 " BL sub_FF89C2E4 \n"
915 " MOV R2, #0 \n"
916 " STR R2, [R9,R4,LSL#2] \n"
917 " B loc_FF863698 \n"
918 );
919 };
920
921
922
923 void __attribute__((naked,noinline)) init_file_modules_task() {
924 asm volatile(
925 "STMFD SP!, {R4-R6,LR}\n"
926 "BL sub_FF896688\n"
927 "LDR R5, =0x5006\n"
928 "MOVS R4, R0\n"
929 "MOVNE R1, #0\n"
930 "MOVNE R0, R5\n"
931 "BLNE sub_FF89A464\n"
932
933 "BL sub_FF8966B4_my\n"
934
935 "BL core_spytask_can_start\n"
936
937 "CMP R4, #0\n"
938 "MOVEQ R0, R5\n"
939 "LDMEQFD SP!, {R4-R6,LR}\n"
940 "MOVEQ R1, #0\n"
941 "BEQ sub_FF89A464\n"
942 "LDMFD SP!, {R4-R6,PC}\n"
943 );
944 };
945
946 void __attribute__((naked,noinline)) sub_FF8966B4_my() {
947 asm volatile(
948 "STMFD SP!, {R4,LR}\n"
949 "MOV R0, #3\n"
950
951 "BL sub_FF87538C_my\n"
952
953 "B sub_FF8966C0\n"
954 );
955 };
956
957 void __attribute__((naked,noinline)) sub_FF87538C_my() {
958 asm volatile(
959 "STMFD SP!, {R4-R8,LR}\n"
960 "MOV R8, R0\n"
961 "BL sub_FF87530C\n"
962 "LDR R1, =0x3A068\n"
963 "MOV R6, R0\n"
964 "ADD R4, R1, R0,LSL#7\n"
965 "LDR R0, [R4,#0x6C]\n"
966 "CMP R0, #4\n"
967 "LDREQ R1, =0x83F\n"
968 "LDREQ R0, =0xFF874E4C\n"
969 "BLEQ sub_FF81EB78\n"
970 "MOV R1, R8\n"
971 "MOV R0, R6\n"
972 "BL sub_FF874BC0\n"
973 "LDR R0, [R4,#0x38]\n"
974 "BL sub_FF875A30\n"
975 "CMP R0, #0\n"
976 "STREQ R0, [R4,#0x6C]\n"
977 "MOV R0, R6\n"
978 "BL sub_FF874C50\n"
979 "MOV R0, R6\n"
980
981 "BL sub_FF874FB4_my\n"
982
983 "B sub_FF8753E4 \n"
984 );
985
986 };
987 void __attribute__((naked,noinline)) sub_FF874FB4_my() {
988 asm volatile(
989 "STMFD SP!, {R4-R6,LR}\n"
990 "MOV R5, R0\n"
991 "LDR R0, =0x3A068\n"
992 "ADD R4, R0, R5,LSL#7\n"
993 "LDR R0, [R4,#0x6C]\n"
994 "TST R0, #2\n"
995 "MOVNE R0, #1\n"
996 "LDMNEFD SP!, {R4-R6,PC}\n"
997 "LDR R0, [R4,#0x38]\n"
998 "MOV R1, R5\n"
999
1000 "BL sub_FF874CD4_my\n"
1001
1002
1003 "B sub_FF874FE0\n"
1004
1005 );
1006
1007 };
1008
1009 void __attribute__((naked,noinline)) sub_FF874CD4_my() {
1010 asm volatile(
1011 " STMFD SP!, {R4-R10,LR}\n"
1012 " MOV R9, R0\n"
1013 " LDR R0, =0x3A068\n"
1014 " MOV R8, #0\n"
1015 " ADD R5, R0, R1,LSL#7\n"
1016 " LDR R0, [R5,#0x3C]\n"
1017 " MOV R7, #0\n"
1018 " CMP R0, #7\n"
1019 " MOV R6, #0\n"
1020 " ADDLS PC, PC, R0,LSL#2\n"
1021 " B loc_FF874E2C\n"
1022 "loc_FF874D00:\n"
1023 " B loc_FF874D38\n"
1024 "loc_FF874D04:\n"
1025 " B loc_FF874D20\n"
1026 "loc_FF874D08:\n"
1027 " B loc_FF874D20\n"
1028 "loc_FF874D0C:\n"
1029 " B loc_FF874D20\n"
1030 "loc_FF874D10:\n"
1031 " B loc_FF874D20\n"
1032 "loc_FF874D14:\n"
1033 " B loc_FF874E24\n"
1034 "loc_FF874D18:\n"
1035 " B loc_FF874D20\n"
1036 "loc_FF874D1C:\n"
1037 " B loc_FF874D20\n"
1038 "loc_FF874D20:\n"
1039 " MOV R2, #0\n"
1040 " MOV R1, #0x200\n"
1041 " MOV R0, #2\n"
1042 " BL sub_FF890738\n"
1043 " MOVS R4, R0\n"
1044 " BNE loc_FF874D40\n"
1045 "loc_FF874D38:\n"
1046 " MOV R0, #0\n"
1047 " LDMFD SP!, {R4-R10,PC}\n"
1048 "loc_FF874D40:\n"
1049 " LDR R12, [R5,#0x50]\n"
1050 " MOV R3, R4\n"
1051 " MOV R2, #1\n"
1052 " MOV R1, #0\n"
1053 " MOV R0, R9\n"
1054 " BLX R12\n"
1055 " CMP R0, #1\n"
1056 " BNE loc_FF874D6C\n"
1057 " MOV R0, #2\n"
1058 " BL sub_FF890888\n"
1059 " B loc_FF874D38\n"
1060 "loc_FF874D6C:\n"
1061 " LDR R1, [R5,#0x64]\n"
1062 " MOV R0, R9\n"
1063 " BLX R1\n"
1064
1065
1066 "MOV R1, R4\n"
1067 "BL mbr_read_dryos\n"
1068
1069
1070
1071
1072
1073
1074 "MOV R12, R4\n"
1075 "MOV LR, R4\n"
1076 "MOV R1, #1\n"
1077 "B dg_sd_fat32_enter\n"
1078 "dg_sd_fat32:\n"
1079 "CMP R1, #4\n"
1080 "BEQ dg_sd_fat32_end\n"
1081 "ADD R12, R12, #0x10\n"
1082 "ADD R1, R1, #1\n"
1083 "dg_sd_fat32_enter:\n"
1084 "LDRB R2, [R12, #0x1BE]\n"
1085 "LDRB R3, [R12, #0x1C2]\n"
1086 "CMP R3, #0xB\n"
1087 "CMPNE R3, #0xC\n"
1088 "BNE dg_sd_fat32\n"
1089 "CMP R2, #0x00\n"
1090 "CMPNE R2, #0x80\n"
1091 "BNE dg_sd_fat32\n"
1092
1093 "MOV R4, R12\n"
1094
1095 "dg_sd_fat32_end:\n"
1096
1097
1098
1099
1100
1101
1102 " LDRB R1, [R4,#0x1C9]\n"
1103 " LDRB R3, [R4,#0x1C8]\n"
1104 " LDRB R12, [R4,#0x1CC]\n"
1105 " MOV R1, R1,LSL#24\n"
1106 " ORR R1, R1, R3,LSL#16\n"
1107 " LDRB R3, [R4,#0x1C7]\n"
1108 " LDRB R2, [R4,#0x1BE]\n"
1109
1110 " ORR R1, R1, R3,LSL#8\n"
1111 " LDRB R3, [R4,#0x1C6]\n"
1112 " CMP R2, #0\n"
1113 " CMPNE R2, #0x80\n"
1114 " ORR R1, R1, R3\n"
1115 " LDRB R3, [R4,#0x1CD]\n"
1116 " MOV R3, R3,LSL#24\n"
1117 " ORR R3, R3, R12,LSL#16\n"
1118 " LDRB R12, [R4,#0x1CB]\n"
1119 " ORR R3, R3, R12,LSL#8\n"
1120 " LDRB R12, [R4,#0x1CA]\n"
1121 " ORR R3, R3, R12\n"
1122
1123
1124 "LDRB R12, [LR,#0x1FE]\n"
1125 "LDRB LR, [LR,#0x1FF]\n"
1126
1127
1128 " BNE loc_FF874DF8\n"
1129 " CMP R0, R1\n"
1130 " BCC loc_FF874DF8\n"
1131 " ADD R2, R1, R3\n"
1132 " CMP R2, R0\n"
1133 " CMPLS R12, #0x55\n"
1134 " CMPEQ LR, #0xAA\n"
1135 " MOVEQ R7, R1\n"
1136 " MOVEQ R6, R3\n"
1137 " MOVEQ R4, #1\n"
1138 " BEQ loc_FF874DFC\n"
1139 "loc_FF874DF8:\n"
1140 " MOV R4, R8\n"
1141 "loc_FF874DFC:\n"
1142 " MOV R0, #2\n"
1143 " BL sub_FF890888\n"
1144 " CMP R4, #0\n"
1145 " BNE loc_FF874E38\n"
1146 " LDR R1, [R5,#0x64]\n"
1147 " MOV R7, #0\n"
1148 " MOV R0, R9\n"
1149 " BLX R1\n"
1150 " MOV R6, R0\n"
1151 " B loc_FF874E38\n"
1152 "loc_FF874E24:\n"
1153 " MOV R6, #0x40\n"
1154 " B loc_FF874E38\n"
1155 "loc_FF874E2C:\n"
1156 " LDR R1, =0x597\n"
1157 " LDR R0, =0xFF874E4C\n"
1158 " BL sub_FF81EB78\n"
1159
1160 "loc_FF874E38:\n"
1161 " STR R7, [R5,#0x44]!\n"
1162 " STMIB R5, {R6,R8}\n"
1163 " MOV R0, #1\n"
1164 " LDMFD SP!, {R4-R10,PC}\n"
1165
1166 );
1167
1168 };