source: trunk/loader/s100/main.c @ 1792

Revision 1792, 1.3 KB checked in by philmoz, 15 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 
1static void __attribute__((noreturn)) shutdown();
2static void __attribute__((noreturn)) panic(int cnt);
3
4extern long *blob_chdk_core;
5extern long *blob_copy_and_reset;
6extern long blob_chdk_core_size;
7extern long blob_copy_and_reset_size;
8
9void __attribute__((noreturn)) my_restart()
10{
11    int i;
12
13    void __attribute__((noreturn)) (*copy_and_restart)(char *dst, char *src, long length);
14
15    for (i=0; i<(blob_copy_and_reset_size/sizeof(long)); i++){
16        ((long*)(RESTARTSTART))[i] = blob_copy_and_reset[i];
17    }
18
19    copy_and_restart = (void*)RESTARTSTART;
20
21    copy_and_restart((void*)MEMISOSTART, (char*)blob_chdk_core, blob_chdk_core_size);
22}
23
24#define LED_PR 0xC022C30C
25
26static void __attribute__((noreturn)) shutdown()
27{
28    volatile long *p = (void*)LED_PR;
29       
30    asm(
31         "MRS     R1, CPSR\n"
32         "AND     R0, R1, #0x80\n"
33         "ORR     R1, R1, #0x80\n"
34         "MSR     CPSR_cf, R1\n"
35         :::"r1","r0");
36       
37    *p = *p & 0xFFFFFFCF;  // led off.
38
39    while(1);
40}
41
42static void __attribute__((noreturn)) panic(int cnt)
43{
44
45        volatile long *p=(void*)LED_PR;
46        int i;
47
48        for(;cnt>0;cnt--){
49                *p = (*p & 0xFFFFFFCF) | 0x20; // Turn on LED
50
51                for(i=0;i<0x200000;i++){
52                        asm ("nop\n");
53                        asm ("nop\n");
54                }
55                *p = (*p & 0xFFFFFFCF);          // Turn off LED
56                for(i=0;i<0x200000;i++){
57                        asm ("nop\n");
58                        asm ("nop\n");
59                }
60        }
61        shutdown();
62}
Note: See TracBrowser for help on using the repository browser.