This source file includes following definitions.
- taskHook
- boot
- sub_FF000364_my
- sub_FF0011BC_my
- sub_FF005F38_my
- taskcreate_Startup_my
- sub_FF00FD84_my
- sub_FF00FDDC_my
- task_Startup_my
- taskcreatePhySw_my
- spytask
- CreateTask_spytask
- init_file_modules_task
- JogDial_task_my
1 #include "lolevel.h"
2 #include "platform.h"
3 #include "core.h"
4 #include "dryos31.h"
5
6 #define offsetof(TYPE, MEMBER) ((int) &((TYPE *)0)->MEMBER)
7
8 const char * const new_sa = &_end;
9
10
11 void CreateTask_PhySw();
12 void CreateTask_spytask();
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_RotaryEncoder();
19 extern void task_MovieRecord();
20 extern void task_ExpDrv();
21
22 void taskHook(context_t **context)
23 {
24 task_t *tcb=(task_t*)((char*)context-offsetof(task_t, context));
25
26
27 if(tcb->entry == (void*)task_CaptSeq) tcb->entry = (void*)capt_seq_task;
28 if(tcb->entry == (void*)task_InitFileModules) tcb->entry = (void*)init_file_modules_task;
29 if(tcb->entry == (void*)task_RotaryEncoder) tcb->entry = (void*)JogDial_task_my;
30 if(tcb->entry == (void*)task_MovieRecord) tcb->entry = (void*)movie_record_task;
31 if(tcb->entry == (void*)task_ExpDrv) tcb->entry = (void*)exp_drv_task;
32 }
33
34
35
36
37
38
39
40
41 void __attribute__((naked,noinline)) boot( ) {
42 asm volatile (
43 " LDR R1, =0xC0410000\n"
44 " MOV R0, #0\n"
45 " STR R0, [R1]\n"
46 " MOV R1, #0x78\n"
47 " MCR p15, 0, R1, c1, c0\n"
48 " MOV R1, #0\n"
49 " MCR p15, 0, R1, c7, c10, 4\n"
50 " MCR p15, 0, R1, c7, c5\n"
51 " MCR p15, 0, R1, c7, c6\n"
52 " MOV R0, #0x3D\n"
53 " MCR p15, 0, R0, c6, c0\n"
54 " MOV R0, #0xC000002F\n"
55 " MCR p15, 0, R0, c6, c1\n"
56 " MOV R0, #0x37\n"
57 " MCR p15, 0, R0, c6, c2\n"
58 " MOV R0, #0x40000037\n"
59 " MCR p15, 0, R0, c6, c3\n"
60 " MOV R0, #0x80000017\n"
61 " MCR p15, 0, R0, c6, c4\n"
62 " LDR R0, =0xFF00002F\n"
63 " MCR p15, 0, R0, c6, c5\n"
64 " LDR R0, =0xD000002B\n"
65 " MCR p15, 0, R0, c6, c7\n"
66 " MOV R0, #0x34\n"
67 " MCR p15, 0, R0, c2, c0\n"
68 " MOV R0, #0x34\n"
69 " MCR p15, 0, R0, c2, c0, 1\n"
70 " MOV R0, #0x34\n"
71 " MCR p15, 0, R0, c3, c0\n"
72 " LDR R0, =0x33333330\n"
73 " MCR p15, 0, R0, c5, c0, 2\n"
74 " LDR R0, =0x33333330\n"
75 " MCR p15, 0, R0, c5, c0, 3\n"
76 " MRC p15, 0, R0, c1, c0\n"
77 " ORR R0, R0, #0x1000\n"
78 " ORR R0, R0, #4\n"
79 " ORR R0, R0, #1\n"
80 " MCR p15, 0, R0, c1, c0\n"
81 " MOV R1, #0x80000006\n"
82 " MCR p15, 0, R1, c9, c1\n"
83 " MOV R1, #6\n"
84 " MCR p15, 0, R1, c9, c1, 1\n"
85 " MRC p15, 0, R1, c1, c0\n"
86 " ORR R1, R1, #0x50000\n"
87 " MCR p15, 0, R1, c1, c0\n"
88 " LDR R2, =0xC0200000\n"
89 " MOV R1, #1\n"
90 " STR R1, [R2, #0x10C]\n"
91 " MOV R1, #0xFF\n"
92 " STR R1, [R2, #0xC]\n"
93 " STR R1, [R2, #0x1C]\n"
94 " STR R1, [R2, #0x2C]\n"
95 " STR R1, [R2, #0x3C]\n"
96 " STR R1, [R2, #0x4C]\n"
97 " STR R1, [R2, #0x5C]\n"
98 " STR R1, [R2, #0x6C]\n"
99 " STR R1, [R2, #0x7C]\n"
100 " STR R1, [R2, #0x8C]\n"
101 " STR R1, [R2, #0x9C]\n"
102 " STR R1, [R2, #0xAC]\n"
103 " STR R1, [R2, #0xBC]\n"
104 " STR R1, [R2, #0xCC]\n"
105 " STR R1, [R2, #0xDC]\n"
106 " STR R1, [R2, #0xEC]\n"
107 " STR R1, [R2, #0xFC]\n"
108 " LDR R1, =0xC0400008\n"
109 " LDR R2, =0x430005\n"
110 " STR R2, [R1]\n"
111 " MOV R1, #1\n"
112 " LDR R2, =0xC0243100\n"
113 " STR R2, [R1]\n"
114 " LDR R2, =0xC0242010\n"
115 " LDR R1, [R2]\n"
116 " ORR R1, R1, #1\n"
117 " STR R1, [R2]\n"
118 " LDR R0, =0xFF64BECC\n"
119 " LDR R1, =0x1900\n"
120 " LDR R3, =0x148A8\n"
121 "loc_FF000144:\n"
122 " CMP R1, R3\n"
123 " LDRCC R2, [R0], #4\n"
124 " STRCC R2, [R1], #4\n"
125 " BCC loc_FF000144\n"
126 " LDR R1, =0x195D34\n"
127 " MOV R2, #0\n"
128 "loc_FF00015C:\n"
129 " CMP R3, R1\n"
130 " STRCC R2, [R3], #4\n"
131 " BCC loc_FF00015C\n"
132 " B sub_FF000364_my \n"
133 );
134 }
135
136
137
138
139 void __attribute__((naked,noinline)) sub_FF000364_my() {
140
141
142 *(int*)0x1938=(int)taskHook;
143 *(int*)0x193C=(int)taskHook;
144
145 *(int*)(0x26E0+0x4) = (*(int*)0xC022F48C)&4 ? 0x200000 : 0x100000;
146
147 asm volatile (
148 " LDR R0, =0xFF0003DC\n"
149 " MOV R1, #0\n"
150 " LDR R3, =0xFF000414\n"
151 "loc_FF000370:\n"
152 " CMP R0, R3\n"
153 " LDRCC R2, [R0], #4\n"
154 " STRCC R2, [R1], #4\n"
155 " BCC loc_FF000370\n"
156 " LDR R0, =0xFF000414\n"
157 " MOV R1, #0x4B0\n"
158 " LDR R3, =0xFF000628\n"
159 "loc_FF00038C:\n"
160 " CMP R0, R3\n"
161 " LDRCC R2, [R0], #4\n"
162 " STRCC R2, [R1], #4\n"
163 " BCC loc_FF00038C\n"
164 " MOV R0, #0xD2\n"
165 " MSR CPSR_cxsf, R0\n"
166 " MOV SP, #0x1000\n"
167 " MOV R0, #0xD3\n"
168 " MSR CPSR_cxsf, R0\n"
169 " MOV SP, #0x1000\n"
170 " LDR R0, =0x6C4\n"
171 " LDR R2, =0xEEEEEEEE\n"
172 " MOV R3, #0x1000\n"
173 "loc_FF0003C0:\n"
174 " CMP R0, R3\n"
175 " STRCC R2, [R0], #4\n"
176 " BCC loc_FF0003C0\n"
177 " BL sub_FF0011BC_my \n"
178 );
179 }
180
181
182
183
184 void __attribute__((naked,noinline)) sub_FF0011BC_my( ) {
185 asm volatile (
186 " STR LR, [SP, #-4]!\n"
187 " SUB SP, SP, #0x74\n"
188 " MOV R1, #0x74\n"
189 " MOV R0, SP\n"
190 " BL sub_FF44E0F0\n"
191 " MOV R0, #0x67000\n"
192 " STR R0, [SP, #4]\n"
193 #if defined(CHDK_NOT_IN_CANON_HEAP)
194 " LDR R0, =0x195D34 \n"
195 #else
196 " LDR R0, =new_sa\n"
197 " LDR R0, [R0]\n"
198 #endif
199 " LDR R2, =0x55D788\n"
200 " STR R0, [SP, #8]\n"
201 " SUB R0, R2, R0\n"
202 " STR R0, [SP, #0xC]\n"
203 " MOV R0, #0x22\n"
204 " STR R0, [SP, #0x18]\n"
205 " MOV R0, #0x72\n"
206 " STR R0, [SP, #0x1C]\n"
207 " LDR R1, =0x565C00\n"
208 " LDR R0, =0x1CD\n"
209 " STR R1, [SP]\n"
210 " STR R0, [SP, #0x20]\n"
211 " MOV R0, #0x96\n"
212 " STR R2, [SP, #0x10]\n"
213 " STR R1, [SP, #0x14]\n"
214 " STR R0, [SP, #0x24]\n"
215 " STR R0, [SP, #0x28]\n"
216 " MOV R0, #0x64\n"
217 " STR R0, [SP, #0x2C]\n"
218 " MOV R0, #0\n"
219 " STR R0, [SP, #0x30]\n"
220 " STR R0, [SP, #0x34]\n"
221 " MOV R0, #0x10\n"
222 " STR R0, [SP, #0x5C]\n"
223 " MOV R0, #0x800\n"
224 " STR R0, [SP, #0x60]\n"
225 " MOV R0, #0xA0\n"
226 " STR R0, [SP, #0x64]\n"
227 " MOV R0, #0x280\n"
228 " STR R0, [SP, #0x68]\n"
229 " LDR R1, =sub_FF005F38_my \n"
230 " MOV R2, #0\n"
231 " MOV R0, SP\n"
232 " BL sub_FF0034D0\n"
233 " ADD SP, SP, #0x74\n"
234 " LDR PC, [SP], #4\n"
235 );
236 }
237
238
239
240
241 void __attribute__((naked,noinline)) sub_FF005F38_my( ) {
242 asm volatile (
243 " STMFD SP!, {R4,LR}\n"
244 " BL sub_FF000B34\n"
245 " BL sub_FF00A390\n"
246 " CMP R0, #0\n"
247 " LDRLT R0, =0xFF00604C\n"
248 " BLLT sub_FF00602C\n"
249 " BL sub_FF005B70\n"
250 " CMP R0, #0\n"
251 " LDRLT R0, =0xFF006054\n"
252 " BLLT sub_FF00602C\n"
253 " LDR R0, =0xFF006064\n"
254 " BL sub_FF005C58\n"
255 " CMP R0, #0\n"
256 " LDRLT R0, =0xFF00606C\n"
257 " BLLT sub_FF00602C\n"
258 " LDR R0, =0xFF006064\n"
259 " BL sub_FF003CB4\n"
260 " CMP R0, #0\n"
261 " LDRLT R0, =0xFF006080\n"
262 " BLLT sub_FF00602C\n"
263 " BL sub_FF009CF8\n"
264 " CMP R0, #0\n"
265 " LDRLT R0, =0xFF00608C\n"
266 " BLLT sub_FF00602C\n"
267 " BL sub_FF00169C\n"
268 " CMP R0, #0\n"
269 " LDRLT R0, =0xFF006098\n"
270 " BLLT sub_FF00602C\n"
271 " LDMFD SP!, {R4,LR}\n"
272
273 " B taskcreate_Startup_my \n"
274 );
275 }
276
277
278
279
280 void __attribute__((naked,noinline)) taskcreate_Startup_my( ) {
281 asm volatile (
282 " STMFD SP!, {R3,LR}\n"
283 " BL sub_FF02B598\n"
284 " BL sub_FF02B7B0\n"
285 " MOV R3, #0\n"
286 " STR R3, [SP]\n"
287 " LDR R3, =sub_FF00FD84_my \n"
288 " MOV R2, #0x200\n"
289 " MOV R1, #0x19\n"
290 " LDR R0, =0xFF00FEBC\n"
291 " BL sub_FF00EAF0\n"
292 " MOV R0, #0\n"
293 " LDMFD SP!, {R3,PC}\n"
294 );
295 }
296
297
298
299
300 void __attribute__((naked,noinline)) sub_FF00FD84_my( ) {
301 asm volatile (
302 " STMFD SP!, {R4,LR}\n"
303 " BL sub_FF024AEC\n"
304 " BL sub_FF025C00\n"
305 " BL sub_FF023768\n"
306 " BL sub_FF02D9CC\n"
307 " BL sub_FF023EDC\n"
308 " BL sub_FF022C24\n"
309 " BL sub_FF022BB0\n"
310 " LDMFD SP!, {R4,LR}\n"
311 " B sub_FF00FDDC_my \n"
312 );
313 }
314
315
316
317
318 void __attribute__((naked,noinline)) sub_FF00FDDC_my( ) {
319 asm volatile (
320 " STMFD SP!, {R3-R7,LR}\n"
321 " MOV R6, #0\n"
322 " BL sub_FF02D73C\n"
323 " MOVS R7, R0\n"
324 " BNE loc_FF00FE48\n"
325 " BL sub_FF0264BC\n"
326 " CMP R0, #0\n"
327 " BEQ loc_FF00FE48\n"
328 " MOV R0, #0x37\n"
329 " BL sub_FF02BC18\n"
330 " RSBS R5, R0, #1\n"
331 " MOVCC R5, #0\n"
332 " MOV R0, #0x36\n"
333 " BL sub_FF02BC18\n"
334 " RSBS R4, R0, #1\n"
335 " MOVCC R4, #0\n"
336 " BL sub_FF022BD8\n"
337 " CMP R0, #1\n"
338 " MOVEQ R6, #1\n"
339 " ORR R0, R4, R5\n"
340 " ORRS R0, R0, R6\n"
341 " BNE loc_FF00FE68\n"
342 " BL sub_FF0238F0\n"
343 " LDR R1, =0x83DC00\n"
344 " MOV R0, #0x54\n"
345 " BL sub_FF02BC08\n"
346 "loc_FF00FE44:\n"
347 " B loc_FF00FE44\n"
348 "loc_FF00FE48:\n"
349 " MOV R0, #0x36\n"
350 " BL sub_FF02BC18\n"
351 " RSBS R4, R0, #1\n"
352 " MOVCC R4, #0\n"
353 " MOV R0, #0x37\n"
354 " BL sub_FF02BC18\n"
355 " RSBS R5, R0, #1\n"
356 " MOVCC R5, #0\n"
357 "loc_FF00FE68:\n"
358 " MOV R3, R6\n"
359 " MOV R2, R7\n"
360 " MOV R1, R5\n"
361 " MOV R0, R4\n"
362
363 " BL sub_FF024AF0\n"
364 " BL sub_FF02B598\n"
365 " LDR R1, =0x5CE000\n"
366 " MOV R0, #0\n"
367 " BL sub_FF02BA08\n"
368 " BL sub_FF02B7B0\n"
369 " MOV R3, #0\n"
370 " STR R3, [SP]\n"
371
372 " LDR R3, =task_Startup_my \n"
373 " MOV R2, #0\n"
374 " MOV R1, #0x19\n"
375 " LDR R0, =0xFF00FED0\n"
376 " BL sub_FF00EAF0\n"
377 " MOV R0, #0\n"
378 " LDMFD SP!, {R3-R7,PC}\n"
379 );
380 }
381
382
383
384
385 void __attribute__((naked,noinline)) task_Startup_my( ) {
386 asm volatile (
387 " STMFD SP!, {R4,LR}\n"
388 " BL sub_FF0065E8\n"
389
390
391 " BL sub_FF02DB88\n"
392 " BL sub_FF02D9FC\n"
393 " BL sub_FF02AD3C\n"
394 " BL sub_FF02DB8C\n"
395
396 " BL CreateTask_spytask \n"
397 " BL taskcreatePhySw_my \n"
398 " BL sub_FF028504\n"
399 " BL sub_FF02DBA4\n"
400 " BL sub_FF0217BC\n"
401 " BL sub_FF02250C\n"
402 " BL sub_FF02D40C\n"
403 " BL sub_FF022B64\n"
404 " BL sub_FF0224A8\n"
405 " BL sub_FF02E830\n"
406 " BL sub_FF02246C\n"
407 " LDMFD SP!, {R4,LR}\n"
408 " B sub_FF006708\n"
409 );
410 }
411
412
413
414
415 void __attribute__((naked,noinline)) taskcreatePhySw_my( ) {
416 asm volatile (
417 " STMFD SP!, {R3-R5,LR}\n"
418 " LDR R4, =0x1C3C\n"
419 " LDR R0, [R4, #4]\n"
420 " CMP R0, #0\n"
421 " BNE loc_FF0249A0\n"
422 " MOV R3, #0\n"
423 " STR R3, [SP]\n"
424
425
426 " LDR R3, =mykbd_task \n"
427 " MOV R2, #0x2000 \n"
428 " MOV R1, #0x17\n"
429 " LDR R0, =0xFF024BEC\n"
430 " BL sub_FF02B808\n"
431 " STR R0, [R4, #4]\n"
432 "loc_FF0249A0:\n"
433 " BL sub_FF0595A4\n"
434 " BL sub_FF08FBB8\n"
435 " BL sub_FF02640C\n"
436 " CMP R0, #0\n"
437 " BNE loc_FF0249C0\n"
438 " LDR R1, =0x386C8\n"
439 " MOV R0, #0\n"
440 " BL sub_FF08FB28\n"
441 "loc_FF0249C0:\n"
442 " LDMFD SP!, {R3-R5,PC}\n"
443 );
444 }
445
446
447
448
449 void spytask(long ua, long ub, long uc, long ud, long ue, long uf)
450 {
451 (void)ua; (void)ub; (void)uc; (void)ud; (void)ue; (void)uf;
452 core_spytask();
453 }
454
455
456
457
458 void CreateTask_spytask() {
459 _CreateTask("SpyTask", 0x19, 0x2000, spytask, 0);
460 }
461
462
463
464
465
466
467 void __attribute__((naked,noinline)) init_file_modules_task( ) {
468 asm volatile (
469 " STMFD SP!, {R4-R6,LR}\n"
470 " BL sub_FF092164\n"
471 " LDR R5, =0x5006\n"
472 " MOVS R4, R0\n"
473 " MOVNE R1, #0\n"
474 " MOVNE R0, R5\n"
475 " BLNE sub_FF096768\n"
476 " BL sub_FF092190\n"
477 " BL core_spytask_can_start\n"
478 " CMP R4, #0\n"
479 " LDMNEFD SP!, {R4-R6,PC}\n"
480 " MOV R0, R5\n"
481 " LDMFD SP!, {R4-R6,LR}\n"
482 " MOV R1, #0\n"
483 " B sub_FF096768\n"
484 );
485 }
486
487
488
489
490
491
492 short *jog_position;
493
494
495
496 void __attribute__((naked,noinline)) JogDial_task_my( ) {
497 asm volatile (
498 " STMFD SP!, {R4-R11,LR}\n"
499 " SUB SP, SP, #0x24\n"
500 " BL sub_FF059610 \n"
501 " LDR R12, =0x2700\n"
502 " LDR R6, =0xFF4538DC\n"
503 " MOV R0, #0\n"
504
505 " ADD R10, SP, #0x10 \n"
506 " LDR R9, =jog_position \n"
507 " STR R10, [R9] \n"
508
509 " ADD R10, SP, #8\n"
510 " ADD R9, SP, #0x10\n"
511 "loc_FF05929C:\n"
512 " ADD R2, SP, #0x1C\n"
513 " MOV R1, #0\n"
514 " ADD R4, R2, R0, LSL #1\n"
515 " ADD R3, SP, #0x18\n"
516 " STRH R1, [R4]\n"
517 " ADD R4, R3, R0, LSL #1\n"
518 " STRH R1, [R4]\n"
519 " STR R1, [R9, R0, LSL #2]\n"
520 " STR R1, [R10, R0, LSL #2]\n"
521 " ADD R0, R0, #1\n"
522 " CMP R0, #2\n"
523 " BLT loc_FF05929C\n"
524 "loc_FF0592CC:\n"
525 " LDR R0, =0x2700\n"
526 " MOV R2, #0\n"
527 " LDR R0, [R0, #8]\n"
528 " MOV R1, SP\n"
529 " BL sub_FF02AFD0\n"
530 " CMP R0, #0\n"
531 " LDRNE R1, =0x256\n"
532 " LDRNE R0, =0xFF05952C\n"
533 " BLNE sub_FF00EDC8\n"
534 " LDR R0, [SP]\n"
535 " AND R4, R0, #0xFF\n"
536 " AND R0, R0, #0xFF00\n"
537 " CMP R0, #0x100\n"
538 " BEQ loc_FF05933C\n"
539 " CMP R0, #0x200\n"
540 " BEQ loc_FF059374\n"
541 " CMP R0, #0x300\n"
542 " BEQ loc_FF059574\n"
543 " CMP R0, #0x400\n"
544 " BNE loc_FF0592CC\n"
545 " CMP R4, #0\n"
546 " LDRNE R1, =0x2E1\n"
547 " LDRNE R0, =0xFF05952C\n"
548 " BLNE sub_FF00EDC8\n"
549 " RSB R0, R4, R4, LSL #3\n"
550 " LDR R0, [R6, R0, LSL #2]\n"
551 "loc_FF059334:\n"
552 " BL sub_FF0595F4 \n"
553 " B loc_FF0592CC\n"
554 "loc_FF05933C:\n"
555
556 "labelA:\n"
557 "LDR R0, =jogdial_stopped\n"
558 "LDR R0, [R0]\n"
559 "CMP R0, #1\n"
560 "BNE labelB\n"
561 "MOV R0, #40\n"
562 "BL _SleepTask\n"
563 "B labelA\n"
564 "labelB:\n"
565
566 " LDR R0, =0x2710\n"
567 " LDR R0, [R0, R4, LSL #2]\n"
568 " BL sub_FF02C1F4\n"
569 " LDR R2, =0xFF0591C8\n"
570 " ORR R3, R4, #0x200\n"
571 " ADD R1, R2, #0\n"
572 " MOV R0, #0x28\n"
573 " BL sub_FF02C110\n"
574 " TST R0, #1\n"
575 " CMPNE R0, #0x15\n"
576 " STR R0, [R10, R4, LSL #2]\n"
577 " BEQ loc_FF0592CC\n"
578 " MOV R1, #0x268\n"
579 " B loc_FF059518\n"
580 "loc_FF059374:\n"
581 " RSB R5, R4, R4, LSL #3\n"
582 " LDR R0, [R6, R5, LSL #2]\n"
583 " LDR R1, =0xC0240000\n"
584 " ADD R0, R1, R0, LSL #8\n"
585 " LDR R0, [R0, #0x104]\n"
586 " MOV R1, R0, ASR #0x10\n"
587 " ADD R0, SP, #0x1C\n"
588 " ADD R11, R0, R4, LSL #1\n"
589 " ADD R0, SP, #0x18\n"
590 " ADD R0, R0, R4, LSL #1\n"
591 " STRH R1, [R11]\n"
592 " STR R0, [SP, #0x20]\n"
593 " LDRSH R3, [R0]\n"
594 " SUB R2, R1, R3\n"
595 " CMP R2, #0\n"
596 " BNE loc_FF0593F8\n"
597 " LDR R0, [R9, R4, LSL #2]\n"
598 " CMP R0, #0\n"
599 " BEQ loc_FF0594D4\n"
600 " LDR R7, =0x2710\n"
601 " LDR R0, [R7, R4, LSL #2]\n"
602 " BL sub_FF02C1F4\n"
603 " LDR R2, =0xFF0591D4\n"
604 " ORR R3, R4, #0x300\n"
605 " ADD R1, R2, #0\n"
606 " MOV R0, #0x1F4\n"
607 " BL sub_FF02C110\n"
608 " TST R0, #1\n"
609 " CMPNE R0, #0x15\n"
610 " STR R0, [R7, R4, LSL #2]\n"
611 " BEQ loc_FF0594D4\n"
612 " LDR R1, =0x281\n"
613 " B loc_FF0594CC\n"
614 "loc_FF0593F8:\n"
615 " MOV R0, R2\n"
616 " RSBLT R0, R0, #0\n"
617 " MOVLE R7, #0\n"
618 " MOVGT R7, #1\n"
619 " CMP R0, #0xFF\n"
620 " BLS loc_FF059434\n"
621 " LDR R0, =0x7FFF\n"
622 " CMP R2, #0\n"
623 " SUBLE R0, R0, R3\n"
624 " ADDLE R0, R0, R1\n"
625 " SUBGT R0, R0, R1\n"
626 " ADDGT R0, R0, R3\n"
627 " MVN R1, #0x8000\n"
628 " SUB R0, R0, R1\n"
629 " EOR R7, R7, #1\n"
630 "loc_FF059434:\n"
631 " STR R0, [SP, #4]\n"
632 " LDR R0, [R9, R4, LSL #2]\n"
633 " CMP R0, #0\n"
634 " ADDEQ R0, R6, R5, LSL #2\n"
635 " LDREQ R0, [R0, #8]\n"
636 " BEQ loc_FF05946C\n"
637 " ADD R8, R6, R5, LSL #2\n"
638 " ADD R1, R8, R7, LSL #2\n"
639 " LDR R1, [R1, #0x10]\n"
640 " CMP R1, R0\n"
641 " BEQ loc_FF059470\n"
642 " LDR R0, [R8, #0xC]\n"
643 " BL sub_FF0249C4\n"
644 " LDR R0, [R8, #8]\n"
645 "loc_FF05946C:\n"
646 " BL sub_FF0249C4\n"
647 "loc_FF059470:\n"
648 " ADD R0, R6, R5, LSL #2\n"
649 " ADD R7, R0, R7, LSL #2\n"
650 " LDR R0, [R7, #0x10]\n"
651 " LDR R1, [SP, #4]\n"
652 " BL sub_FF0249D4\n"
653 " LDR R0, [R7, #0x10]\n"
654 " LDR R7, =0x2710\n"
655 " STR R0, [R9, R4, LSL #2]\n"
656 " LDRH R1, [R11]\n"
657 " LDR R0, [SP, #0x20]\n"
658 " STRH R1, [R0]\n"
659 " LDR R0, [R7, R4, LSL #2]\n"
660 " BL sub_FF02C1F4\n"
661 " LDR R2, =0xFF0591D4\n"
662 " ORR R3, R4, #0x300\n"
663 " ADD R1, R2, #0\n"
664 " MOV R0, #0x1F4\n"
665 " BL sub_FF02C110\n"
666 " TST R0, #1\n"
667 " CMPNE R0, #0x15\n"
668 " STR R0, [R7, R4, LSL #2]\n"
669 " BEQ loc_FF0594D4\n"
670 " LDR R1, =0x2C3\n"
671 "loc_FF0594CC:\n"
672 " LDR R0, =0xFF05952C\n"
673 " BL sub_FF00EDC8\n"
674 "loc_FF0594D4:\n"
675 " ADD R0, R6, R5, LSL #2\n"
676 " LDR R0, [R0, #0x18]\n"
677 " CMP R0, #1\n"
678 " BNE loc_FF05956C\n"
679 " LDR R0, =0x2700\n"
680 " LDR R0, [R0, #0xC]\n"
681 " CMP R0, #0\n"
682 " BEQ loc_FF05956C\n"
683 " LDR R2, =0xFF0591C8\n"
684 " ORR R3, R4, #0x400\n"
685 " ADD R1, R2, #0\n"
686 " BL sub_FF02C110\n"
687 " TST R0, #1\n"
688 " CMPNE R0, #0x15\n"
689 " STR R0, [R10, R4, LSL #2]\n"
690 " BEQ loc_FF0592CC\n"
691 " LDR R1, =0x2CA\n"
692 "loc_FF059518:\n"
693 " LDR R0, =0xFF05952C\n"
694 " BL sub_FF00EDC8\n"
695 " B loc_FF0592CC\n"
696 "loc_FF05956C:\n"
697 " LDR R0, [R6, R5, LSL #2]\n"
698 " B loc_FF059334\n"
699 "loc_FF059574:\n"
700 " LDR R0, [R9, R4, LSL #2]\n"
701 " CMP R0, #0\n"
702 " MOVEQ R1, #0x2D4\n"
703 " LDREQ R0, =0xFF05952C\n"
704 " BLEQ sub_FF00EDC8\n"
705 " RSB R0, R4, R4, LSL #3\n"
706 " ADD R0, R6, R0, LSL #2\n"
707 " LDR R0, [R0, #0xC]\n"
708 " BL sub_FF0249C4\n"
709 " MOV R0, #0\n"
710 " STR R0, [R9, R4, LSL #2]\n"
711 " B loc_FF0592CC\n"
712 );
713 }
714