This source file includes following definitions.
- h_kbd_p2_f
- _platformsub_kbd_fetch_data_my
- boot
- h_usrInit
- h_usrKernelInit
- h_usrRoot
1 #include "lolevel.h"
2 #include "platform.h"
3 #include "core.h"
4
5 const char * const new_sa = &_end;
6
7
8 extern long wrs_kernel_bss_start;
9 extern long wrs_kernel_bss_end;
10 extern void createHook (void *pNewTcb);
11 extern void deleteHook (void *pTcb);
12
13 void boot();
14
15
16 void __attribute__((naked,noinline)) h_usrInit();
17 void __attribute__((naked,noinline)) h_usrKernelInit();
18 void __attribute__((naked,noinline)) h_usrRoot();
19
20 extern void mykbd_task_proceed_2();
21
22 void __attribute__((naked,noinline)) h_kbd_p2_f()
23 {
24 asm volatile (
25 "LDR R4, =0xFB10\n"
26 "LDR R2, [R4,#0x38]\n"
27 "TST R2, #0x8000\n"
28 "BEQ loc_FF828F1C\n"
29 "MOV R2, #0x8000\n"
30 "MOV R0, #0x2F\n"
31 "MOV R1, #2\n"
32 "BL sub_FF8294CC\n"
33 "LDR R3, [R4,#0x38]\n"
34 "BIC R3, R3, #0x8000\n"
35 "STR R3, [R4,#0x38]\n"
36 "MOV R2, R3\n"
37 "loc_FF828F1C:\n"
38 "TST R2, #2\n"
39 "BEQ loc_FF828F44\n"
40 "MOV R1, #2\n"
41 "MOV R2, R1\n"
42 "MOV R0, #0x21\n"
43 "BL sub_FF8294CC\n"
44 "LDR R3, [R4,#0x38]\n"
45 "BIC R3, R3, #2\n"
46 "STR R3, [R4,#0x38]\n"
47 "MOV R2, R3\n"
48 "loc_FF828F44:\n"
49 "TST R2, #4\n"
50 "BEQ loc_FF828F6C\n"
51 "MOV R2, #4\n"
52 "MOV R0, #0x22\n"
53 "MOV R1, #2\n"
54 "BL sub_FF8294CC\n"
55 "LDR R3, [R4,#0x38]\n"
56 "BIC R3, R3, #4\n"
57 "STR R3, [R4,#0x38]\n"
58 "MOV R2, R3\n"
59 "loc_FF828F6C:\n"
60 "ADD R1, R4, #0x30\n"
61 "LDMIA R1, {R1,R3}\n"
62 "ADD R3, R1, R3\n"
63 "CMN R3, R2\n"
64 "BEQ loc_FF828F84\n"
65 "BL sub_FF82952C\n"
66 "loc_FF828F84:\n"
67 "LDR R3, =0x1FCC\n"
68 "LDR R1, [R3]\n"
69 "CMP R1, #1\n"
70 "BNE loc_FF828FA0\n"
71 "MOV R0, #0\n"
72 "MOV R2, R1\n"
73 "BL sub_FF8294CC\n"
74 "loc_FF828FA0:\n"
75 "BL sub_FF829C08\n"
76 "B mykbd_task_proceed_2\n"
77 );
78 }
79
80 void __attribute__((naked,noinline)) _platformsub_kbd_fetch_data_my(){
81 asm volatile (
82 "STMFD SP!, {R4-R11,LR}\n"
83 "MOV LR, #0x220000\n"
84 "ORR R3, LR, #0x204\n"
85 "LDR R1, =0xFBE4\n"
86 "ORR R3, R3, #0xC0000000\n"
87
88
89
90 "MOV R2, R0\n"
91 "LDR R0, [R3]\n"
92 "STMFD SP!, {R1-R11}\n"
93 "BL usb_power_status_override\n"
94 "LDMFD SP!, {R1-R11}\n"
95 "MOV R9, R0\n"
96 "MOV R0, R2\n"
97 "MOV LR, #0x220000\n"
98
99
100
101 "LDR R6, [R1]\n"
102 "LDR R4, =0xFB78\n"
103 "LDR R1, [R0,#0x1C]\n"
104 "MOV R10, R6,LSL#2\n"
105 "AND R1, R9, R1\n"
106 "ADD R12, R4, #0x20\n"
107 "SUB R8, R6, #1\n"
108 "SUB R7, R6, #2\n"
109 "STR R1, [R12,R10]\n"
110 "AND R8, R8, #7\n"
111 "AND R7, R7, #7\n"
112 "MOV R8, R8,LSL#2\n"
113 "MOV R7, R7,LSL#2\n"
114 "LDR R2, =0xFBD8\n"
115 "LDR R5, [R12,R7]\n"
116 "LDR R12, [R12,R8]\n"
117 "LDR R3, [R2,#4]\n"
118 "EOR R11, R1, R12\n"
119 "EOR R12, R1, R5\n"
120 "ORR R12, R11, R12\n"
121 "EOR R2, R3, R1\n"
122 "STR R1, [R0,#0x10]\n"
123 "BIC R2, R2, R12\n"
124 "LDR R1, =0xFBD8\n"
125 "EOR R3, R3, R2\n"
126 "STR R3, [R1,#4]\n"
127 "STR R2, [R0,#0x34]\n"
128 "STR R9, [R0,#0x58]\n"
129 "ORR R3, LR, #0x208\n"
130 "ORR R3, R3, #0xC0000000\n"
131 "LDR R1, [R3]\n"
132
133 "MOV R2, R0\n"
134 "MOV R0, R1\n"
135 "STMFD SP!, {R1-R11}\n"
136 "BL my_kbd_read_keys\n"
137 "LDMFD SP!, {R1-R11}\n"
138 "MOV R1,R0\n"
139 "MOV R0,R2\n"
140 "MOV LR, #0x220000\n"
141
142 "MOV R2, #0xFF00\n"
143 "ADD R2, R2, #0xFF\n"
144 "ADD R4, R4, #0x40\n"
145 "AND R2, R1, R2\n"
146 "STR R2, [R4,R10]\n"
147 "ADD LR, LR, #0x3000\n"
148 "STR R1, [R0,#0x5C]\n"
149 "ADD R1, LR, #0xC000001C\n"
150 "LDR R3, [R1]\n"
151 "AND R3, R3, #1\n"
152 "ORR R2, R2, R3,LSL#16\n"
153 "STR R2, [R4,R10]\n"
154 "ADD LR, LR, #0xC0000024\n"
155 "LDR R3, [LR]\n"
156 "LDR R1, [R0,#0x20]\n"
157
158
159 "AND R3, R3, #0\n"
160
161 "ORR R2, R2, R3,LSL#17\n"
162 "AND R2, R2, R1\n"
163 "STR R2, [R4,R10]\n"
164 "LDR R3, [R4,R8]\n"
165 "LDR LR, [R4,R7]\n"
166 "LDR R4, =0xFBD8\n"
167 "LDR R1, [R4,#8]\n"
168 "EOR R11, R2, R3\n"
169 "EOR R12, R2, LR\n"
170 "EOR R3, R1, R2\n"
171 "ORR R12, R11, R12\n"
172 "BIC R3, R3, R12\n"
173 "EOR R1, R1, R3\n"
174 "ADD R6, R6, #1\n"
175 "STR R2, [R0,#0x14]\n"
176 "STR R1, [R4,#8]\n"
177 "LDR R1, =0xFBE4\n"
178 "AND R6, R6, #7\n"
179 "STR R6, [R1]\n"
180 "STR R3, [R0,#0x38]\n"
181 "LDMFD SP!, {R4-R11,PC}\n"
182 );
183 }
184
185
186 void boot()
187 {
188 long *canon_data_src = (void*)0xFFACEA10;
189 long *canon_data_dst = (void*)0x1900;
190 long canon_data_len = 0xD340;
191 long *canon_bss_start = (void*)0xEC40;
192 long canon_bss_len = 0x7C2B0 - 0xEC40;
193 long i;
194
195 asm volatile (
196 "MRC p15, 0, R0,c1,c0\n"
197 "ORR R0, R0, #0x1000\n"
198 "ORR R0, R0, #4\n"
199 "ORR R0, R0, #1\n"
200 "MCR p15, 0, R0,c1,c0\n"
201 :::"r0");
202
203
204 for(i=0;i<canon_data_len/4;i++)
205 canon_data_dst[i]=canon_data_src[i];
206
207 for(i=0;i<canon_bss_len/4;i++)
208 canon_bss_start[i]=0;
209
210 asm volatile (
211 "MRC p15, 0, R0,c1,c0\n"
212 "ORR R0, R0, #0x1000\n"
213 "BIC R0, R0, #4\n"
214 "ORR R0, R0, #1\n"
215 "MCR p15, 0, R0,c1,c0\n"
216 :::"r0");
217
218 h_usrInit();
219 }
220
221
222 void h_usrInit()
223 {
224 asm volatile (
225 "STR LR, [SP,#-4]!\n"
226 "BL sub_FF811A40\n"
227 "MOV R0, #2\n"
228 "MOV R1, R0\n"
229 "BL sub_FFAB514C\n"
230 "BL sub_FFAA1824\n"
231 "BL sub_FF811298\n"
232 "BL sub_FF811800\n"
233 "LDR LR, [SP],#4\n"
234 "B h_usrKernelInit\n"
235 );
236 }
237
238 void h_usrKernelInit()
239 {
240 asm volatile (
241 "STMFD SP!, {R4,LR}\n"
242 "SUB SP, SP, #8\n"
243 "BL sub_FFAB564C\n"
244 "BL sub_FFAC7E58\n"
245 "LDR R3, =0xE07C\n"
246 "LDR R2, =0x78500\n"
247 "LDR R1, [R3]\n"
248 "LDR R0, =0x7BC70\n"
249 "MOV R3, #0x100\n"
250 "BL sub_FFAC3788\n"
251 "LDR R3, =0xE03C\n"
252 "LDR R0, =0xE45C\n"
253 "LDR R1, [R3]\n"
254 "BL sub_FFAC3788\n"
255 "LDR R3, =0xE0F8\n"
256 "LDR R0, =0x7BC44\n"
257 "LDR R1, [R3]\n"
258 "BL sub_FFAC3788\n"
259 "BL sub_FFACC9D8\n"
260 "BL sub_FF811384\n"
261 "MOV R4, #0\n"
262 "MOV R3, R0\n"
263 "MOV R12, #0x800\n"
264 "LDR R0, =h_usrRoot\n"
265 "MOV R1, #0x4000\n"
266 );
267
268 asm volatile (
269 "LDR R2, =new_sa\n"
270 "LDR R2, [R2]\n"
271 );
272 asm volatile (
273 "STR R12, [SP]\n"
274 "STR R4, [SP,#4]\n"
275 "BL sub_FFAC5098\n"
276 "ADD SP, SP, #8\n"
277 "LDMFD SP!, {R4,PC}\n"
278 );
279 }
280
281
282
283 void h_usrRoot()
284 {
285 asm volatile (
286 "STMFD SP!, {R4,R5,LR}\n"
287 "MOV R5, R0\n"
288 "MOV R4, R1\n"
289 "BL sub_FF811AA8\n"
290 "MOV R1, R4\n"
291 "MOV R0, R5\n"
292 "BL sub_FFABB7C8\n"
293 "MOV R1, R4\n"
294 "MOV R0, R5\n"
295 "BL sub_FFABC240\n"
296 "BL sub_FF8118C0\n"
297 "BL sub_FF8117DC\n"
298 "MOV R0, #0x32\n"
299 "BL sub_FFABE1E4\n"
300 "BL sub_FF811AEC\n"
301 "BL sub_FF811ACC\n"
302 "BL sub_FF811B18\n"
303 "BL sub_FFABDAA4\n"
304 "BL sub_FF811A9C\n"
305 );
306
307 _taskCreateHookAdd(createHook);
308 _taskDeleteHookAdd(deleteHook);
309
310 drv_self_hide();
311
312 asm volatile (
313 "LDMFD SP!, {R4,R5,LR}\n"
314 "B sub_FF811444\n"
315 );
316 }
317