source: trunk/platform/tx1/sub/100g/boot.c @ 515

Revision 515, 4.2 KB checked in by reyalp, 5 years ago (diff)

set svn:eol-style and fix files that had mixed line endings. See http://chdk.setepontos.com/index.php/topic,2145.15.html

  • Property svn:eol-style set to native
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(); // Orig. starts at FF81198C
18void __attribute__((naked,noinline)) h_usrKernelInit(); // Orig. starts at FF811744
19void __attribute__((naked,noinline)) h_usrRoot(); // Orig. starts at FF811A60
20
21
22
23void boot()
24{
25
26    long *canon_data_src = (void*)0xFFBBE510;  // 0xFF810104
27    long *canon_data_dst = (void*)0x1900;      // 0xFF810108
28    long canon_data_len = 0xCEA0;              // 0xFF8100F8
29    long *canon_bss_start = (void*)(0x1900+0xCEA0);
30    long canon_bss_len = 0xB84D0 - (long)canon_bss_start; //0xFF810134
31    long i;
32
33
34    asm volatile (
35        "MRC     p15, 0, R0,c1,c0\n"
36        "ORR     R0, R0, #0x1000\n"
37        "ORR     R0, R0, #4\n"
38        "ORR     R0, R0, #1\n"
39        "MCR     p15, 0, R0,c1,c0\n"
40    :::"r0");
41
42    for(i=0;i<canon_data_len/4;i++)
43        canon_data_dst[i]=canon_data_src[i];
44
45    for(i=0;i<canon_bss_len/4;i++)
46        canon_bss_start[i]=0;
47
48    asm volatile (
49        "MRC     p15, 0, R0,c1,c0\n"
50        "ORR     R0, R0, #0x1000\n"
51        "BIC     R0, R0, #4\n"
52        "ORR     R0, R0, #1\n"
53        "MCR     p15, 0, R0,c1,c0\n"
54    :::"r0");
55   
56    h_usrInit();
57}
58
59
60void h_usrInit()       
61{
62    asm volatile (
63        "STR     LR, [SP,#-4]!\n"
64        "BL      sub_FF811968\n"
65        "MOV     R0, #2\n"
66        "MOV     R1, R0\n"
67        "BL      sub_FF925020\n"
68        "BL      sub_FF918F9C\n"
69        "BL      sub_FF8111C4\n"       
70        "BL      sub_FF811728\n"
71        "LDR     LR, [SP],#4\n"
72        "B       h_usrKernelInit\n"
73    );
74}
75
76void  h_usrKernelInit()
77{
78    asm volatile (
79                 "STMFD   SP!, {R4,LR}\n"
80                 "SUB     SP, SP, #8\n"
81                 "BL      sub_FF925520\n"
82                 "BL      sub_FF93564C\n"
83                 "LDR     R3, =0x5720\n"
84                 "LDR     R2, =0xB4A80\n"
85                 "LDR     R1, [R3]\n"
86                 "LDR     R0, =0xB56D0\n"
87                 "MOV     R3, #0x100\n"
88                 "BL      sub_FF93123C\n"
89                 "LDR     R3, =0x56E0\n"
90                 "LDR     R0, =0x5A80\n"
91                 "LDR     R1, [R3]\n"
92                 "BL      sub_FF93123C\n"
93                 "LDR     R3, =0x579C\n"
94                 "LDR     R0, =0xB56A4\n"
95                 "LDR     R1, [R3]\n"
96                 "BL      sub_FF93123C\n"
97                 "BL      sub_FF939A08\n"
98                 "BL      sub_FF8112AC\n"
99                 "MOV     R4, #0\n"
100                 "MOV     R3, R0\n"
101                 "MOV     R12, #0x800\n"
102                 "LDR     R0, =h_usrRoot\n"
103                 "MOV     R1, #0x4000\n"
104                 "LDR     R2, =new_sa\n"
105                 "LDR     R2, [R2]\n"                   
106                 "STR     R12, [SP]\n"
107                 "STR     R4, [SP,#4]\n"
108                 "BL      sub_FF93288C\n"
109                 "ADD     SP, SP, #8\n"
110                 "LDMFD   SP!, {R4,PC}\n"
111    );
112};
113
114static long drv_struct[16];
115 
116static long dh_err()
117{
118    return -1;
119}
120
121static void drv_self_hide()
122{
123    long drvnum;
124   
125    drvnum = _iosDrvInstall(dh_err,dh_err,dh_err,dh_err,dh_err,dh_err,dh_err);
126    if (drvnum >= 0)
127        _iosDevAdd(drv_struct, "A/DISKBOOT.BIN", drvnum);
128}
129
130
131void  h_usrRoot()
132{
133    asm volatile (
134                 "STMFD   SP!, {R4,R5,LR}\n"
135                 "MOV     R5, R0\n"
136                 "MOV     R4, R1\n"
137                 "BL      sub_FF8119D0\n"
138                 "MOV     R1, R4\n"
139                 "MOV     R0, R5\n"
140                 "BL      sub_FF929FD8\n"
141                 "MOV     R1, R4\n"
142                 "MOV     R0, R5\n"
143                 "BL      sub_FF92AA50\n"
144                 "BL      sub_FF8117E8\n"
145                 "BL      sub_FF811704\n"
146                 "BL      sub_FF811A0C\n"
147                 "BL      sub_FF8119F0\n"
148                 "BL      sub_FF811A38\n"
149                 "BL      sub_FF8119C4\n"
150
151    );
152
153    _taskCreateHookAdd(createHook);
154    _taskDeleteHookAdd(deleteHook);
155
156    drv_self_hide();
157
158    asm volatile (
159                 "LDMFD   SP!, {R4,R5,LR}\n"
160                 "B       sub_FF81136C\n"
161    );
162}
163
Note: See TracBrowser for help on using the repository browser.