source: trunk/platform/s100/sub/100d/boot.c @ 1792

Revision 1792, 22.0 KB checked in by philmoz, 14 months ago (diff)

Add S100 firmware versions 1.00d, 1.00e and 1.01a from c10ud.
http://chdk.setepontos.com/index.php?topic=650.msg83736#msg83736

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