source: branches/release-1_0/loader/a3300/resetcode/main.c @ 1551

Revision 1551, 3.0 KB checked in by philmoz, 17 months ago (diff)

Add A3300 firmware 1.00a (from mk11174 and waterwingz)
http://chdk.setepontos.com/index.php?topic=650.msg79808#msg79808

  • Property svn:eol-style set to native
Line 
1
2/*
3 * Operating system has died. Known functions will be killed
4 * after memmove.
5 *
6 * Make sure stack is not used.
7 */
8
9
10void __attribute__((noreturn)) copy_and_restart(void *dst_void, const void *src_void, long length) {
11
12       
13        {
14                char *dst = dst_void;
15                const char *src = src_void;
16
17                if (src < dst && dst < src + length)
18                {
19                        /* Have to copy backwards */
20                        src += length;
21                        dst += length;
22                        while (length--)
23                        {
24                                *--dst = *--src;
25                        }
26                }
27                else
28                {
29                        while (length--)
30                        {
31                                *dst++ = *src++;
32                        }
33                }
34        }
35       
36//SX230 found at FF02D3D8
37        asm volatile (
38                        //SX220 found at FF02D058
39               //  "MRS     R0, CPSR\n"            //SX220 not present in dump
40               //  "BIC     R0, R0, #0x3F\n"
41               //  "ORR     R0, R0, #0xD3\n"
42               //  "MSR     CPSR, R0\n"
43                 "LDR     R1, =0xC0200000\n"
44                 "MVN     R0, #0\n"
45                 "STR     R0, [R1,#0x10C]\n"
46                 "STR     R0, [R1,#0xC]\n"
47                 "STR     R0, [R1,#0x1C]\n"
48                 "STR     R0, [R1,#0x2C]\n"
49                 "STR     R0, [R1,#0x3C]\n"
50                 "STR     R0, [R1,#0x4C]\n"
51                 "STR     R0, [R1,#0x5C]\n"
52                 "STR     R0, [R1,#0x6C]\n"
53                 "STR     R0, [R1,#0x7C]\n"
54                 "STR     R0, [R1,#0x8C]\n"
55                 "STR     R0, [R1,#0x9C]\n"
56                 "STR     R0, [R1,#0xAC]\n"
57                 "STR     R0, [R1,#0xBC]\n"
58                 "STR     R0, [R1,#0xCC]\n"
59                 "STR     R0, [R1,#0xDC]\n"
60                 "STR     R0, [R1,#0xEC]\n"
61                 "CMP     R4, #7\n"
62                 "STR     R0, [R1,#0xFC]\n"
63                 "LDMEQFD SP!, {R4,PC}\n"
64                 "MOV     R0, #0x78\n"
65                 "MCR     p15, 0, R0,c1,c0\n"
66                 "MOV     R0, #0\n"
67                 "MCR     p15, 0, R0,c7,c10, 4\n"
68                 "MCR     p15, 0, R0,c7,c5\n"
69                 "MCR     p15, 0, R0,c7,c6\n"
70                 "MOV     R0, #0x80000006\n"
71                 "MCR     p15, 0, R0,c9,c1\n"
72                 "MCR     p15, 0, R0,c9,c1, 1\n"
73                 "MRC     p15, 0, R0,c1,c0\n"
74                 "ORR     R0, R0, #0x50000\n"
75                 "MCR     p15, 0, R0,c1,c0\n"
76                 "LDR     R0, =0x12345678\n"
77                 "MOV     R1, #0x80000000\n"
78                 "STR     R0, [R1,#0xFFC]\n"
79           //    "LDR     R0, =0xFF000000\n"            //SX220 was disabled previously
80                 "MOV     R0, %0\n"              // new jump-vector
81                 "LDMFD   SP!, {R4,LR}\n"
82                 "BX      R0\n"
83                 : : "r"(dst_void) : "memory","r0","r1","r2","r3","r4"
84            );
85       
86        while(1);
87}
Note: See TracBrowser for help on using the repository browser.