source: branches/philmoz/platform/sx40hs/sub/100g/boot.c @ 1404

Revision 1404, 24.4 KB checked in by philmoz, 18 months ago (diff)

Update for SX40HS ALPHA:

  • allow empty badpixel.bin file
  • add video quality override
  • set battery levels
  • Property svn:eol-style set to native
RevLine 
[1401]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//void __attribute__((naked,noinline)) my_blinker(int n) {
17//      asm volatile (
18//"                STMFD   SP!, {R0-R5,LR}\n"
19//);
20//      int i, j;
21//      for (j=0; j<n; j++)
22//      {
23//              *((volatile int *) 0xC0220130) = 0x46; // Turn on LED
24//              for (i=0; i<0x200000; i++) { asm volatile ( "nop\n" ); }
25//
26//              *((volatile int *) 0xC0220130) = 0x44; // Turn off LED
27//              for (i=0; i<0x200000; i++) { asm volatile ( "nop\n" ); }
28//      }
29//      for (i=0; i<0x900000; i++) { asm volatile ( "nop\n" ); }
30//      asm volatile (
31//"                LDMFD   SP!, {R0-R5,PC}\n"
32//      );
33//}
34
35extern void task_CaptSeq();
36extern void task_InitFileModules();
37extern void task_RotaryEncoder();
38extern void task_MovieRecord();
39extern void task_ExpDrv();
40
41void taskHook(context_t **context)
42{
43        task_t *tcb=(task_t*)((char*)context-offsetof(task_t, context));
44
45        // Replace firmware task addresses with ours
46        if(tcb->entry == (void*)task_CaptSeq)                   tcb->entry = (void*)capt_seq_task;
47        if(tcb->entry == (void*)task_InitFileModules)   tcb->entry = (void*)init_file_modules_task;
48        if(tcb->entry == (void*)task_RotaryEncoder)             tcb->entry = (void*)JogDial_task_my;
[1404]49        if(tcb->entry == (void*)task_MovieRecord)               tcb->entry = (void*)movie_record_task;
[1401]50        if(tcb->entry == (void*)task_ExpDrv)                    tcb->entry = (void*)exp_drv_task;
51}
52
53/*---------------------------------------------------------------------
54  Memory Map:
55        0001900     MEMBASEADDR             start of data - used for initialized vars
56        00108B7                             end of inited data
57        00108B8                             start of bss - used for zeroed/uninited vars
58        018124B                             end of bss
59        018124C     MEMISOSTART             start of our data / bss
60
61        0400000                             raw buffers
62        8000000                             end of raw buffers
63
64        C0xxxxxx                            I/O
65
66        FF810000    ROMBASEADDR             start of rom
67        FFFFFFFF                            end of rom
68----------------------------------------------------------------------*/
69
70/*----------------------------------------------------------------------
71        boot()
72
73        Main entry point for the CHDK code
74-----------------------------------------------------------------------*/
75
76void __attribute__((naked,noinline)) boot() {
77
78    asm volatile (
79                 "LDR     R1, =0xC0410000\n"
80                 "MOV     R0, #0\n"
81                 "STR     R0, [R1]\n"
82                 "MOV     R1, #0x78\n"
83                 "MCR     p15, 0, R1,c1,c0\n"
84                 "MOV     R1, #0\n"
85                 "MCR     p15, 0, R1,c7,c10, 4\n"
86                 "MCR     p15, 0, R1,c7,c5\n"
87                 "MCR     p15, 0, R1,c7,c6\n"
88                 "MOV     R0, #0x3D\n"
89                 "MCR     p15, 0, R0,c6,c0\n"
90                 "MOV     R0, #0xC000002F\n"
91                 "MCR     p15, 0, R0,c6,c1\n"
92                 "MOV     R0, #0x37\n"
93                 "MCR     p15, 0, R0,c6,c2\n"
94                 "MOV     R0, #0x40000037\n"
95                 "MCR     p15, 0, R0,c6,c3\n"
96                 "MOV     R0, #0x80000017\n"
97                 "MCR     p15, 0, R0,c6,c4\n"
98                 "LDR     R0, =0xFF00002F\n"
99                 "MCR     p15, 0, R0,c6,c5\n"
100                                 "LDR     R0, =0xD000002B\n"
101                                 "MCR     p15, 0, R0,c6,c7\n"
102                 "MOV     R0, #0x34\n"
103                 "MCR     p15, 0, R0,c2,c0\n"
104                 "MOV     R0, #0x34\n"
105                 "MCR     p15, 0, R0,c2,c0, 1\n"
106                 "MOV     R0, #0x34\n"
107                 "MCR     p15, 0, R0,c3,c0\n"
108                 "LDR     R0, =0x3333330\n"
109                 "MCR     p15, 0, R0,c5,c0, 2\n"
110                 "LDR     R0, =0x3333330\n"
111                 "MCR     p15, 0, R0,c5,c0, 3\n"
112                 "MRC     p15, 0, R0,c1,c0\n"
113                 "ORR     R0, R0, #0x1000\n"
114                 "ORR     R0, R0, #4\n"
115                 "ORR     R0, R0, #1\n"
116                 "MCR     p15, 0, R0,c1,c0\n"
117                 "MOV     R1, #0x80000006\n"
118                 "MCR     p15, 0, R1,c9,c1\n"
119                 "MOV     R1, #6\n"
120                 "MCR     p15, 0, R1,c9,c1, 1\n"
121                 "MRC     p15, 0, R1,c1,c0\n"
122                 "ORR     R1, R1, #0x50000\n"
123                 "MCR     p15, 0, R1,c1,c0\n"
124                 "LDR     R2, =0xC0200000\n"
125                 "MOV     R1, #1\n"
126                 "STR     R1, [R2,#0x10C]\n"
127                 "MOV     R1, #0xFF\n"
128                 "STR     R1, [R2,#0xC]\n"
129                 "STR     R1, [R2,#0x1C]\n"
130                 "STR     R1, [R2,#0x2C]\n"
131                 "STR     R1, [R2,#0x3C]\n"
132                 "STR     R1, [R2,#0x4C]\n"
133                 "STR     R1, [R2,#0x5C]\n"
134                 "STR     R1, [R2,#0x6C]\n"
135                 "STR     R1, [R2,#0x7C]\n"
136                 "STR     R1, [R2,#0x8C]\n"
137                 "STR     R1, [R2,#0x9C]\n"
138                 "STR     R1, [R2,#0xAC]\n"
139                 "STR     R1, [R2,#0xBC]\n"
140                 "STR     R1, [R2,#0xCC]\n"
141                 "STR     R1, [R2,#0xDC]\n"
142                 "STR     R1, [R2,#0xEC]\n"
143                 "STR     R1, [R2,#0xFC]\n"
144                 "LDR     R1, =0xC0400008\n"
145                 "LDR     R2, =0x430005\n"
146                 "STR     R2, [R1]\n"
147                 "MOV     R1, #1\n"
148                 "LDR     R2, =0xC0243100\n"
149                 "STR     R2, [R1]\n"
150                 "LDR     R2, =0xC0242010\n"
151                 "LDR     R1, [R2]\n"
152                 "ORR     R1, R1, #1\n"
153                 "STR     R1, [R2]\n"
154
155                 "LDR     R0, =0xFF62743C\n"
156                 "LDR     R1, =0x1900\n"
157                 "LDR     R3, =0x13718\n"
158 "loc_FF000144:\n"
159                 "CMP     R1, R3\n"
160                 "LDRCC   R2, [R0],#4\n"
161                 "STRCC   R2, [R1],#4\n"
162                 "BCC     loc_FF000144\n"
163                 "LDR     R1, =0x198C30\n"
164                 "MOV     R2, #0\n"
165 "loc_FF00015C:\n"
166                 "CMP     R3, R1\n"
167                 "STRCC   R2, [R3],#4\n"
168                 "BCC     loc_FF00015C\n"
169
170//                 "B       sub_FF000364\n"
171                 "B       sub_FF000364_my\n" // -->
172    );
173}
174
175void __attribute__((naked,noinline)) sub_FF000364_my() {
176
177        //http://chdk.setepontos.com/index.php/topic,4194.0.html
178        *(int*)0x1938=(int)taskHook;
179        *(int*)0x193C=(int)taskHook;    // need this for startup in Playback mode (otherwise init_file_modules_task doesn't hook properly)
180   
181        // replacement of sub_FF0571D4 for correct power-on.
182        *(int*)(0x2630) = (*(int*)0xC022F48C)&0x800000 ? 0x200000 : 0x100000;
183
184        asm volatile (
185                 "LDR     R0, =0xFF0003DC\n"
186                 "MOV     R1, #0\n"
187                 "LDR     R3, =0xFF000414\n"
188 "loc_FF000370:\n"
189                 "CMP     R0, R3\n"
190                 "LDRCC   R2, [R0],#4\n"
191                 "STRCC   R2, [R1],#4\n"
192                 "BCC     loc_FF000370\n"
193                 "LDR     R0, =0xFF000414\n"
194                 "MOV     R1, #0x4B0\n"
195                 "LDR     R3, =0xFF000628\n"
196 "loc_FF00038C:\n"
197                 "CMP     R0, R3\n"
198                 "LDRCC   R2, [R0],#4\n"
199                 "STRCC   R2, [R1],#4\n"
200                 "BCC     loc_FF00038C\n"
201                 "MOV     R0, #0xD2\n"
202                 "MSR     CPSR_cxsf, R0\n"
203                 "MOV     SP, #0x1000\n"
204                 "MOV     R0, #0xD3\n"
205                 "MSR     CPSR_cxsf, R0\n"
206                 "MOV     SP, #0x1000\n"
207                 "LDR     R0, =0x6C4\n"
208                 "LDR     R2, =0xEEEEEEEE\n"
209                 "MOV     R3, #0x1000\n"
210 "loc_FF0003C0:\n"
211                 "CMP     R0, R3\n"
212                 "STRCC   R2, [R0],#4\n"
213                 "BCC     loc_FF0003C0\n"
214//                 "BL      sub_FF0011BC\n"
215                 "BL      sub_FF0011BC_my\n" // -->
216     );
217}
218
219void __attribute__((naked,noinline)) sub_FF0011BC_my() {
220
221     asm volatile (
222                 "STR     LR, [SP,#-4]!\n"
223                 "SUB     SP, SP, #0x74\n"
224                 "MOV     R1, #0x74\n"
225                 "MOV     R0, SP\n"
226                 "BL      sub_FF42FD5C\n"
227                 "MOV     R0, #0x67000\n"
228                 "STR     R0, [SP,#4]\n"
229
230#if defined(OPT_CHDK_IN_EXMEM)
231               "LDR     R0, =0x198C30\n" // use original heap offset since CHDK is loaded in high memory
232#else
233               "LDR     R0, =new_sa\n"   // otherwise use patched value
234               "LDR     R0, [R0]\n"      //
235#endif
236                 "LDR     R2, =0x55D788\n"
237                 "STR     R0, [SP,#0x08]\n"
238                 "SUB     R0, R2, R0\n"
239                 "STR     R0, [SP,#0x0C]\n"
240                 "MOV     R0, #0x22\n"
241                 "STR     R0, [SP,#0x18]\n"
242                 "MOV     R0, #0x72\n"
243                 "STR     R0, [SP,#0x1C]\n"
244                 "LDR     R1, =0x565C00\n"
245                 "LDR     R0, =0x1CD\n"
246                 "STR     R1, [SP]\n"
247                 "STR     R0, [SP,#0x20]\n"
248                 "MOV     R0, #0x96\n"
249                 "STR     R2, [SP,#0x10]\n"
250                 "STR     R1, [SP,#0x14]\n"
251                 "STR     R0, [SP,#0x24]\n"
252                 "STR     R0, [SP,#0x28]\n"
253                 "MOV     R0, #0x64\n"
254                 "STR     R0, [SP,#0x2C]\n"
255                 "MOV     R0, #0\n"
256                 "STR     R0, [SP,#0x30]\n"
257                 "STR     R0, [SP,#0x34]\n"
258                 "MOV     R0, #0x10\n"
259                 "STR     R0, [SP,#0x5C]\n"
260                 "MOV     R0, #0x800\n"
261                 "STR     R0, [SP,#0x60]\n"
262                 "MOV     R0, #0xA0\n"
263                 "STR     R0, [SP,#0x64]\n"
264                 "MOV     R0, #0x280\n"
265                 "STR     R0, [SP,#0x68]\n"
266
267//"             LDR     R1, =0xFF005F38 \n"
268"               LDR     R1, =sub_FF005F38_my \n"                // patched
269
270"               B               sub_FF001258 \n"                // Continue in firmware
271     );
272}
273
274void __attribute__((naked,noinline)) sub_FF005F38_my() {
275
276        asm volatile (
277"               STMFD   SP!, {R4,LR} \n"
278"               BL      sub_FF000B34 \n"
279"               BL      sub_FF00A390 \n"                                // dmSetup
280"               CMP     R0, #0 \n"
281
282//"             ADRLT   R0, aDmsetup \n"                        // "dmSetup"
283"               LDRLT   r0, =0xFF00604C \n"
284
285"               BLLT    _err_init_task \n"
286"               BL      sub_FF005B70 \n"
287"               CMP     R0, #0 \n"
288
289//"             ADRLT   R0, aTermdriverinit \n"         // "termDriverInit"
290"               LDRLT   R0, =0xFF006054 \n"
291
292"               BLLT    _err_init_task \n"
293
294//"             ADR     R0, a_term \n"                                  // "/_term"
295"               LDR     R0, =0xFF006064 \n"
296
297"               BL      sub_FF005C58 \n"                                // termDeviceCreate
298"               CMP     R0, #0 \n"
299
300//"             ADRLT   R0, aTermdevicecrea \n"         // "termDeviceCreate"
301"               LDRLT   R0, =0xFF00606C \n"
302
303"               BLLT    _err_init_task \n"
304
305//"             ADR     R0, a_term \n"                                  // "/_term"
306"               LDR     R0, =0xFF006064 \n"
307
308"               BL      sub_FF003CB4 \n"
309"               CMP     R0, #0 \n"
310
311//"             ADRLT   R0, aStdiosetup \n"                     // "stdioSetup"
312"               LDRLT   R0, =0xFF006080 \n"
313
314"               BLLT    _err_init_task \n"
315"               BL      sub_FF009CF8 \n"
316"               CMP     R0, #0 \n"
317
318//"             ADRLT   R0, aStdlibsetup \n"            // "stdlibSetup"
319"               LDRLT   R0, =0xFF00608C \n"
320
321"               BLLT    _err_init_task \n"
322"               BL      sub_FF00169C \n"
323"               CMP     R0, #0 \n"
324
325//"             ADRLT   R0, aArmlib_setup \n"           // "armlib_setup"
326"               LDRLT   R0, =0xFF006098 \n"
327
328"               BLLT    _err_init_task \n"
329
330"               LDMFD   SP!, {R4,LR} \n"
331
332//"             B       sub_FF00FDA4 \n"                                // taskcreate_Startup
333"               B       taskcreate_Startup_my \n"               // patched
334        );
335};
336
337void __attribute__((naked,noinline)) taskcreate_Startup_my() {
338
339        asm volatile (
340                "STMFD   SP!, {R4,LR}\n"
341//              "BL      j_nullsub_207\n"
342//              "BL      sub_FF00FDB8\n"
343                "BL      sub_FF00FDB8_my\n"
344                "MOV     R0, #0\n"
345                "LDMFD   SP!, {R4,PC}\n"
346        );
347};
348
349void __attribute__((naked,noinline)) sub_FF00FDB8_my() {
350
351        asm volatile (
352                "STMFD   SP!, {R3-R7,LR}\n"
353                "MOV     R6, #0\n"
354                "BL      sub_FF02D794\n"
355                "MOVS    R7, R0\n"
356                "BNE     loc_FF00FE3C\n"
357                "BL      sub_FF0264E4\n"
358                "CMP     R0, #0\n"
359                "BEQ     loc_FF00FE3C\n"
360                "MOV     R0, #0x4C\n"
361                "BL      sub_FF02BD3C\n"
362                "RSBS    R5, R0, #1\n"
363                "MOVCC   R5, #0\n"
364                "MOV     R0, #0x4B\n"
365                "BL      sub_FF02BD3C\n"
366                "RSBS    R4, R0, #1\n"
367                "MOVCC   R4, #0\n"
368                "BL      sub_FF022B9C\n"
369                "CMP     R0, #1\n"
370                "MOVEQ   R6, #1\n"
371                "ORR     R0, R4, R5\n"
372                "ORRS    R0, R0, R6\n"
373                "BNE     loc_FF00FE5C\n"
374                "BL      sub_FF0235C8\n"
375                "LDR     R4, =0x83DC00\n"
376                "MOV     R0, #0x45\n"
377                "MOV     R1, R4\n"
378                "BL      sub_FF02BD2C\n"
379                "MOV     R0, #0x28\n"
380                "BL      sub_FF02B88C\n"
381                "MOV     R1, R4\n"
382                "MOV     R0, #0x54\n"
383                "BL      sub_FF02BD2C\n"
384"loc_FF00FE38:\n"
385                "B       loc_FF00FE38\n"
386"loc_FF00FE3C:\n"
387                "MOV     R0, #0x4B\n"
388                "BL      sub_FF02BD3C\n"
389                "RSBS    R4, R0, #1\n"
390                "MOVCC   R4, #0\n"
391                "MOV     R0, #0x4C\n"
392                "BL      sub_FF02BD3C\n"
393                "RSBS    R5, R0, #1\n"
394                "MOVCC   R5, #0\n"
395"loc_FF00FE5C:\n"
396                "MOV     R3, R6\n"
397                "MOV     R2, R7\n"
398                "MOV     R1, R5\n"
399                "MOV     R0, R4\n"
400//              "BL      sub_FF024B18\n"         // see begin of sub_FF000364_my()
401//              "BL      j_nullsub_208\n"
402                "BL      sub_FF02B6BC\n"
403                "LDR     R1, =0x5CE000\n"
404                "MOV     R0, #0\n"
405                "BL      sub_FF02BB2C\n"
406                "BL      sub_FF02B8D4\n"
407                "MOV     R3, #0\n"
408                "STR     R3, [SP]\n"
409
410//              "LDR     R3, =0xFF00FD34\n"
411                "LDR     R3, =task_Startup_my\n"        // patched
412
413                "B               sub_FF00FE94\n"        // Continue in firmware
414     );
415}
416
417void __attribute__((naked,noinline)) task_Startup_my() {
418
419        asm volatile (
420                "STMFD  SP!, {R4,LR}\n"
421                "BL             sub_FF0065E8\n" // taskcreate_ClockSave\n"
422                "BL             sub_FF025C28\n"
423                "BL             sub_FF023110\n"
424                "BL             sub_FF0234FC\n"
425//              "BL     j_nullsub_209\n"
426                "BL             sub_FF02D9C8\n"
427                "BL             sub_FF023CE4\n"
428                "BL             sub_FF022BAC\n"
429                "MOV    R0, #1\n"
430                "BL             sub_FF022F7C\n"
431//              "BL             sub_FF02D870\n" // start diskboot.bin
432                "BL             sub_FF02DB8C\n"
433                "BL             sub_FF02D9F8\n"
434                "BL             sub_FF02AE60\n"
435                "BL             sub_FF02DB90\n"
436
437                "BL             CreateTask_spytask\n" // added
438
439//              "BL             sub_FF024998\n" //taskcreate_PhySw\n"
440                "BL             taskcreatePhySw_my\n"  // we do this here rather than hook so we don't waste the original stack
441
442                "B              sub_FF00FD78\n"         // Continue in firmware
443     );
444}
445
446void __attribute__((naked,noinline)) taskcreatePhySw_my() {
447        asm volatile (
448"                STMFD   SP!, {R3-R5,LR}\n"
449"                LDR     R4, =0x1C10\n"
450"                LDR     R0, [R4,#0x4]\n"
451"                CMP     R0, #0\n"
452"                BNE     sub_FF0249CC\n"
453"                MOV     R3, #0\n"
454"                STR     R3, [SP]\n"
455"                LDR     R3, =mykbd_task\n" // task_PhySw
456//"                MOV     R2, #0x800\n"
457"                MOV     R2, #0x2000\n" // stack size for new task_PhySw so we don't have to do stack switch
458"                               B       sub_FF0249BC \n" // continue in firmware
459        );
460}
461
462/*----------------------------------------------------------------------
463        spytask
464-----------------------------------------------------------------------*/
465void spytask(long ua, long ub, long uc, long ud, long ue, long uf)
466{
467    core_spytask();
468}
469
470/*----------------------------------------------------------------------
471        CreateTask_spytask
472-----------------------------------------------------------------------*/
473void CreateTask_spytask() {
474        _CreateTask("SpyTask", 0x19, 0x2000, spytask, 0);
475}
476
477///*----------------------------------------------------------------------
478// @ FF8A3B4C
479void __attribute__((naked,noinline)) init_file_modules_task() {
480 asm volatile(
481                 "STMFD   SP!, {R4-R6,LR}\n"
482                 "BL      sub_FF0918E8\n"
483                 "LDR     R5, =0x5006\n"
484                 "MOVS    R4, R0\n"
485                 "MOVNE   R1, #0\n"
486                 "MOVNE   R0, R5\n"
487                 "BLNE    _PostLogicalEventToUI\n"
488                                 "BL      sub_FF091914\n"
489
490                 "BL      core_spytask_can_start\n"      // CHDK: Set "it's-safe-to-start" flag for spytask
491
492                                 "B           sub_FF09BBD0\n"   // Continue in firmware
493 );
494}
495
496///*----------------------------------------------------------------------
497// Pointer to stack location where jogdial task records previous and current
498// jogdial positions
499short *jog_position;
500
501// Firmware version @ ff057f64
502void __attribute__((naked,noinline)) JogDial_task_my() {
503 asm volatile(
504"                STMFD   SP!, {R4-R11,LR} \n"
505"                SUB     SP, SP, #0x1C \n"
506"                BL      sub_FF0582F8 \n"
507"                LDR     R12, =0x264C \n"
508"                LDR     R6, =0xFF434CC4 \n"
509"                MOV     R0, #0 \n"
510
511// Save pointer for kbd.c routine
512" ADD R10, SP, #0x10 \n"
513" LDR R9, =jog_position \n"
514" STR R10, [R9] \n"
515
516"                ADD     R10, SP, #0x08 \n"
517"                ADD     R9, SP, #0x0C \n"
518
519"loc_FF057F84: \n"
520"                ADD     R2, SP, #0x14 \n"
521"                MOV     R1, #0 \n"
522"                ADD     R4, R2, R0,LSL#1 \n"
523"                ADD     R3, SP, #0x10 \n"
524"                STRH    R1, [R4] \n"
525"                ADD     R4, R3, R0,LSL#1 \n"
526"                STRH    R1, [R4] \n"
527"                STR     R2, [R9,R0,LSL#2] \n"
528"                STR     R2, [R10,R0,LSL#2] \n"
529"                ADD     R0, R0, #1 \n"
530"                CMP     R0, #1 \n"
531"                BLT     loc_FF057F84 \n"
532
533"loc_FF057FB4: \n"
534"                LDR     R0, =0x264C \n"
535"                MOV     R2, #0 \n"
536"                LDR     R0, [R0,#8] \n"
537"                MOV     R1, SP \n"
538"                BL      sub_FF02B0F4 \n"
539"                CMP     R0, #0 \n"
540"                LDRNE   R1, =0x256 \n"
541"                                LDRNE   R0,=0xFF058214 \n" //aRotaryencoder_ ; "RotaryEncoder.c" \n"
542"                BLNE    _DebugAssert \n"
543"                LDR     R0, [SP] \n"
544"                AND     R4, R0, #0xFF \n"
545"                AND     R0, R0, #0xFF00 \n"
546"                CMP     R0, #0x100 \n"
547"                BEQ     loc_FF058024 \n"
548"                CMP     R0, #0x200 \n"
549"                BEQ     loc_FF05805C \n"
550"                CMP     R0, #0x300 \n"
551"                BEQ     loc_FF05825C \n"
552"                CMP     R0, #0x400 \n"
553"                BNE     loc_FF057FB4 \n"
554"                CMP     R4, #0 \n"
555"                LDRNE   R1, =0x2E1 \n"
556"                                LDRNE   R0,=0xFF058214 \n" //aRotaryencoder_ ; "RotaryEncoder.c" \n"
557"                BLNE    _DebugAssert \n"
558"                RSB     R0, R4, R4,LSL#3 \n"
559"                LDR     R0, [R6,R0,LSL#2] \n"
560
561"loc_FF05801C: \n"
562"                BL      sub_FF0582DC \n"
563"                B       loc_FF057FB4 \n"
564
565"loc_FF058024: \n"
566//------------------  added code ---------------------
567"labelA:\n"
568                "LDR     R0, =jogdial_stopped\n"
569                "LDR     R0, [R0]\n"
570                "CMP     R0, #1\n"
571                "BNE     labelB\n"
572                "MOV     R0, #40\n"
573                "BL      _SleepTask\n" //sleep
574                "B       labelA\n"
575"labelB:\n"
576//------------------  original code ------------------
577"                LDR     R0, =0x2658 \n"
578"                LDR     R0, [R0,R4,LSL#2] \n"
579"                BL      sub_FF02C318 \n"
580
581//"                ADR     R2, sub_FF057EB0 \n"
582"                LDR     R2, =0xFF057EB0 \n"
583
584"                ORR     R3, R4, #0x200 \n"
585"                MOV     R1, R2 \n"
586"                MOV     R0, #0x28 \n"
587"                BL      sub_FF02C234 \n"
588"                TST     R0, #1 \n"
589"                CMPNE   R0, #0x15 \n"
590"                STR     R0, [R10,R4,LSL#2] \n"
591"                BEQ     loc_FF057FB4 \n"
592"                MOV     R1, #0x268 \n"
593"                B       loc_FF058200 \n"
594
595"loc_FF05805C: \n"
596"                RSB     R5, R4, R4,LSL#3 \n"
597"                LDR     R0, [R6,R5,LSL#2] \n"
598"                LDR     R1, =0xC0240000 \n"
599"                ADD     R0, R1, R0,LSL#8 \n"
600"                                LDR     R0, [R0,#0x104] \n"
601"                MOV     R1, R0,ASR#16 \n"
602"                ADD     R0, SP, #0x14 \n"
603"                ADD     R11, R0, R4,LSL#1 \n"
604"                ADD     R0, SP, #0x10 \n"
605"                                ADD     R0, R0, R4,LSL#1 \n"
606"                STRH    R1, [R11] \n"
607"                STR     R0, [SP,#0x18] \n"
608"                LDRSH   R3, [R0] \n"
609"                SUB     R2, R1, R3 \n"
610"                CMP     R2, #0 \n"
611"                BNE     loc_FF0580E0 \n"
612"                LDR     R0, [R9,R4,LSL#2] \n"
613"                CMP     R0, #0 \n"
614"                BEQ     loc_FF0581BC \n"
615"                LDR     R7, =0x2658 \n"
616"                LDR     R0, [R7,R4,LSL#2] \n"
617"                BL      sub_FF02C318 \n"
618
619//"                ADR     R2, sub_FF057EBC \n"
620"                LDR     R2, =0xFF057EBC \n"
621
622"                ORR     R3, R4, #0x300 \n"
623"                MOV     R1, R2 \n"
624"                MOV     R0, #0x1F4 \n"
625"                BL      sub_FF02C234 \n"
626"                TST     R0, #1 \n"
627"                CMPNE   R0, #0x15 \n"
628"                STR     R0, [R7,R4,LSL#2] \n"
629"                BEQ     loc_FF0581BC \n"
630"                LDR     R1, =0x281 \n"
631"                B       loc_FF0581B4 \n"
632
633"loc_FF0580E0: \n"
634"                MOV     R0, R2 \n"
635"                RSBLT   R0, R0, #0 \n"
636"                MOVLE   R7, #0 \n"
637"                MOVGT   R7, #1 \n"
638"                CMP     R0, #0xFF \n"
639"                BLS     loc_FF05811C \n"
640"                                LDR     R0, =0x7FFF \n"
641"                CMP     R2, #0 \n"
642"                SUBLE   R0, R0, R3 \n"
643"                ADDLE   R0, R0, R1 \n"
644"                SUBGT   R0, R0, R1 \n"
645"                ADDGT   R0, R0, R3 \n"
646"                MOV     R1, #0xFFFF7FFF \n"
647"                SUB     R0, R0, R1 \n"
648"                EOR     R7, R7, #1 \n"
649
650"loc_FF05811C: \n"
651"                STR     R0, [SP,#0x04] \n"
652"                LDR     R0, [R9,R4,LSL#2] \n"
653"                CMP     R0, #0 \n"
654"                ADDEQ   R0, R6, R5,LSL#2 \n"
655"                LDREQ   R0, [R0,#8] \n"
656"                BEQ     loc_FF058154 \n"
657"                ADD     R8, R6, R5,LSL#2 \n"
658"                ADD     R1, R8, R7,LSL#2 \n"
659"                LDR     R1, [R1,#0x10] \n"
660"                CMP     R1, R0 \n"
661"                BEQ     loc_FF058158 \n"
662"                LDR     R0, [R8,#0xC] \n"
663"                BL      sub_FF0249F0 \n"
664"                LDR     R0, [R8,#8] \n"
665
666"loc_FF058154: \n"
667"                BL      sub_FF0249F0 \n"
668
669"loc_FF058158: \n"
670"                ADD     R0, R6, R5,LSL#2 \n"
671"                ADD     R7, R0, R7,LSL#2 \n"
672"                LDR     R0, [R7,#0x10] \n"
673"                LDR     R1, [SP,#0x04] \n"
674"                BL      sub_FF024A00 \n"
675"                LDR     R0, [R7,#0x10] \n"
676"                LDR     R7, =0x2658 \n"
677"                STR     R0, [R9,R4,LSL#2] \n"
678"                LDRH    R1, [R11] \n"
679"                LDR     R0, [SP,#0x18] \n"
680"                STRH    R1, [R0] \n"
681"                LDR     R0, [R7,R4,LSL#2] \n"
682"                BL      sub_FF02C318 \n"
683
684//"                ADR     R2, sub_FF057EBC \n"
685"                LDR     R2, =0xFF057EBC \n"
686
687"                ORR     R3, R4, #0x300 \n"
688"                MOV     R1, R2 \n"
689"                MOV     R0, #0x1F4 \n"
690"                BL      sub_FF02C234 \n"
691"                TST     R0, #1 \n"
692"                CMPNE   R0, #0x15 \n"
693"                STR     R0, [R7,R4,LSL#2] \n"
694"                BEQ     loc_FF0581BC \n"
695"                LDR     R1, =0x2C3 \n"
696
697"loc_FF0581B4: \n"
698"                                LDR     R0,=0xFF058214 \n" //aRotaryencoder_ ; "RotaryEncoder.c" \n"
699"                BL      _DebugAssert \n"
700
701"loc_FF0581BC: \n"
702"                ADD     R0, R6, R5,LSL#2 \n"
703"                LDR     R0, [R0,#0x18] \n"
704"                CMP     R0, #1 \n"
705"                BNE     loc_FF058254 \n"
706"                LDR     R0, =0x264C \n"
707"                LDR     R0, [R0,#0x10] \n"
708"                CMP     R0, #0 \n"
709"                BEQ     loc_FF058254 \n"
710
711//"                ADR     R2, sub_FF057EB0 \n"
712"                LDR     R2, =0xFF057EB0 \n"
713
714"                ORR     R3, R4, #0x400 \n"
715"                MOV     R1, R2 \n"
716"                BL      sub_FF02C234 \n"
717"                TST     R0, #1 \n"
718"                CMPNE   R0, #0x15 \n"
719"                STR     R0, [R10,R4,LSL#2] \n"
720"                BEQ     loc_FF057FB4 \n"
721"                LDR     R1, =0x2CA \n"
722
723"loc_FF058200: \n"
724"                                LDR     R0,=0xFF058214 \n" //aRotaryencoder_ ; "RotaryEncoder.c" \n"
725"                BL      _DebugAssert \n"
726"                B       loc_FF057FB4 \n"
727
728"loc_FF058254: \n"
729"                LDR     R0, [R6,R5,LSL#2] \n"
730"                B       loc_FF05801C \n"
731
732"loc_FF05825C: \n"
733"                LDR     R0, [R9,R4,LSL#2] \n"
734"                CMP     R0, #0 \n"
735"                MOVEQ   R1, #0x2D4 \n"
736"                                LDREQ   R0,=0xFF058214 \n" //aRotaryencoder_ ; "RotaryEncoder.c" \n"
737"                BLEQ    _DebugAssert \n"
738"                RSB     R0, R4, R4,LSL#3 \n"
739"                ADD     R0, R6, R0,LSL#2 \n"
740"                LDR     R0, [R0,#0xC] \n"
741"                BL      sub_FF0249F0 \n"
742"                MOV     R0, #0 \n"
743"                STR     R0, [R9,R4,LSL#2] \n"
744"                B       loc_FF057FB4 \n"
745);
746}
Note: See TracBrowser for help on using the repository browser.