source: branches/philmoz/platform/sx40hs/sub/100f/boot.c @ 1409

Revision 1409, 19.9 KB checked in by philmoz, 20 months ago (diff)

Update of SX40HS 1.00f code from ERR99.

  • Property svn:eol-style set to native
Line 
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
8void CreateTask_spytask();
9extern volatile int jogdial_stopped;
10void JogDial_task_my(void);
11const char * const new_sa = &_end;
12extern void task_CaptSeq();
13extern void task_InitFileModules();
14extern void task_RotaryEncoder();
15extern void task_MovieRecord();
16extern void task_ExpDrv();
17
18void taskHook(context_t **context) {
19
20        task_t *tcb=(task_t*)((char*)context-offsetof(task_t, context));
21
22        if(tcb->entry == (void*)task_CaptSeq)                   tcb->entry = (void*)capt_seq_task;
23        if(tcb->entry == (void*)task_InitFileModules)   tcb->entry = (void*)init_file_modules_task;
24        if(tcb->entry == (void*)task_RotaryEncoder)             tcb->entry = (void*)JogDial_task_my;
25        if(tcb->entry == (void*)task_MovieRecord)               tcb->entry = (void*)movie_record_task;
26        if(tcb->entry == (void*)task_ExpDrv)                    tcb->entry = (void*)exp_drv_task;
27}
28
29#define LED_PR 0xC022C30C   // SX40HS @ 0xFF15B1F0
30void __attribute__((noreturn)) blink(int cnt)
31{
32        volatile long *p=(void*)LED_PR;
33        int i;
34
35        for(;cnt>0;cnt--){
36                p[0]=p[0]&(0xCF);
37
38                for(i=0;i<0x200000;i++){
39                        asm ("nop\n");
40                        asm ("nop\n");
41                }
42                p[0]=(p[0]&(0xCF))|0x20;
43                for(i=0;i<0x200000;i++){
44                        asm ("nop\n");
45                        asm ("nop\n");
46                }
47        }
48
49}
50void __attribute__((naked,noinline)) boot() {
51
52    asm volatile (
53"loc_FF00000C:\n"
54        "LDR     R1, =0xC0410000\n"
55        "MOV     R0, #0\n"
56        "STR     R0, [R1]\n"
57        "MOV     R1, #0x78\n"
58        "MCR     p15, 0, R1,c1,c0\n"
59        "MOV     R1, #0\n"
60        "MCR     p15, 0, R1,c7,c10, 4\n"
61        "MCR     p15, 0, R1,c7,c5\n"
62"loc_FF00002C:\n"
63        "MCR     p15, 0, R1,c7,c6\n"
64        "MOV     R0, #0x3D\n"
65        "MCR     p15, 0, R0,c6,c0\n"
66        "MOV     R0, #0xC000002F\n"
67        "MCR     p15, 0, R0,c6,c1\n"
68        "MOV     R0, #0x37\n"
69        "MCR     p15, 0, R0,c6,c2\n"
70        "MOV     R0, #0x40000037\n"
71        "MCR     p15, 0, R0,c6,c3\n"
72        "MOV     R0, #0x80000017\n"
73        "MCR     p15, 0, R0,c6,c4\n"
74        //"LDR     R0, =(loc_FF00002C+3)\n"
75                "LDR     R0, =0xFF00002F\n"
76        "MCR     p15, 0, R0,c6,c5\n"
77        "LDR     R0, =0xD000002B\n"
78        "MCR     p15, 0, R0,c6,c7\n"
79        "MOV     R0, #0x34\n"
80        "MCR     p15, 0, R0,c2,c0\n"
81        "MOV     R0, #0x34\n"
82        "MCR     p15, 0, R0,c2,c0, 1\n"
83        "MOV     R0, #0x34\n"
84        "MCR     p15, 0, R0,c3,c0\n"
85        "LDR     R0, =0x33333330\n"
86        "MCR     p15, 0, R0,c5,c0, 2\n"
87        "LDR     R0, =0x33333330\n"
88        "MCR     p15, 0, R0,c5,c0, 3\n"
89        "MRC     p15, 0, R0,c1,c0\n"
90        "ORR     R0, R0, #0x1000\n"
91        "ORR     R0, R0, #4\n"
92        "ORR     R0, R0, #1\n"
93        "MCR     p15, 0, R0,c1,c0\n"
94        "MOV     R1, #0x80000006\n"
95        "MCR     p15, 0, R1,c9,c1\n"
96        "MOV     R1, #6\n"
97        "MCR     p15, 0, R1,c9,c1, 1\n"
98        "MRC     p15, 0, R1,c1,c0\n"
99        "ORR     R1, R1, #0x50000\n"
100        "MCR     p15, 0, R1,c1,c0\n"
101        "LDR     R2, =0xC0200000\n"
102        "MOV     R1, #1\n"
103        "STR     R1, [R2,#0x10C]\n"
104        "MOV     R1, #0xFF\n"
105        "STR     R1, [R2,#0xC]\n"
106        "STR     R1, [R2,#0x1C]\n"
107        "STR     R1, [R2,#0x2C]\n"
108        "STR     R1, [R2,#0x3C]\n"
109        "STR     R1, [R2,#0x4C]\n"
110        "STR     R1, [R2,#0x5C]\n"
111        "STR     R1, [R2,#0x6C]\n"
112        "STR     R1, [R2,#0x7C]\n"
113        "STR     R1, [R2,#0x8C]\n"
114        "STR     R1, [R2,#0x9C]\n"
115        "STR     R1, [R2,#0xAC]\n"
116        "STR     R1, [R2,#0xBC]\n"
117        "STR     R1, [R2,#0xCC]\n"
118        "STR     R1, [R2,#0xDC]\n"
119        "STR     R1, [R2,#0xEC]\n"
120        "STR     R1, [R2,#0xFC]\n"
121        "LDR     R1, =0xC0400008\n"
122        "LDR     R2, =0x430005\n"
123        "STR     R2, [R1]\n"
124        "MOV     R1, #1\n"
125        "LDR     R2, =0xC0243100\n"
126        "STR     R2, [R1]\n"
127        "LDR     R2, =0xC0242010\n"
128        "LDR     R1, [R2]\n"
129        "ORR     R1, R1, #1\n"
130        "STR     R1, [R2]\n"
131        "LDR     R0, =0xFF62743C\n"
132        "LDR     R1, =0x1900\n"
133        "LDR     R3, =0x13718\n"
134"loc_FF000144:\n"
135        "CMP     R1, R3\n"
136        "LDRCC   R2, [R0],#4\n"
137        "STRCC   R2, [R1],#4\n"
138        "BCC     loc_FF000144\n"
139        "LDR     R1, =0x198C30\n"
140        "MOV     R2, #0\n"
141"loc_FF00015C:\n"
142        "CMP     R3, R1\n"
143        "STRCC   R2, [R3],#4\n"
144        "BCC     loc_FF00015C\n"
145        "B       sub_FF000364_my\n"
146                //"B       sub_FF000364\n"
147         );
148}
149
150void __attribute__((naked,noinline)) sub_FF000364_my() {
151
152   *(int*)0x1938=(int)taskHook;
153   *(int*)0x193C=(int)taskHook;
154
155
156 if ( (*(int*)0xC022F48C & 0x800000) )
157                *(int*)(0x2628+0x8) = 0x200000;  // Playmode "PhySwConfig.c" SX40 FF0571D4
158        else
159                *(int*)(0x2628+0x8) = 0x100000; // Shootingmode
160
161   asm volatile (
162"loc_FF000364:\n"
163        "LDR     R0, =0xFF0003DC\n"
164        "MOV     R1, #0\n"
165        "LDR     R3, =0xFF000414\n"
166"loc_FF000370:\n"
167        "CMP     R0, R3\n"
168        "LDRCC   R2, [R0],#4\n"
169        "STRCC   R2, [R1],#4\n"
170        "BCC     loc_FF000370\n"
171        "LDR     R0, =0xFF000414\n"
172        "MOV     R1, #0x4B0\n"
173        "LDR     R3, =0xFF000628\n"
174"loc_FF00038C:\n"
175        "CMP     R0, R3\n"
176        "LDRCC   R2, [R0],#4\n"
177        "STRCC   R2, [R1],#4\n"
178        "BCC     loc_FF00038C\n"
179        "MOV     R0, #0xD2\n"
180        "MSR     CPSR_cxsf, R0\n"
181        "MOV     SP, #0x1000\n"
182        "MOV     R0, #0xD3\n"
183        "MSR     CPSR_cxsf, R0\n"
184        "MOV     SP, #0x1000\n"
185        "LDR     R0, loc_FF0003D0\n"
186        "LDR     R2, =0xEEEEEEEE\n"
187        "MOV     R3, #0x1000\n"
188"loc_FF0003C0:\n"
189        "CMP     R0, R3\n"
190        "STRCC   R2, [R0],#4\n"
191        "BCC     loc_FF0003C0\n"
192        //"BL      sub_FF0011BC\n"
193                "BL      sub_FF0011BC_my\n"
194"loc_FF0003D0:\n"
195        "ANDEQ   R0, R0, R4,ASR#13\n"
196"loc_FF0003D4:\n"
197        "ANDEQ   R0, R0, R0,ROR R6\n"
198"loc_FF0003D8:\n"
199        "ANDEQ   R0, R0, R4,ROR R6\n"
200        "NOP\n"
201        "LDR     PC, =0xFF000628\n"
202        );
203}
204
205void __attribute__((naked,noinline)) sub_FF0011BC_my() {
206
207        asm volatile (
208         "STR     LR, [SP,#-4]!\n"
209        "SUB     SP, SP, #0x74\n"
210        "MOV     R1, #0x74\n"
211        "MOV     R0, SP\n"
212        "BL      sub_FF42FD60\n"
213        "MOV     R0, #0x67000\n"
214        "STR     R0, [SP,#4]\n"
215#if defined(OPT_CHDK_IN_EXMEM)
216        "LDR     R0, =0x198C30\n"
217#else   
218                "LDR     R0, =new_sa\n"
219                "LDR      R0, [R0]\n"   
220#endif         
221        "LDR     R2, =0x55D788\n"
222        "STR     R0, [SP,#8]\n"
223        "SUB     R0, R2, R0\n"
224        "STR     R0, [SP,#0xC]\n"
225        "MOV     R0, #0x22\n"
226        "STR     R0, [SP,#0x18]\n"
227        "MOV     R0, #0x72\n"
228        "STR     R0, [SP,#0x1C]\n"
229        "LDR     R1, =0x565C00\n"
230        "LDR     R0, =0x1CD\n"
231        "STR     R1, [SP]\n"
232        "STR     R0, [SP,#0x20]\n"
233        "MOV     R0, #0x96\n"
234        "STR     R2, [SP,#0x10]\n"
235        "STR     R1, [SP,#0x14]\n"
236        "STR     R0, [SP,#0x24]\n"
237        "STR     R0, [SP,#0x28]\n"
238        "MOV     R0, #0x64\n"
239        "STR     R0, [SP,#0x2C]\n"
240        "MOV     R0, #0\n"
241        "STR     R0, [SP,#0x30]\n"
242        "STR     R0, [SP,#0x34]\n"
243        "MOV     R0, #0x10\n"
244        "STR     R0, [SP,#0x5C]\n"
245        "MOV     R0, #0x800\n"
246        "STR     R0, [SP,#0x60]\n"
247        "MOV     R0, #0xA0\n"
248        "STR     R0, [SP,#0x64]\n"
249        "MOV     R0, #0x280\n"
250        "STR     R0, [SP,#0x68]\n"
251        //"LDR     R1, =sub_FF005F38\n"
252                "LDR     R1, =sub_FF005F38_my\n"
253        "MOV     R2, #0\n"
254        "MOV     R0, SP\n"
255        "BL      sub_FF0034D0\n"
256        "ADD     SP, SP, #0x74\n"
257        "LDR     PC, [SP],#4\n"
258         );
259}
260
261void __attribute__((naked,noinline)) sub_FF005F38_my() {
262     
263         asm volatile (
264        "STMFD   SP!, {R4,LR}\n"
265        "BL      sub_FF000B34\n"
266        "BL      sub_FF00A390\n"
267        "CMP     R0, #0\n"
268        "LDRLT   R0, =0xFF00604C\n"
269        "BLLT    sub_FF00602C\n"
270        "BL      sub_FF005B70\n"
271        "CMP     R0, #0\n"
272        "LDRLT   R0, =0xFF006054\n"
273        "BLLT    sub_FF00602C\n"
274        "LDR     R0, =0xFF006064\n"
275        "BL      sub_FF005C58\n"
276        "CMP     R0, #0\n"
277        "LDRLT   R0, =0xFF00606C\n"
278        "BLLT    sub_FF00602C\n"
279        "LDR     R0, =0xFF006064\n"
280        "BL      sub_FF003CB4\n"
281        "CMP     R0, #0\n"
282        "LDRLT   R0, =0xFF006080\n"
283        "BLLT    sub_FF00602C\n"
284        "BL      sub_FF009CF8\n"
285        "CMP     R0, #0\n"
286        "LDRLT   R0, =0xFF00608C\n"
287        "BLLT    sub_FF00602C\n"
288        "BL      sub_FF00169C\n"
289        "CMP     R0, #0\n"
290        "LDRLT   R0, =0xFF006098\n"
291        "BLLT    sub_FF00602C\n"
292        "LDMFD   SP!, {R4,LR}\n"
293        //"B       sub_FF00FDA4\n"
294                "B       sub_FF00FDA4_my\n"
295        );
296};
297
298void __attribute__((naked,noinline)) sub_FF00FDA4_my() {
299        asm volatile (
300"sub_FF00FDA4:\n"
301        "STMFD   SP!, {R4,LR}\n"
302        "BL      sub_FF024B10\n"
303        "BL      sub_FF00FDB8_my\n"
304        "MOV     R0, #0\n"
305        "LDMFD   SP!, {R4,PC}\n"
306        );
307}
308void __attribute__((naked,noinline)) sub_FF00FDB8_my() {
309
310        asm volatile (
311        "STMFD   SP!, {R3-R7,LR}\n"
312        "MOV     R6, #0\n"
313        "BL      sub_FF02D794\n"
314        "MOVS    R7, R0\n"
315        "BNE     loc_FF00FE3C\n"
316        "BL      sub_FF0264E4\n"
317        "CMP     R0, #0\n"
318        "BEQ     loc_FF00FE3C\n"
319        "MOV     R0, #0x4C\n"
320        "BL      sub_FF02BD3C\n"
321        "RSBS    R5, R0, #1\n"
322        "MOVCC   R5, #0\n"
323        "MOV     R0, #0x4B\n"
324        "BL      sub_FF02BD3C\n"
325        "RSBS    R4, R0, #1\n"
326        "MOVCC   R4, #0\n"
327        "BL      sub_FF022B9C\n"
328        "CMP     R0, #1\n"
329        "MOVEQ   R6, #1\n"
330        "ORR     R0, R4, R5\n"
331        "ORRS    R0, R0, R6\n"
332        "BNE     loc_FF00FE5C\n"
333        "BL      sub_FF0235C8\n"
334        "LDR     R4, =0x83DC00\n"
335        "MOV     R0, #0x45\n"
336        "MOV     R1, R4\n"
337        "BL      sub_FF02BD2C\n"
338        "MOV     R0, #0x28\n"
339        "BL      sub_FF02B88C\n"
340        "MOV     R1, R4\n"
341        "MOV     R0, #0x54\n"
342        "BL      sub_FF02BD2C\n"
343"loc_FF00FE38:\n"
344        "B       loc_FF00FE38\n"
345"loc_FF00FE3C:\n"
346        "MOV     R0, #0x4B\n"
347        "BL      sub_FF02BD3C\n"
348        "RSBS    R4, R0, #1\n"
349        "MOVCC   R4, #0\n"
350        "MOV     R0, #0x4C\n"
351        "BL      sub_FF02BD3C\n"
352        "RSBS    R5, R0, #1\n"
353        "MOVCC   R5, #0\n"
354"loc_FF00FE5C:\n"
355        "MOV     R3, R6\n"
356        "MOV     R2, R7\n"
357        "MOV     R1, R5\n"
358        "MOV     R0, R4\n"
359        //"BL      sub_FF024B18\n" // StartUp mode detection
360        "BL      sub_FF024B14\n"
361        "BL      sub_FF02B6BC\n"
362        "LDR     R1, =0x5CE000\n"
363        "MOV     R0, #0\n"
364        "BL      sub_FF02BB2C\n"
365        "BL      sub_FF02B8D4\n"
366        "MOV     R3, #0\n"
367        "STR     R3, [SP]\n"
368        "LDR     R3, =task_Startup_my\n"
369                //"LDR     R3, =sub_FF00FD34\n"
370        "MOV     R2, #0\n"
371        "MOV     R1, #0x19\n"
372        "LDR     R0, =0xFF00FEB8\n"
373        "BL      sub_FF00EAF0\n"
374        "MOV     R0, #0\n"
375        "LDMFD   SP!, {R3-R7,PC}\n"
376         );
377}
378
379void __attribute__((naked,noinline)) task_Startup_my() {
380
381   asm volatile (
382        "STMFD   SP!, {R4,LR}\n"
383        "BL      sub_FF0065E8\n"
384        "BL      sub_FF025C28\n"
385        "BL      sub_FF023110\n"
386        "BL      sub_FF0234FC\n"
387        "BL      sub_FF02D7DC\n"
388        "BL      sub_FF02D9C8\n"
389        "BL      sub_FF023CE4\n"
390        "BL      sub_FF022BAC\n"
391        "MOV     R0, #1\n"
392        "BL      sub_FF022F7C\n"
393        //"BL      sub_FF02D870\n" // disable diskboot.bin
394        "BL      sub_FF02DB8C\n"
395        "BL      sub_FF02D9F8\n"
396        "BL      sub_FF02AE60\n"
397        "BL      sub_FF02DB90\n"
398                "BL      CreateTask_spytask\n"
399                "BL              taskcreatePhySw_my\n"         
400        //"BL      sub_FF024998\n" // PhysSw
401        "BL      sub_FF028550\n"
402        "BL      sub_FF02DBA8\n"
403        "BL      sub_FF0217A4\n"
404        "BL      sub_FF0224F4\n"
405        "BL      sub_FF02D550\n"
406        "BL      sub_FF022B4C\n"
407        "BL      sub_FF022490\n"
408        "BL      sub_FF02E7FC\n"
409        "BL      sub_FF022454\n"
410        "LDMFD   SP!, {R4,LR}\n"
411        "B       sub_FF006708\n"
412        );
413}
414
415void __attribute__((naked,noinline)) taskcreatePhySw_my() {
416       
417        asm volatile (
418        "STMFD   SP!, {R3-R5,LR}\n"
419        "LDR     R4, =0x1C10\n"
420        "LDR     R0, [R4,#4]\n"
421        "CMP     R0, #0\n"
422        "BNE     sub_FF0249CC\n"
423        "MOV     R3, #0\n"
424        "STR     R3, [SP]\n"
425        "LDR     R3, =mykbd_task\n"
426                //"LDR     R3, =0xFF024964\n"
427        //"MOV   R2, #0x800\n"
428            "MOV     R2, #0x2000\n"             // stack size for new task_PhySw so we don't have to do stack switch
429
430            "B                  sub_FF0249BC"
431         );
432}
433
434
435void spytask(long ua, long ub, long uc, long ud, long ue, long uf) {
436   
437        core_spytask();
438}
439
440void CreateTask_spytask() {
441
442        _CreateTask("SpyTask", 0x19, 0x2000, core_spytask, 0);
443};
444
445void __attribute__((naked,noinline)) init_file_modules_task() {
446       
447         asm volatile(
448        "STMFD   SP!, {R4-R6,LR}\n"
449        "BL      sub_FF0918E8\n"
450        "LDR     R5, =0x5006\n"
451        "MOVS    R4, R0\n"
452        "MOVNE   R1, #0\n"
453        "MOVNE   R0, R5\n"
454        "BLNE    sub_FF095BE4\n"
455        "BL      sub_FF091914\n"
456                "BL              core_spytask_can_start\n"
457        "CMP     R4, #0\n"
458        "LDMNEFD SP!, {R4-R6,PC}\n"
459        "MOV     R0, R5\n"
460        "LDMFD   SP!, {R4-R6,LR}\n"
461        "MOV     R1, #0\n"
462        "B       sub_FF095BE4\n"
463 );
464}
465
466short *jog_position;
467void __attribute__((naked,noinline)) JogDial_task_my() {
468 
469 asm volatile(
470        "STMFD   SP!, {R4-R11,LR}\n"
471        "SUB     SP, SP, #0x1C\n"
472        "BL      sub_FF0582F8\n"
473        "LDR     R12, =0x264C\n"
474        "LDR     R6, =0xFF434CC4\n"
475        "MOV     R0, #0\n"
476        "ADD     R10, SP, #8\n"
477        "ADD     R9, SP, #0xC\n"
478               
479                                 // Save pointer for kbd.c routine
480                                 "LDR R2, =jog_position \n"
481                                 "STR R9, [R2] \n"     
482                                 
483"loc_FF057F84:\n"
484        "ADD     R2, SP, #0x14\n"
485        "MOV     R1, #0\n"
486        "ADD     R4, R2, R0,LSL#1\n"
487        "ADD     R3, SP, #0x10\n"
488        "STRH    R1, [R4]\n"
489        "ADD     R4, R3, R0,LSL#1\n"
490        "STRH    R1, [R4]\n"
491        "STR     R1, [R9,R0,LSL#2]\n"
492        "STR     R1, [R10,R0,LSL#2]\n"
493        "ADD     R0, R0, #1\n"
494        "CMP     R0, #1\n"
495        "BLT     loc_FF057F84\n"
496"loc_FF057FB4:\n"
497        "LDR     R0, =0x264C\n"
498        "MOV     R2, #0\n"
499        "LDR     R0, [R0,#8]\n"
500        "MOV     R1, SP\n"
501        "BL      sub_FF02B0F4\n"
502        "CMP     R0, #0\n"
503        "LDRNE   R1, =0x256\n"
504        "LDRNE   R0, =0xFF058214\n"
505        "BLNE    sub_FF00EDC8\n"
506        "LDR     R0, [SP]\n"
507        "AND     R4, R0, #0xFF\n"
508        "AND     R0, R0, #0xFF00\n"
509        "CMP     R0, #0x100\n"
510        "BEQ     loc_FF058024\n"
511        "CMP     R0, #0x200\n"
512        "BEQ     loc_FF05805C\n"
513        "CMP     R0, #0x300\n"
514        "BEQ     loc_FF05825C\n"
515        "CMP     R0, #0x400\n"
516        "BNE     loc_FF057FB4\n"
517        "CMP     R4, #0\n"
518        "LDRNE   R1, =0x2E1\n"
519        "LDRNE   R0, =0xFF058214\n"
520        "BLNE    sub_FF00EDC8\n"
521        "RSB     R0, R4, R4,LSL#3\n"
522        "LDR     R0, [R6,R0,LSL#2]\n"
523"loc_FF05801C:\n"
524        "BL      sub_FF0582DC\n"
525        "B       loc_FF057FB4\n"
526"loc_FF058024:\n"
527
528
529"labelA:\n"
530                 "LDR     R0, =jogdial_stopped\n"
531                 "LDR     R0, [R0]\n"
532                 "CMP     R0, #1\n"
533                 "BNE     labelB\n"
534                 "MOV     R0, #40\n"
535                 "BL      sub_FF02B88C\n" // SleepTask
536                 "B       labelA\n"
537 "labelB:\n"
538
539                "LDR     R0, =0x2658\n"
540        "LDR     R0, [R0,R4,LSL#2]\n"
541        "BL      sub_FF02C318\n"
542        "LDR     R2, =0xFF057EB0\n"
543        "ORR     R3, R4, #0x200\n"
544        "MOV     R1, R2\n"
545        "MOV     R0, #0x28\n"
546        "BL      sub_FF02C234\n"
547        "TST     R0, #1\n"
548        "CMPNE   R0, #0x15\n"
549        "STR     R0, [R10,R4,LSL#2]\n"
550        "BEQ     loc_FF057FB4\n"
551        "MOV     R1, #0x268\n"
552        "B       loc_FF058200\n"
553"loc_FF05805C:\n"
554        "RSB     R5, R4, R4,LSL#3\n"
555        "LDR     R0, [R6,R5,LSL#2]\n"
556        "LDR     R1, =0xC0240000\n"
557        "ADD     R0, R1, R0,LSL#8\n"
558        "LDR     R0, [R0,#0x104]\n"
559        "MOV     R1, R0,ASR#16\n"
560        "ADD     R0, SP, #0x14\n"
561        "ADD     R11, R0, R4,LSL#1\n"
562        "ADD     R0, SP, #0x10\n"
563        "ADD     R0, R0, R4,LSL#1\n"
564        "STRH    R1, [R11]\n"
565        "STR     R0, [SP,#0x18]\n"
566        "LDRSH   R3, [R0]\n"
567        "SUB     R2, R1, R3\n"
568        "CMP     R2, #0\n"
569        "BNE     loc_FF0580E0\n"
570        "LDR     R0, [R9,R4,LSL#2]\n"
571        "CMP     R0, #0\n"
572        "BEQ     loc_FF0581BC\n"
573        "LDR     R7, =0x2658\n"
574        "LDR     R0, [R7,R4,LSL#2]\n"
575        "BL      sub_FF02C318\n"
576        "LDR     R2, =sub_FF057EBC\n"
577        "ORR     R3, R4, #0x300\n"
578        "MOV     R1, R2\n"
579        "MOV     R0, #0x1F4\n"
580        "BL      sub_FF02C234\n"
581        "TST     R0, #1\n"
582        "CMPNE   R0, #0x15\n"
583        "STR     R0, [R7,R4,LSL#2]\n"
584        "BEQ     loc_FF0581BC\n"
585        "LDR     R1, =0x281\n"
586        "B       loc_FF0581B4\n"
587"loc_FF0580E0:\n"
588        "MOV     R0, R2\n"
589        "RSBLT   R0, R0, #0\n"
590        "MOVLE   R7, #0\n"
591        "MOVGT   R7, #1\n"
592        "CMP     R0, #0xFF\n"
593        "BLS     loc_FF05811C\n"
594        "LDR     R0, =0x7FFF\n"
595        "CMP     R2, #0\n"
596        "SUBLE   R0, R0, R3\n"
597        "ADDLE   R0, R0, R1\n"
598        "SUBGT   R0, R0, R1\n"
599        "ADDGT   R0, R0, R3\n"
600        "MOV     R1, #0xFFFF7FFF\n"
601                //"MVN     R1, #0x8000\n"
602        "SUB     R0, R0, R1\n"
603        "EOR     R7, R7, #1\n"
604"loc_FF05811C:\n"
605        "STR     R0, [SP,#4]\n"
606        "LDR     R0, [R9,R4,LSL#2]\n"
607        "CMP     R0, #0\n"
608        "ADDEQ   R0, R6, R5,LSL#2\n"
609        "LDREQ   R0, [R0,#8]\n"
610        "BEQ     loc_FF058154\n"
611        "ADD     R8, R6, R5,LSL#2\n"
612        "ADD     R1, R8, R7,LSL#2\n"
613        "LDR     R1, [R1,#0x10]\n"
614        "CMP     R1, R0\n"
615        "BEQ     loc_FF058158\n"
616        "LDR     R0, [R8,#0xC]\n"
617        "BL      sub_FF0249F0\n"
618        "LDR     R0, [R8,#8]\n"
619"loc_FF058154:\n"
620        "BL      sub_FF0249F0\n"
621"loc_FF058158:\n"
622        "ADD     R0, R6, R5,LSL#2\n"
623        "ADD     R7, R0, R7,LSL#2\n"
624        "LDR     R0, [R7,#0x10]\n"
625        "LDR     R1, [SP,#4]\n"
626        "BL      sub_FF024A00\n"
627        "LDR     R0, [R7,#0x10]\n"
628        "LDR     R7, =0x2658\n"
629        "STR     R0, [R9,R4,LSL#2]\n"
630        "LDRH    R1, [R11]\n"
631        "LDR     R0, [SP,#0x18]\n"
632        "STRH    R1, [R0]\n"
633        "LDR     R0, [R7,R4,LSL#2]\n"
634        "BL      sub_FF02C318\n"
635        "LDR     R2, =sub_FF057EBC\n"
636        "ORR     R3, R4, #0x300\n"
637        "MOV     R1, R2\n"
638        "MOV     R0, #0x1F4\n"
639        "BL      sub_FF02C234\n"
640        "TST     R0, #1\n"
641        "CMPNE   R0, #0x15\n"
642        "STR     R0, [R7,R4,LSL#2]\n"
643        "BEQ     loc_FF0581BC\n"
644        "LDR     R1, =0x2C3\n"
645"loc_FF0581B4:\n"
646        "LDR     R0, =0xFF058214\n"
647        "BL      sub_FF00EDC8\n"
648"loc_FF0581BC:\n"
649        "ADD     R0, R6, R5,LSL#2\n"
650        "LDR     R0, [R0,#0x18]\n"
651        "CMP     R0, #1\n"
652        "BNE     loc_FF058254\n"
653        "LDR     R0, =0x264C\n"
654        "LDR     R0, [R0,#0x10]\n"
655        "CMP     R0, #0\n"
656        "BEQ     loc_FF058254\n"
657        "LDR     R2, =0xFF057EB0\n"
658        "ORR     R3, R4, #0x400\n"
659        "MOV     R1, R2\n"
660        "BL      sub_FF02C234\n"
661        "TST     R0, #1\n"
662        "CMPNE   R0, #0x15\n"
663        "STR     R0, [R10,R4,LSL#2]\n"
664        "BEQ     loc_FF057FB4\n"
665        "LDR     R1, =0x2CA\n"
666"loc_FF058200:\n"
667        "LDR     R0, =0xFF058214\n"
668        "BL      sub_FF00EDC8\n"
669        "B       loc_FF057FB4\n"
670               
671"loc_FF058254:\n"
672        "LDR     R0, [R6,R5,LSL#2]\n"
673        "B       loc_FF05801C\n"
674"loc_FF05825C:\n"
675        "LDR     R0, [R9,R4,LSL#2]\n"
676        "CMP     R0, #0\n"
677        "MOVEQ   R1, #0x2D4\n"
678        "LDREQ   R0, =0xFF058214\n"
679        "BLEQ    sub_FF00EDC8\n"
680        "RSB     R0, R4, R4,LSL#3\n"
681        "ADD     R0, R6, R0,LSL#2\n"
682        "LDR     R0, [R0,#0xC]\n"
683        "BL      sub_FF0249F0\n"
684        "MOV     R0, #0\n"
685        "STR     R0, [R9,R4,LSL#2]\n"
686        "B       loc_FF057FB4\n"
687         );
688 }
Note: See TracBrowser for help on using the repository browser.