source: trunk/platform/a620/sub/100f/boot.c @ 312

Revision 312, 3.3 KB checked in by GrAnd, 5 years ago (diff)

+ Added ixus850 (sd800)
+ Added adjustable zoom scale (for converters). [stevetm2] http://chdk.setepontos.com/index.php/topic,667.0.html

  • Modified 'platform/.../boot.c' to use MEMISOSIZE from 'makefile.inc'
Line 
1#include "lolevel.h"
2#include "platform.h"
3#include "core.h"
4
5const long new_sa = MEMISOSTART + MEMISOSIZE;
6
7/* Ours stuff */
8extern long wrs_kernel_bss_start;
9extern long wrs_kernel_bss_end;
10extern void createHook (void *pNewTcb);
11extern void deleteHook (void *pTcb);
12
13
14void boot();
15
16/* "relocated" functions */
17void __attribute__((naked,noinline)) h_usrInit();
18void __attribute__((naked,noinline)) h_usrKernelInit();
19void __attribute__((naked,noinline)) h_usrRoot();
20
21
22
23void boot()
24{
25    long *canon_data_src = (void*)0xFFEDA440;
26    long *canon_data_dst = (void*)0x1900;
27    long canon_data_len = 0xea30;
28    long *canon_bss_start = (void*)0x10330; // just after data
29    long canon_bss_len = 0x9F990 - 0x10330;
30    long i;
31
32    asm volatile (
33        "MRC     p15, 0, R0,c1,c0\n"
34        "ORR     R0, R0, #0x1000\n"
35        "ORR     R0, R0, #4\n"
36        "ORR     R0, R0, #1\n"
37        "MCR     p15, 0, R0,c1,c0\n"
38    :::"r0");
39
40    for(i=0;i<canon_data_len/4;i++)
41        canon_data_dst[i]=canon_data_src[i];
42
43    for(i=0;i<canon_bss_len/4;i++)
44        canon_bss_start[i]=0;
45
46    asm volatile (
47        "MRC     p15, 0, R0,c1,c0\n"
48        "ORR     R0, R0, #0x1000\n"
49        "BIC     R0, R0, #4\n"
50        "ORR     R0, R0, #1\n"
51        "MCR     p15, 0, R0,c1,c0\n"
52    :::"r0");
53
54    h_usrInit();
55}
56
57
58void h_usrInit()
59{
60    asm volatile (
61        "STR     LR, [SP,#-4]!\n"
62        "BL      sub_FFC019BC\n"
63        "MOV     R0, #2\n"
64        "MOV     R1, R0\n"
65        "BL      sub_FFEBE0A0\n"
66        "BL      sub_FFEAA778\n"
67        "BL      sub_FFC01218\n"
68        "BL      sub_FFC0177C\n"
69        "LDR     LR, [SP],#4\n"
70        "B       h_usrKernelInit\n"
71    );
72}
73
74void  h_usrKernelInit()
75{
76    asm volatile (
77        "STMFD   SP!, {R4,LR}\n"
78        "SUB     SP, SP, #8\n"
79        "BL      sub_FFEBE5A0\n"
80        "BL      sub_FFED388C\n"
81        "LDR     R3, =0xF2C4\n"
82        "LDR     R2, =0x9C020\n"
83        "LDR     R1, [R3]\n"
84        "LDR     R0, =0x9F350\n"
85        "MOV     R3, #0x100\n"
86        "BL      sub_FFECC6DC\n"
87        "LDR     R3, =0xF284\n"
88        "LDR     R0, =0xFB4C\n"
89        "LDR     R1, [R3]\n"
90        "BL      sub_FFECC6DC\n"
91        "LDR     R3, =0xF340\n"
92        "LDR     R0, =0x9F324\n"
93        "LDR     R1, [R3]\n"
94        "BL      sub_FFECC6DC\n"
95        "BL      sub_FFED840C\n"
96        "BL      sub_FFC01304\n"
97        "MOV     R4, #0\n"
98        "MOV     R3, R0\n"
99        "MOV     R12, #0x800\n"
100        "LDR     R0, =h_usrRoot\n"
101        "MOV     R1, #0x4000\n"
102    );   
103//      "LDR     R2, =0xCF990\n"        // 0x9F990 + 0x30000
104    asm volatile (
105        "LDR     R2, =new_sa\n"
106        "LDR     R2, [R2]\n"
107    );
108    asm volatile (
109        "STR     R12, [SP]\n"
110        "STR     R4, [SP,#4]\n"
111        "BL      sub_FFED0ACC\n"
112        "ADD     SP, SP, #8\n"
113        "LDMFD   SP!, {R4,PC}\n"
114    );
115}
116
117static long drv_struct[16];
118 
119static long dh_err()
120{
121    return -1;
122}
123
124static void drv_self_hide()
125{
126    long drvnum;
127   
128    drvnum = _iosDrvInstall(dh_err,dh_err,dh_err,dh_err,dh_err,dh_err,dh_err);
129    if (drvnum >= 0)
130        _iosDevAdd(drv_struct, "A/DISKBOOT.BIN", drvnum);
131}
132
133
134void  h_usrRoot()
135{
136    asm volatile (
137        "STMFD   SP!, {R4,R5,LR}\n"
138        "MOV     R5, R0\n"
139        "MOV     R4, R1\n"
140        "BL      sub_FFC01A24\n"
141        "MOV     R1, R4\n"
142        "MOV     R0, R5\n"
143        "BL      sub_FFEC471C\n"
144        "MOV     R1, R4\n"
145        "MOV     R0, R5\n"
146        "BL      sub_FFEC5194\n"
147        "BL      sub_FFC01758\n"
148        "MOV     R0, #0x32\n"
149        "BL      sub_FFEC7138\n"
150        "BL      sub_FFC01A68\n"
151        "BL      sub_FFC01A48\n"
152        "BL      sub_FFC01A94\n"
153        "BL      sub_FFEC69F8\n"
154        "BL      sub_FFC01A18\n"
155    );
156
157    _taskCreateHookAdd(createHook);
158    _taskDeleteHookAdd(deleteHook);
159
160    drv_self_hide();
161
162    asm volatile (
163        "LDMFD   SP!, {R4,R5,LR}\n"
164        "B       sub_FFC013C0\n"
165    );
166}
167
Note: See TracBrowser for help on using the repository browser.