source: trunk/platform/g1x/sub/100f/boot.c @ 1810

Revision 1810, 23.5 KB checked in by philmoz, 13 months ago (diff)

Alpha version of CHDK for the G1X firmware 1.00f.

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