tweaks from 2008 (gpsp09-2xb_3)
[gpsp.git] / gp2x / cpu_speed.c
CommitLineData
2823a4c8 1
2/* CPU/LCD/RAM-Tuner for GP2X Version 2.0
3 Copyright (C) 2006 god_at_hell
4 original CPU-Overclocker (c) by Hermes/PS2Reality
5 the gamma-routine was provided by theoddbot
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
21*/
22
23#include <stdio.h>
24#include <stdlib.h>
25#include <string.h>
26#include <sys/types.h>
27#include <sys/stat.h>
28#include <sys/mman.h>
29#include <fcntl.h>
30#include <math.h>
31#include <time.h>
32#include <unistd.h>
33
34#include "display.h"
35#include "cpuctrl.h"
36#include "gp2xminilib.h"
37#include "speedtest.h"
38#include "cmdline.h"
39#include "daemon.h"
40
41int cpuspeed_exit = 0;
42
43unsigned COLORFONDO=0xB00000; // background-color
44unsigned WHITE=0xFFFFFF;
45unsigned TEXTBACK=0x0000B0;
46
47unsigned gp2x_nKeys=0;
48int oldtime=0;
49char pageshift;
50short menupoint;
51unsigned char cad[256];
52short cpusettings[2],dispsettings[3],ramsettings[10];
53extern int daemonsettings[8];
54extern unsigned MDIV,PDIV,SCALE;
55
56void cleardisp()
57{
58 ClearScreen(COLORFONDO);
59 sprintf(cad,"gpSP2X v0.9008 with CPU_SPEED");
60 v_putcad(1,1,WHITE,COLORFONDO,cad);
61 v_putcad(28,5,WHITE,COLORFONDO,"Item Help");
62 v_putcad(2,26,WHITE,COLORFONDO,"Start:Quit Stick:UP/DOWN");
63
64 DrawBox(WHITE);
65}
66
67void itemhelp(char item[])
68{
69 if(strcmp(item, "menu") == 0)
70 {
71 v_putcad(26,8,0xffffff,COLORFONDO,"Enter submenu");
72 v_putcad(26,9,0xffffff,COLORFONDO,"with B.");
73 }
74 if(strcmp(item, "cpuclk") == 0)
75 {
76 v_putcad(26,8,0xffffff,COLORFONDO,"Choose a");
77 v_putcad(26,9,0xffffff,COLORFONDO,"clockspeed");
78 v_putcad(26,10,0xffffff,COLORFONDO,"with R/L or");
79 v_putcad(26,11,0xffffff,COLORFONDO,"Vol UP/Down.");
80 v_putcad(26,13,0xffffff,COLORFONDO,"Valid speeds");
81 v_putcad(26,14,0xffffff,COLORFONDO,"are:");
82 v_putcad(26,15,0xffffff,COLORFONDO,"33 to 340Mhz");
83 }
84 if(strcmp(item, "cpudiv") == 0)
85 {
86 v_putcad(26,8,0xffffff,COLORFONDO,"Choose with");
87 v_putcad(26,9,0xffffff,COLORFONDO,"R/L.");
88 v_putcad(26,11,0xffffff,COLORFONDO,"The CPU-clock");
89 v_putcad(26,12,0xffffff,COLORFONDO,"will be");
90 v_putcad(26,13,0xffffff,COLORFONDO,"divided by");
91 v_putcad(26,14,0xffffff,COLORFONDO,"this value.");
92 v_putcad(26,16,0xffffff,COLORFONDO,"Valid values");
93 v_putcad(26,17,0xffffff,COLORFONDO,"are from");
94 v_putcad(26,18,0xffffff,COLORFONDO,"1 to 8");
95 }
96 if(strcmp(item, "test") == 0)
97 {
98 v_putcad(26,8,0xffffff,COLORFONDO,"Change with");
99 v_putcad(26,9,0xffffff,COLORFONDO,"R/L.");
100 v_putcad(26,11,0xffffff,COLORFONDO,"The test");
101 v_putcad(26,12,0xffffff,COLORFONDO,"checks how");
102 v_putcad(26,13,0xffffff,COLORFONDO,"high you can");
103 v_putcad(26,14,0xffffff,COLORFONDO,"clock the");
104 v_putcad(26,15,0xffffff,COLORFONDO,"CPU.");
105 v_putcad(26,17,0xffffff,COLORFONDO,"Check the");
106 v_putcad(26,18,0xffffff,COLORFONDO,"Readme for");
107 v_putcad(26,19,0xffffff,COLORFONDO,"more infos.");
108 }
109 if(strcmp(item, "gotest") == 0)
110 {
111 v_putcad(26,8,0xffffff,COLORFONDO,"Start the");
112 v_putcad(26,9,0xffffff,COLORFONDO,"test with B.");
113 }
114 if(strcmp(item, "clockgen") == 0)
115 {
116 v_putcad(26,8,0xffffff,COLORFONDO,"Change the");
117 v_putcad(26,9,0xffffff,COLORFONDO,"clockgen with");
118 v_putcad(26,10,0xffffff,COLORFONDO,"R/L.");
119 v_putcad(26,12,0xffffff,COLORFONDO,"FPLL is for");
120 v_putcad(26,13,0xffffff,COLORFONDO,"FW 1.0");
121 v_putcad(26,14,0xffffff,COLORFONDO,"UPLL for the");
122 v_putcad(26,15,0xffffff,COLORFONDO,"rest.");
123 }
124 if(strcmp(item, "timing") == 0)
125 {
126 v_putcad(26,8,0xffffff,COLORFONDO,"Choose the");
127 v_putcad(26,9,0xffffff,COLORFONDO,"LCD-Timing");
128 v_putcad(26,10,0xffffff,COLORFONDO,"with R/L.");
129 v_putcad(26,12,0xffffff,COLORFONDO,"Valid are");
130 v_putcad(26,13,0xffffff,COLORFONDO,"values from");
131 v_putcad(26,14,0xffffff,COLORFONDO,"-20 to 36");
132 v_putcad(26,15,0xffffff,COLORFONDO,"for FPLL");
133 v_putcad(26,16,0xffffff,COLORFONDO,"and -6 to 10");
134 v_putcad(26,17,0xffffff,COLORFONDO,"for UPLL");
135 }
136 if(strcmp(item, "gamma") == 0)
137 {
138 v_putcad(26,8,0xffffff,COLORFONDO,"Change gamma");
139 v_putcad(26,9,0xffffff,COLORFONDO,"with R/L or");
140 v_putcad(26,10,0xffffff,COLORFONDO,"Vol UP/DOWN");
141 v_putcad(26,12,0xffffff,COLORFONDO,"Valid are");
142 v_putcad(26,13,0xffffff,COLORFONDO,"values from");
143 v_putcad(26,14,0xffffff,COLORFONDO,"0.01 to 10.00");
144 }
145 if(strcmp(item, "CAS") == 0)
146 {
147 v_putcad(26,8,0xffffff,COLORFONDO,"Choose the");
148 v_putcad(26,9,0xffffff,COLORFONDO,"CAS Latency");
149 v_putcad(26,10,0xffffff,COLORFONDO,"with R/L");
150 v_putcad(26,12,0xffffff,COLORFONDO,"Valid are");
151 v_putcad(26,13,0xffffff,COLORFONDO,"2 or 3 cycles");
152 v_putcad(26,15,0xffffff,COLORFONDO,"Delay between");
153 v_putcad(26,16,0xffffff,COLORFONDO,"registration");
154 v_putcad(26,17,0xffffff,COLORFONDO,"of a READ");
155 v_putcad(26,18,0xffffff,COLORFONDO,"command and");
156 v_putcad(26,19,0xffffff,COLORFONDO,"outputdata.");
157 v_putcad(27,21,0x0000DD,COLORFONDO,"!INSTABLE!");
158 }
159 if(strcmp(item, "tRC") == 0)
160 {
161 v_putcad(26,8,0xffffff,COLORFONDO,"Change with");
162 v_putcad(26,9,0xffffff,COLORFONDO,"R/L.");
163 v_putcad(26,11,0xffffff,COLORFONDO,"Valid are");
164 v_putcad(26,12,0xffffff,COLORFONDO,"1 to 16");
165 v_putcad(26,13,0xffffff,COLORFONDO,"cycles.");
166 v_putcad(26,15,0xffffff,COLORFONDO,"ACTIVE to");
167 v_putcad(26,16,0xffffff,COLORFONDO,"ACTIVE/");
168 v_putcad(26,17,0xffffff,COLORFONDO,"AUTOREFRESH");
169 v_putcad(26,18,0xffffff,COLORFONDO,"command");
170 v_putcad(26,19,0xffffff,COLORFONDO,"period delay.");
171 }
172 if(strcmp(item, "tRAS") == 0)
173 {
174 v_putcad(26,8,0xffffff,COLORFONDO,"Change with");
175 v_putcad(26,9,0xffffff,COLORFONDO,"R/L.");
176 v_putcad(26,11,0xffffff,COLORFONDO,"Valid are");
177 v_putcad(26,12,0xffffff,COLORFONDO,"1 to 16");
178 v_putcad(26,13,0xffffff,COLORFONDO,"cycles.");
179 v_putcad(26,15,0xffffff,COLORFONDO,"Delay between");
180 v_putcad(26,16,0xffffff,COLORFONDO,"the ACTIVE");
181 v_putcad(26,17,0xffffff,COLORFONDO,"and PRECHARGE");
182 v_putcad(26,18,0xffffff,COLORFONDO,"commands.");
183 }
184 if(strcmp(item, "tWR") == 0)
185 {
186 v_putcad(26,8,0xffffff,COLORFONDO,"Change with");
187 v_putcad(26,9,0xffffff,COLORFONDO,"R/L.");
188 v_putcad(26,11,0xffffff,COLORFONDO,"Valid are");
189 v_putcad(26,12,0xffffff,COLORFONDO,"1 to 16");
190 v_putcad(26,13,0xffffff,COLORFONDO,"cycles.");
191 v_putcad(26,15,0xffffff,COLORFONDO,"Write");
192 v_putcad(26,16,0xffffff,COLORFONDO,"recovery time");
193 v_putcad(26,17,0xffffff,COLORFONDO,"in cycles.");
194 }
195 if(strcmp(item, "tMRD") == 0)
196 {
197 v_putcad(26,8,0xffffff,COLORFONDO,"Change with");
198 v_putcad(26,9,0xffffff,COLORFONDO,"R/L.");
199 v_putcad(26,11,0xffffff,COLORFONDO,"Valid are");
200 v_putcad(26,12,0xffffff,COLORFONDO,"1 to 16");
201 v_putcad(26,13,0xffffff,COLORFONDO,"cycles.");
202 v_putcad(26,15,0xffffff,COLORFONDO,"LOAD MODE");
203 v_putcad(26,16,0xffffff,COLORFONDO,"REGISTER");
204 v_putcad(26,17,0xffffff,COLORFONDO,"command cycle");
205 v_putcad(26,18,0xffffff,COLORFONDO,"time.");
206 }
207 if(strcmp(item, "tRFC") == 0)
208 {
209 v_putcad(26,8,0xffffff,COLORFONDO,"Change with");
210 v_putcad(26,9,0xffffff,COLORFONDO,"R/L.");
211 v_putcad(26,11,0xffffff,COLORFONDO,"Valid are");
212 v_putcad(26,12,0xffffff,COLORFONDO,"1 to 16");
213 v_putcad(26,13,0xffffff,COLORFONDO,"cycles.");
214 v_putcad(26,15,0xffffff,COLORFONDO,"AUTOREFRESH");
215 v_putcad(26,16,0xffffff,COLORFONDO,"command");
216 v_putcad(26,17,0xffffff,COLORFONDO,"period.");
217 }
218 if(strcmp(item, "tRP") == 0)
219 {
220 v_putcad(26,8,0xffffff,COLORFONDO,"Change with");
221 v_putcad(26,9,0xffffff,COLORFONDO,"R/L.");
222 v_putcad(26,11,0xffffff,COLORFONDO,"Valid are");
223 v_putcad(26,12,0xffffff,COLORFONDO,"1 to 16");
224 v_putcad(26,13,0xffffff,COLORFONDO,"cycles.");
225 v_putcad(26,15,0xffffff,COLORFONDO,"PRECHARGE");
226 v_putcad(26,16,0xffffff,COLORFONDO,"command");
227 v_putcad(26,17,0xffffff,COLORFONDO,"period.");
228 }
229 if(strcmp(item, "tRCD") == 0)
230 {
231 v_putcad(26,8,0xffffff,COLORFONDO,"Change with");
232 v_putcad(26,9,0xffffff,COLORFONDO,"R/L.");
233 v_putcad(26,11,0xffffff,COLORFONDO,"Valid are");
234 v_putcad(26,12,0xffffff,COLORFONDO,"1 to 16");
235 v_putcad(26,13,0xffffff,COLORFONDO,"cycles.");
236 v_putcad(26,15,0xffffff,COLORFONDO,"RAS to CAS");
237 v_putcad(26,16,0xffffff,COLORFONDO,"Delay in");
238 v_putcad(26,17,0xffffff,COLORFONDO,"cycles.");
239 }
240 if(strcmp(item, "REFPERD") == 0)
241 {
242 v_putcad(26,8,0xffffff,COLORFONDO,"Choose the");
243 v_putcad(26,9,0xffffff,COLORFONDO,"RAM Refresh");
244 v_putcad(26,9,0xffffff,COLORFONDO,"Period");
245 v_putcad(26,10,0xffffff,COLORFONDO,"with R/L");
246 v_putcad(26,12,0xffffff,COLORFONDO,"Valid are");
247 v_putcad(26,13,0xffffff,COLORFONDO,"1 to 65535 ");
248 v_putcad(26,14,0xffffff,COLORFONDO,"cycles.");
249 v_putcad(26,16,0xffffff,COLORFONDO,"Max. cycles");
250 v_putcad(26,17,0xffffff,COLORFONDO,"between");
251 v_putcad(26,18,0xffffff,COLORFONDO,"AUTOREFRESH");
252 v_putcad(26,19,0xffffff,COLORFONDO,"commands.");
253 v_putcad(26,21,0xFFFF,COLORFONDO,"Default ~250");
254 }
255 if(strcmp(item, "DCLK_Div") == 0)
256 {
257 v_putcad(26,8,0xffffff,COLORFONDO,"Choose with");
258 v_putcad(26,9,0xffffff,COLORFONDO,"R/L.");
259 v_putcad(26,11,0xffffff,COLORFONDO,"The CPU-clock");
260 v_putcad(26,12,0xffffff,COLORFONDO,"will be");
261 v_putcad(26,13,0xffffff,COLORFONDO,"divided by");
262 v_putcad(26,14,0xffffff,COLORFONDO,"this value.");
263 v_putcad(26,15,0xffffff,COLORFONDO,"Valid values");
264 v_putcad(26,17,0xffffff,COLORFONDO,"are from");
265 v_putcad(26,18,0xffffff,COLORFONDO,"1 to 8");
266 v_putcad(26,20,0xffffff,COLORFONDO,"RAM-Clock =");
267 v_putcad(26,21,0xffffff,COLORFONDO,"CPU-Clock / 2");
268 }
269}
270
271short cpumenu()
272{
273 unsigned sysfreq=0, cpufreq, cpu_div;
274
275 short test = 1;
276
277 if(cpusettings[0] == -1)
278 {
279 //get the setted values from system
280 cpu_div = get_920_Div();
281 sysfreq=get_freq_920_CLK();
282 sysfreq*=cpu_div+1;
283 cpufreq=sysfreq/1000000;
284 }
285 else
286 {
287 //use old settings
288 cpufreq = cpusettings[0];
289 cpu_div = cpusettings[1];
290 }
291
292 menupoint = 0;
293
294 do
295 {
296 cleardisp();
297
298 //cpu menu
299 v_putcad(12,2,WHITE,COLORFONDO,"CPU Clock Setup");
300 sprintf(cad,"CPU Frequency = %uMhz",cpufreq);
301 if(menupoint==0){v_putcad(2,5,0xffffff,TEXTBACK,cad);itemhelp("cpuclk");}
302 else v_putcad(2,5,0xffff,COLORFONDO,cad);
303 sprintf(cad,"CPU Divider: %u",cpu_div+1);
304 if(menupoint==1){v_putcad(2,7,0xffffff,TEXTBACK,cad);itemhelp("cpudiv");}
305 else v_putcad(2,7,0xffff,COLORFONDO,cad);
306 v_putcad(2,12,0xffff00,COLORFONDO,"CPU Speedtest");
307 if(test==0) sprintf(cad,"Test 2: Primnumber");
308 if(test==1) sprintf(cad,"Test 1: Walking Ant");
309 if(menupoint==2){v_putcad(2,15,0xffffff,TEXTBACK,cad);itemhelp("test");}
310 else v_putcad(2,15,0xffff,COLORFONDO,cad);
311 if(menupoint==3){v_putcad(8,17,0xffffff,TEXTBACK,"GO!!!");itemhelp("gotest");}
312 else v_putcad(8,17,0xffff,COLORFONDO,"GO!!!");
313
314 gp2x_video_flip();
315
316 while(1)
317 {
318 gp2x_nKeys=gp2x_joystick_read();
319
320 if((gp2x_nKeys & GP2X_START))
321 {
322 while(1)
323 {
324 gp2x_nKeys=gp2x_joystick_read();
325 if(!(gp2x_nKeys & GP2X_START)) break;
326 }
327 cpusettings[0] = cpufreq;
328 cpusettings[1] = cpu_div;
329 return 0;
330 }
331
332 if((gp2x_nKeys & GP2X_DOWN))
333 {
334 menupoint++;
335 if(menupoint>3) menupoint=0;
336 delay_us(200000);
337 break;
338 }
339
340 if((gp2x_nKeys & GP2X_UP))
341 {
342 menupoint--;
343 if(menupoint<0) menupoint=3;
344 delay_us(200000);
345 break;
346 }
347
348 if((gp2x_nKeys & GP2X_R))
349 {
350 if (menupoint == 0)
351 {
352 cpufreq+=10;
353 if (cpufreq > 340) cpufreq = 33;
354 }
355 if (menupoint == 1)
356 {
357 cpu_div++;
358 if (cpu_div == 8) cpu_div = 0;
359 }
360 if (menupoint == 2)
361 {
362 test++;
363 if (test == 2) test = 0;
364 }
365 delay_us(200000);
366 break;
367 }
368
369 if((gp2x_nKeys & GP2X_L))
370 {
371 if (menupoint == 0)
372 {
373 cpufreq-=10;
374 if (cpufreq < 33) cpufreq = 340;
375 }
376 if (menupoint == 1)
377 {
378 cpu_div--;
379 if (cpu_div == -1) cpu_div = 7;
380 }
381 if (menupoint == 2)
382 {
383 cpu_div--;
384 if (cpu_div == -1) cpu_div = 1;
385 }
386 delay_us(200000);
387 break;
388 }
389
390 if((gp2x_nKeys & GP2X_VOL_DOWN))
391 {
392 if (menupoint == 0)
393 {
394 cpufreq++;
395 if (cpufreq == 340) cpufreq = 33;
396 }
397 delay_us(200000);
398 break;
399 }
400
401 if((gp2x_nKeys & GP2X_VOL_UP))
402 {
403 if (menupoint == 0)
404 {
405 cpufreq--;
406 if (cpufreq == 32) cpufreq = 340;
407 }
408 delay_us(200000);
409 break;
410 }
411
412 if((gp2x_nKeys & GP2X_B))
413 {
414 if (menupoint == 3) speedtest(test);
415 delay_us(200000);
416 break;
417 }
418 }
419 }
420 while(1);
421}
422
423short lcdmenu()
424{
425 short clockgen, LCDClk;
426 float gamma;
427
428 if(dispsettings[0] == -1)
429 {
430 //get the setted values from system
431 clockgen = get_Clkgen();
432 LCDClk = get_LCDClk(clockgen);
433 gamma = 1.0;
434 }
435 else
436 {
437 //use old settings
438 clockgen = dispsettings[0];
439 LCDClk = dispsettings[1];
440 gamma = dispsettings[2]/100;
441 }
442
443 menupoint = 0;
444
445 do
446 {
447 cleardisp();
448
449 //display menu
450 v_putcad(9,2,WHITE,COLORFONDO,"Display Setting Setup");
451 if (clockgen == 0)
452 {
453 sprintf(cad,"Clockgen = FPLL");
454 if(menupoint==0){v_putcad(2,5,0xffffff,TEXTBACK,cad);itemhelp("clockgen");}
455 else v_putcad(2,5,0xffff,COLORFONDO,cad);
456 }
457 else
458 {
459 sprintf(cad,"Clockgen = UPLL");
460 if(menupoint==0){v_putcad(2,5,0xffffff,TEXTBACK,cad);itemhelp("clockgen");}
461 else v_putcad(2,5,0xffff,COLORFONDO,cad);
462 }
463 sprintf(cad,"Timing: %i",LCDClk);
464 if(menupoint==1){v_putcad(2,7,0xffffff,TEXTBACK,cad);itemhelp("timing");}
465 else v_putcad(2,7,0xffff,COLORFONDO,cad);
466 sprintf(cad,"Gamma: %.2f",gamma);
467 if(menupoint==2){v_putcad(2,9,0xffffff,TEXTBACK,cad);itemhelp("gamma");}
468 else v_putcad(2,9,0xffff,COLORFONDO,cad);
469
470 gp2x_video_flip();
471
472 while(1)
473 {
474 gp2x_nKeys=gp2x_joystick_read();
475
476 if((gp2x_nKeys & GP2X_START))
477 {
478 while(1)
479 {
480 gp2x_nKeys=gp2x_joystick_read();
481 if(!(gp2x_nKeys & GP2X_START)) break;
482 }
483 dispsettings[0] = clockgen;
484 dispsettings[1] = LCDClk;
485 dispsettings[2] = (int)(gamma*100);
486 return 0;
487 }
488
489 if((gp2x_nKeys & GP2X_DOWN))
490 {
491 menupoint++;
492 if(menupoint>2) menupoint=0;
493 delay_us(200000);
494 break;
495 }
496
497 if((gp2x_nKeys & GP2X_UP))
498 {
499 menupoint--;
500 if(menupoint<0) menupoint=2;
501 delay_us(200000);
502 break;
503 }
504
505 if((gp2x_nKeys & GP2X_R))
506 {
507 if (menupoint == 0)
508 {
509 clockgen++;
510 if (clockgen == 2) clockgen = 0;
511 }
512 if (menupoint == 1)
513 {
514 LCDClk++;
515 if (clockgen == 0)
516 {
517 if (LCDClk == 37) LCDClk = -20;
518 set_add_FLCDCLK(LCDClk);
519 }
520 else
521 {
522 if (LCDClk == 11) LCDClk = -6;
523 set_add_ULCDCLK(LCDClk);
524 }
525 }
526 if (menupoint == 2)
527 {
528 gamma += 0.2;
529 if (gamma > 10) gamma = 0.2;
530 set_gamma(gamma);
531 }
532 delay_us(200000);
533 break;
534 }
535
536 if((gp2x_nKeys & GP2X_L))
537 {
538 if (menupoint == 0)
539 {
540 clockgen--;
541 if (clockgen == -1) clockgen = 1;
542 }
543 if (menupoint == 1)
544 {
545 LCDClk--;
546 if(clockgen == 0)
547 {
548 if (LCDClk == -21) LCDClk = 36;
549 set_add_FLCDCLK(LCDClk);
550 }
551 else
552 {
553 if (LCDClk == -7) LCDClk = 10;
554 set_add_ULCDCLK(LCDClk);
555 }
556 }
557 if (menupoint == 2)
558 {
559 gamma -= 0.2;
560 if (gamma < 0.01) gamma = 10;
561 set_gamma(gamma);
562 }
563 delay_us(200000);
564 break;
565 }
566
567 if((gp2x_nKeys & GP2X_VOL_DOWN))
568 {
569 if (menupoint == 2)
570 {
571 gamma += 0.01;
572 if (gamma > 10) gamma = 0.01;
573 set_gamma(gamma);
574 }
575 delay_us(200000);
576 break;
577 }
578
579 if((gp2x_nKeys & GP2X_VOL_UP))
580 {
581 if (menupoint == 2)
582 {
583 gamma -= 0.01;
584 if (gamma < 0.01) gamma = 10;
585 set_gamma(gamma);
586 }
587 delay_us(200000);
588 break;
589 }
590 }
591 }
592 while(1);
593}
594
595short rammenu()
596{
597 short CAS,tRC,tRAS,tWR,tMRD,tRFC,tRP,tRCD,DCLK_Div;
598 int REFPERD;
599
600 if(ramsettings[0] == -1)
601 {
602 //get the setted values from system
603 CAS = get_CAS();
604 tRC = get_tRC();
605 tRAS = get_tRAS();
606 tWR = get_tWR();
607 tMRD = get_tMRD();
608 tRFC = get_tRFC();
609 tRP = get_tRP();
610 tRCD = get_tRCD();
611 REFPERD = get_REFPERD();
612 DCLK_Div = get_DCLK_Div();
613 }
614 else
615 {
616 //use old settings
617 CAS = ramsettings[0];
618 tRC = ramsettings[1];
619 tRAS = ramsettings[2];
620 tWR = ramsettings[3];
621 tMRD = ramsettings[4];
622 tRFC = ramsettings[5];
623 tRP = ramsettings[6];
624 tRCD = ramsettings[7];
625 REFPERD = ramsettings[8];
626 DCLK_Div = ramsettings[9];
627 }
628
629 pageshift = 0;
630 menupoint = 0;
631
632 do
633 {
634 cleardisp();
635
636 //ram menu
637 v_putcad(11,2,WHITE,COLORFONDO,"RAM Setting Setup");
638 if(pageshift == 0)
639 {
640 sprintf(cad,"CAS: %u",CAS+2);
641 if(menupoint==0){v_putcad(2,5,0xffffff,TEXTBACK,cad);itemhelp("CAS");}
642 else v_putcad(2,5,0xffff,COLORFONDO,cad);
643 }
644 else v_putcad(13,5,0xffff,COLORFONDO,"^");
645 sprintf(cad,"tRC: %u",tRC+1);
646 if(menupoint==1){v_putcad(2,7-pageshift,0xffffff,TEXTBACK,cad);itemhelp("tRC");}
647 else v_putcad(2,7-pageshift,0xffff,COLORFONDO,cad);
648 sprintf(cad,"tRAS: %u",tRAS+1);
649 if(menupoint==2){v_putcad(2,9-pageshift,0xffffff,TEXTBACK,cad);itemhelp("tRAS");}
650 else v_putcad(2,9-pageshift,0xffff,COLORFONDO,cad);
651 sprintf(cad,"tWR: %u",tWR+1);
652 if(menupoint==3){v_putcad(2,11-pageshift,0xffffff,TEXTBACK,cad);itemhelp("tWR");}
653 else v_putcad(2,11-pageshift,0xffff,COLORFONDO,cad);
654 sprintf(cad,"tMRD: %u",tMRD+1);
655 if(menupoint==4){v_putcad(2,13-pageshift,0xffffff,TEXTBACK,cad);itemhelp("tMRD");}
656 else v_putcad(2,13-pageshift,0xffff,COLORFONDO,cad);
657 sprintf(cad,"tRFC: %u",tRFC+1);
658 if(menupoint==5){v_putcad(2,15-pageshift,0xffffff,TEXTBACK,cad);itemhelp("tRFC");}
659 else v_putcad(2,15-pageshift,0xffff,COLORFONDO,cad);
660 sprintf(cad,"tRP: %u",tRP+1);
661 if(menupoint==6){v_putcad(2,17-pageshift,0xffffff,TEXTBACK,cad);itemhelp("tRP");}
662 else v_putcad(2,17-pageshift,0xffff,COLORFONDO,cad);
663 sprintf(cad,"tRCD: %u",tRCD+1);
664 if(menupoint==7){v_putcad(2,19-pageshift,0xffffff,TEXTBACK,cad);itemhelp("tRCD");}
665 else v_putcad(2,19-pageshift,0xffff,COLORFONDO,cad);
666 sprintf(cad,"Refresh Period: %u",REFPERD+1);
667 if(menupoint==8){v_putcad(2,21-pageshift,0xffffff,TEXTBACK,cad);itemhelp("REFPERD");}
668 else v_putcad(2,21-pageshift,0xffff,COLORFONDO,cad);
669 if(pageshift == 1)
670 {
671 sprintf(cad,"RAM Divider: %u",DCLK_Div+1);
672 if(menupoint==9){v_putcad(2,23,0xffffff,TEXTBACK,cad);itemhelp("DCLK_Div");}
673 else v_putcad(2,23,0xffff,COLORFONDO,cad);
674 }
675 else v_putcad(13,23,0xffff,COLORFONDO,"v");
676
677
678 gp2x_video_flip();
679
680 while(1)
681 {
682 gp2x_nKeys=gp2x_joystick_read();
683
684 if((gp2x_nKeys & GP2X_START))
685 {
686 while(1)
687 {
688 gp2x_nKeys=gp2x_joystick_read();
689 if(!(gp2x_nKeys & GP2X_START)) break;
690 }
691 ramsettings[0] = CAS;
692 ramsettings[1] = tRC;
693 ramsettings[2] = tRAS;
694 ramsettings[3] = tWR;
695 ramsettings[4] = tMRD;
696 ramsettings[5] = tRFC;
697 ramsettings[6] = tRP;
698 ramsettings[7] = tRCD;
699 ramsettings[8] = REFPERD;
700 ramsettings[9] = DCLK_Div;
701 return 0;
702 }
703
704 if((gp2x_nKeys & GP2X_DOWN))
705 {
706 menupoint++;
707 if(menupoint==9) pageshift = 1;
708 if(menupoint>9) {menupoint=0; pageshift = 0;}
709 delay_us(200000);
710 break;
711 }
712
713 if((gp2x_nKeys & GP2X_UP))
714 {
715 menupoint--;
716 if(menupoint==0) pageshift = 0;
717 if(menupoint<0) { menupoint=9; pageshift = 1;}
718 delay_us(200000);
719 break;
720 }
721
722 if((gp2x_nKeys & GP2X_R))
723 {
724 if (menupoint == 0)
725 {
726 CAS++;
727 if (CAS == 2) CAS = 0;
728 }
729 if (menupoint == 1)
730 {
731 tRC++;
732 if (tRC == 16) tRC = 0;
733 }
734 if (menupoint == 2)
735 {
736 tRAS++;
737 if (tRAS == 16) tRAS = 0;
738 }
739 if (menupoint == 3)
740 {
741 tWR++;
742 if (tWR == 16) tWR = 0;
743 }
744 if (menupoint == 4)
745 {
746 tMRD++;
747 if (tMRD == 16) tMRD = 0;
748 }
749 if (menupoint == 5)
750 {
751 tRFC++;
752 if (tRFC == 16) tRFC = 0;
753 }
754 if (menupoint == 6)
755 {
756 tRP++;
757 if (tRP == 16) tRP = 0;
758 }
759 if (menupoint == 7)
760 {
761 tRCD++;
762 if (tRCD == 16) tRCD = 0;
763 }
764 if (menupoint == 8)
765 {
766 REFPERD += 10;
767 if (REFPERD == 0xffff) REFPERD = 0;
768 }
769 if (menupoint == 9)
770 {
771 DCLK_Div++;
772 if (DCLK_Div == 8) DCLK_Div = 0;
773 }
774 delay_us(200000);
775 break;
776 }
777
778 if((gp2x_nKeys & GP2X_L))
779 {
780 if (menupoint == 0)
781 {
782 CAS--;
783 if (CAS == -1) CAS = 1;
784 }
785 if (menupoint == 1)
786 {
787 tRC--;
788 if (tRC == -1) tRC = 15;
789 }
790 if (menupoint == 2)
791 {
792 tRAS--;
793 if (tRAS == -1) tRAS = 15;
794 }
795 if (menupoint == 3)
796 {
797 tWR--;
798 if (tWR == -1) tWR = 15;
799 }
800 if (menupoint == 4)
801 {
802 tMRD--;
803 if (tMRD == -1) tMRD = 15;
804 }
805 if (menupoint == 5)
806 {
807 tRFC--;
808 if (tRFC == -1) tRFC = 15;
809 }
810 if (menupoint == 6)
811 {
812 tRP--;
813 if (tRP == -1) tRP = 15;
814 }
815 if (menupoint == 7)
816 {
817 tRCD--;
818 if (tRCD == -1) tRCD = 15;
819 }
820 if (menupoint == 8)
821 {
822 REFPERD -= 10;
823 if (REFPERD == -1) REFPERD = 0xfffe;
824 }
825 if (menupoint == 9)
826 {
827 DCLK_Div--;
828 if (DCLK_Div == -1) DCLK_Div = 7;
829 }
830 delay_us(200000);
831 break;
832 }
833 }
834 }
835 while(1);
836}
837
838int exit_cpu_speed(char* runfile)
839{
840 gp2x_deinit();
841 cpuspeed_exit = 1;
842#if 0
843 system("sync");
844 if(strcmp(runfile, "gp2xmenu") == 0) chdir("/usr/gp2x");
845 execl(runfile,NULL);
846 exit(0);
847#endif
848}
849
850/****************************************************************************************************************************************/
851// MAIN
852/****************************************************************************************************************************************/
853
854int main_cpuspeed(int argc, char *argv[])
855{
856 unsigned sysfreq=0;
857 int cpufreq, n;
858 short run = 0;
859 int start_daemon = 0;
860 short mainmenupoint = 0;
861 ramsettings[0] = -1;
862 ramsettings[1] = -1;
863 ramsettings[2] = -1;
864 ramsettings[3] = -1;
865 ramsettings[4] = -1;
866 ramsettings[5] = -1;
867 ramsettings[6] = -1;
868 ramsettings[7] = -1;
869 ramsettings[8] = -1;
870 ramsettings[9] = -1;
871 dispsettings[0] = -1;
872 dispsettings[1] = -100;
873 dispsettings[2] = -1;
874 cpusettings[0] = -1;
875 cpusettings[1] = -1;
876 daemonsettings[0] = -1;
877 daemonsettings[1] = 260;
878 daemonsettings[2] = 5;
879 daemonsettings[3] = 5;
880 daemonsettings[4] = GP2X_L | GP2X_R;
881 daemonsettings[5] = GP2X_VOL_DOWN;
882 daemonsettings[6] = GP2X_VOL_UP;
883 daemonsettings[7] = 1;
884
885 char *runfile;
886
887 FILE *settings;
888 char sets[41][40];
889 char* comps[25] = {
890 "CPU-Clock\n","CPU-Div\n","FPLL\n","UPLL\n","Gamma\n","CAS\n","tRC\n",
891 "tRAS\n","tWR\n","tMRD\n","tRFC\n","tRP\n","tRCD\n","Refresh-Period\n","RAM-Div\n","Run\n",
892 "Daemon-Min\n","Daemon-Max\n","Daemon-Step\n","Daemon-Delay\n","Daemon-Hotkey\n","Daemon-Incr-Key\n","Daemon-Decr-Key\n",
893 "Daemon-OSD\n","Daemon-Run\n"
894 };
895
896 gp2x_init(16,44100,16,1,50);
897 cpuctrl_init(); // ATENCION: si no se hace esto, cuelgue seguro (aprovecho la definicion de rlyeh y debe ir despues de gp2x_init)
898
899 settings = fopen ("./cpu_speed.cfg", "r");
900
901 if (settings == NULL)
902 {
903 printf("No file found\n");
904 }
905 else
906 {
907 char *ReturnCode;
908 for(n=0; n<40; n++)
909 {
910 ReturnCode = fgets(sets[n],40,settings);
911 if (ReturnCode == NULL)
912 {
913 sets[40][0] = (char)n;
914 break;
915 }
916 }
917
918 for(n=0; n<(int)sets[40][0]; n=n+2)
919 {
920 if(strcmp(sets[n],comps[0]) == 0)
921 {
922 if(atoi(sets[n+1]) > 33)
923 if(atoi(sets[n+1]) < 341)
924 cpusettings[0] = atoi(sets[n+1]);
925 }
926 if(strcmp(sets[n],comps[1]) == 0)
927 {
928 if(atoi(sets[n+1]) > 0)
929 if(atoi(sets[n+1]) < 9)
930 cpusettings[1] = atoi(sets[n+1])-1;
931 }
932 if(strcmp(sets[n],comps[2]) == 0)
933 {
934 if(atoi(sets[n+1]) > -21)
935 if(atoi(sets[n+1]) < 37)
936 dispsettings[0] = 0;
937 dispsettings[1] = atoi(sets[n+1]);
938
939 }
940 if(strcmp(sets[n],comps[3]) == 0)
941 {
942 if(atoi(sets[n+1]) > -7)
943 if(atoi(sets[n+1]) < 11)
944 dispsettings[0] = 1;
945 dispsettings[1] = atoi(sets[n+1]);
946 }
947 if(strcmp(sets[n],comps[4]) == 0)
948 {
949 if(atof(sets[n+1]) > 0)
950 if(atof(sets[n+1]) <= 10)
951 dispsettings[2] = (int)(atof(sets[n+1])*100);
952 }
953 if(strcmp(sets[n],comps[5]) == 0)
954 {
955 if(atoi(sets[n+1]) > 1)
956 if(atoi(sets[n+1]) < 4)
957 ramsettings[0] = atoi(sets[n+1])-2;
958 }
959 if(strcmp(sets[n],comps[6]) == 0)
960 {
961 if(atoi(sets[n+1]) > 0)
962 if(atoi(sets[n+1]) < 17)
963 ramsettings[1] = atoi(sets[n+1])-1;
964 }
965 if(strcmp(sets[n],comps[7]) == 0)
966 {
967 if(atoi(sets[n+1]) > 0)
968 if(atoi(sets[n+1]) < 17)
969 ramsettings[2] = atoi(sets[n+1])-1;
970 }
971 if(strcmp(sets[n],comps[8]) == 0)
972 {
973 if(atoi(sets[n+1]) > 0)
974 if(atoi(sets[n+1]) < 17)
975 ramsettings[3] = atoi(sets[n+1])-1;
976 }
977 if(strcmp(sets[n],comps[9]) == 0)
978 {
979 if(atoi(sets[n+1]) > 0)
980 if(atoi(sets[n+1]) < 17)
981 ramsettings[4] = atoi(sets[n+1])-1;
982 }
983 if(strcmp(sets[n],comps[10]) == 0)
984 {
985 if(atoi(sets[n+1]) > 0)
986 if(atoi(sets[n+1]) < 17)
987 ramsettings[5] = atoi(sets[n+1])-1;
988 }
989 if(strcmp(sets[n],comps[11]) == 0)
990 {
991 if(atoi(sets[n+1]) > 0)
992 if(atoi(sets[n+1]) < 17)
993 ramsettings[6] = atoi(sets[n+1])-1;
994 }
995 if(strcmp(sets[n],comps[12]) == 0)
996 {
997 if(atoi(sets[n+1]) > 0)
998 if(atoi(sets[n+1]) < 17)
999 ramsettings[7] = atoi(sets[n+1])-1;
1000 }
1001 if(strcmp(sets[n],comps[13]) == 0)
1002 {
1003 if(atoi(sets[n+1]) > 0)
1004 if(atoi(sets[n+1]) < 65536)
1005 ramsettings[8] = atoi(sets[n+1])-1;
1006 }
1007 if(strcmp(sets[n],comps[14]) == 0)
1008 {
1009 if(atoi(sets[n+1]) > 0)
1010 if(atoi(sets[n+1]) < 9)
1011 ramsettings[9] = atoi(sets[n+1])-1;
1012 }
1013 if(strcmp(sets[n],comps[15]) == 0)
1014 {
1015 run = 1;
1016 runfile = sets[n+1];
1017 }
1018 if(strcmp(sets[n],comps[16]) == 0)
1019 {
1020 if(atoi(sets[n+1]) >= 33)
1021 if(atoi(sets[n+1]) <= 340)
1022 daemonsettings[0] = atoi(sets[n+1]);
1023 }
1024 if(strcmp(sets[n],comps[17]) == 0)
1025 {
1026 if(atoi(sets[n+1]) >= 33)
1027 if(atoi(sets[n+1]) <= 340)
1028 daemonsettings[1] = atoi(sets[n+1]);
1029 }
1030 if(strcmp(sets[n],comps[18]) == 0)
1031 {
1032 if(atoi(sets[n+1]) >= daemonsettings[1])
1033 if(atoi(sets[n+1]) <= 340)
1034 daemonsettings[2] = atoi(sets[n+1]);
1035 }
1036 if(strcmp(sets[n],comps[19]) == 0)
1037 {
1038 daemonsettings[3] = (int)(atof(sets[n+1])*10+0.5);
1039 if(daemonsettings[3] < 1)
1040 daemonsettings[3] = 5;
1041 }
1042 if(strcmp(sets[n],comps[20]) == 0)
1043 {
1044 daemonsettings[4] = parse_key_sequence(sets[n+1]);
1045 }
1046 if(strcmp(sets[n],comps[21]) == 0)
1047 {
1048 daemonsettings[5] = parse_key_sequence(sets[n+1]);
1049 }
1050 if(strcmp(sets[n],comps[22]) == 0)
1051 {
1052 daemonsettings[6] = parse_key_sequence(sets[n+1]);
1053 }
1054 if(strcmp(sets[n],comps[23]) == 0)
1055 {
1056 daemonsettings[7] = (sets[n+1][1] == 'n' ? 1 : 0);
1057 }
1058 if(strcmp(sets[n],comps[24]) == 0)
1059 {
1060 start_daemon = 1;
1061 }
1062 }
1063 }
1064
1065 if(run == 1)
1066 {
1067 if (cpusettings[0] > -1) set_FCLK(cpusettings[0]);
1068 if (cpusettings[1] > -1) set_920_Div(cpusettings[1]);
1069 if (dispsettings[0] == 0)
1070 if (dispsettings[1] > -100) set_add_FLCDCLK(dispsettings[1]);
1071 if (dispsettings[0] == 1)
1072 if (dispsettings[1] > -100) set_add_ULCDCLK(dispsettings[1]);
1073 if (dispsettings[2] > -1) set_gamma((float)(dispsettings[2]/100));
1074 if (ramsettings[0] > -1) set_CAS(ramsettings[0]);
1075 if (ramsettings[1] > -1) set_tRC(ramsettings[1]);
1076 if (ramsettings[2] > -1) set_tRAS(ramsettings[2]);
1077 if (ramsettings[3] > -1) set_tWR(ramsettings[3]);
1078 if (ramsettings[4] > -1) set_tMRD(ramsettings[4]);
1079 if (ramsettings[5] > -1) set_tRFC(ramsettings[5]);
1080 if (ramsettings[6] > -1) set_tRP(ramsettings[6]);
1081 if (ramsettings[7] > -1) set_tRCD(ramsettings[7]);
1082 if (ramsettings[8] > -1) set_REFPERD(ramsettings[8]);
1083 if (ramsettings[9] > -1) set_DCLK_Div(ramsettings[9]);
1084 exit_cpu_speed(runfile);
1085 return 0;
1086 }
1087
1088 sysfreq=get_freq_920_CLK();
1089 sysfreq*=get_920_Div()+1;
1090 cpufreq=sysfreq/1000000;
1091
1092#if 0
1093 if(argc > 1)
1094 {
1095 if(strcmp(argv[1], "0") == 0) fallback(argc, argv);
1096 else if(strcmp(argv[1], "1") == 0) fallback(argc, argv);
1097 else if(strcmp(argv[1], "--help") == 0) cmdhelp();
1098 else if(strcmp(argv[1], "--daemon") == 0) cmd_daemon(argc, argv);
1099 else if(strcmp(argv[1], "--kill-daemon") == 0) kill_running_daemon() || printf("no daemon running\r\n");
1100 else if(strcmp(argv[1], "--kill") == 0) kill_running_daemon() || printf("no daemon running\r\n");
1101 else cmdline(argc, argv);
1102 gp2x_deinit();
1103 return 0;
1104 }
1105#endif
1106
1107 if(start_daemon)
1108 start_daemon_by_settings();
1109
1110 set_gamma(1.0);
1111
1112 do
1113 {
1114 cleardisp();
1115
1116 //main menu
1117 v_putcad(27,26,WHITE,COLORFONDO,"Y:Save to SD");
1118 v_putcad(2,27,WHITE,COLORFONDO,"Select: Set setting and quit");
1119 itemhelp("menu");
1120 if(mainmenupoint==0) v_putcad(2,6,0xffffff,TEXTBACK,"> CPU Clock");
1121 else v_putcad(2,6,0xffff,COLORFONDO,"> CPU Clock");
1122 if(mainmenupoint==1) v_putcad(2,8,0xffffff,TEXTBACK,"> Display Settings");
1123 else v_putcad(2,8,0xffff,COLORFONDO,"> Display Settings");
1124 if(mainmenupoint==2) v_putcad(2,10,0xffffff,TEXTBACK,"> RAM Settings");
1125 else v_putcad(2,10,0xffff,COLORFONDO,"> RAM Settings");
1126 if(mainmenupoint==3) v_putcad(2,12,0xffffff,TEXTBACK,"> Daemon");
1127 else v_putcad(2,12,0xffff,COLORFONDO,"> Daemon");
1128 v_putcad(2,17,0xffff00,COLORFONDO,"Information:");
1129 sprintf(cad,"Sys.-Frq: %u Hz",sysfreq);
1130 v_putcad(2,19,0xffffff,COLORFONDO,cad);
1131 sprintf(cad,"UCLK-Frq: %u Hz",get_freq_UCLK());
1132 v_putcad(2,20,0xffffff,COLORFONDO,cad);
1133 sprintf(cad,"ACLK-Frq: %u Hz",get_freq_ACLK());
1134 v_putcad(2,21,0xffffff,COLORFONDO,cad);
1135 gp2x_video_flip();
1136
1137 while(1)
1138 {
1139 gp2x_nKeys=gp2x_joystick_read();
1140
1141 if((gp2x_nKeys & GP2X_START))
1142 {
1143 while(1)
1144 {
1145 gp2x_nKeys=gp2x_joystick_read();
1146 if(!(gp2x_nKeys & GP2X_START)) break;
1147 }
1148 exit_cpu_speed("gp2xmenu");
1149 return 0;
1150 }
1151
1152 if((gp2x_nKeys & GP2X_SELECT))
1153 {
1154 if (cpusettings[0] > -1)
1155 {
1156 set_FCLK(cpusettings[0]);
1157 set_920_Div(cpusettings[1]);
1158 }
1159 if (ramsettings[0] > -1)
1160 {
1161 set_CAS(ramsettings[0]);
1162 set_tRC(ramsettings[1]);
1163 set_tRAS(ramsettings[2]);
1164 set_tWR(ramsettings[3]);
1165 set_tMRD(ramsettings[4]);
1166 set_tRFC(ramsettings[5]);
1167 set_tRP(ramsettings[6]);
1168 set_tRCD(ramsettings[7]);
1169 set_REFPERD(ramsettings[8]);
1170 set_DCLK_Div(ramsettings[9]);
1171 }
1172 while(1)
1173 {
1174 gp2x_nKeys=gp2x_joystick_read();
1175 if(!(gp2x_nKeys & GP2X_START)) break;
1176 }
1177 exit_cpu_speed("gp2xmenu");
1178 return 0;
1179 }
1180
1181 if((gp2x_nKeys & GP2X_DOWN))
1182 {
1183 mainmenupoint=mainmenupoint+1;
1184 if(mainmenupoint>3) mainmenupoint=0;
1185 delay_us(200000);
1186 break;
1187 }
1188
1189 if((gp2x_nKeys & GP2X_UP))
1190 {
1191 mainmenupoint=mainmenupoint-1;
1192 if(mainmenupoint<0) mainmenupoint=3;
1193 delay_us(200000);
1194 break;
1195 }
1196
1197 if((gp2x_nKeys & GP2X_Y))
1198 {
1199 settings = fopen("./cpu_speed.cfg", "w");
1200 if(cpusettings[0] > -1)
1201 {
1202 fprintf(settings,"CPU-Clock\n%u\n", cpusettings[0]);
1203 fprintf(settings,"CPU-Div\n%i\n", cpusettings[1]+1);
1204 }
1205 if(dispsettings[0] > -1)
1206 {
1207 if(dispsettings[0] == 0) fprintf(settings,"FPLL\n%i\n", dispsettings[1]);
1208 if(dispsettings[0] == 1) fprintf(settings,"UPLL\n%i\n", dispsettings[1]);
1209 fprintf(settings,"Gamma\n%.2f\n", (float)(dispsettings[2]/100));
1210 }
1211 if(ramsettings[0] > -1)
1212 {
1213 fprintf(settings,"CAS\n%i\n", ramsettings[0]+2);
1214 fprintf(settings,"tRC\n%i\n", ramsettings[1]+1);
1215 fprintf(settings,"tRAS\n%i\n", ramsettings[2]+1);
1216 fprintf(settings,"tWR\n%i\n", ramsettings[3]+1);
1217 fprintf(settings,"tMRD\n%i\n", ramsettings[4]+1);
1218 fprintf(settings,"tRFC\n%i\n", ramsettings[5]+1);
1219 fprintf(settings,"tRP\n%i\n", ramsettings[6]+1);
1220 fprintf(settings,"tRCD\n%i\n", ramsettings[7]+1);
1221 fprintf(settings,"Refresh-Period\n%i\n", ramsettings[8]+1);
1222 fprintf(settings,"RAM-Div\n%i\n", ramsettings[9]+1);
1223 }
1224 if(daemonsettings[0] > -1)
1225 {
1226 fprintf(settings,"Daemon-Min\n%i\n", daemonsettings[0]);
1227 fprintf(settings,"Daemon-Max\n%i\n", daemonsettings[1]);
1228 fprintf(settings,"Daemon-Step\n%i\n", daemonsettings[2]);
1229 fprintf(settings,"Daemon-Delay\n%.1f\n", daemonsettings[3]/10.f);
1230
1231 char test[256];
1232 sprintf(test,"");
1233 formatkey(test,daemonsettings[4]);
1234 fprintf(settings,"Daemon-Hotkey\n%s\n",test);
1235 sprintf(test,"");
1236 formatkey(test,daemonsettings[5]);
1237 fprintf(settings,"Daemon-Incr-Key\n%s\n",test);
1238 sprintf(test,"");
1239 formatkey(test,daemonsettings[6]);
1240 fprintf(settings,"Daemon-Decr-Key\n%s\n",test);
1241
1242 fprintf(settings,"Daemon-OSD\n%s\n",(daemonsettings[7]?"On":"Off"));
1243 if(!access("/tmp/cpu_daemon.pid",R_OK))
1244 fprintf(settings,"Daemon-Run\nOn\n");
1245
1246 }
1247
1248
1249 fclose(settings);
1250 system("sync");
1251 while(1)
1252 {
1253 gp2x_nKeys=gp2x_joystick_read();
1254 if(!(gp2x_nKeys & GP2X_Y)) break;
1255 }
1256 break;
1257 }
1258
1259
1260 if((gp2x_nKeys & GP2X_B))
1261 {
1262 if(mainmenupoint==0) cpumenu();
1263 if(mainmenupoint==1) lcdmenu();
1264 if(mainmenupoint==2) rammenu();
1265 if(mainmenupoint==3) daemonmenu();
1266 while(1)
1267 {
1268 gp2x_nKeys=gp2x_joystick_read();
1269 if(!(gp2x_nKeys & GP2X_B)) break;
1270 }
1271 break;
1272 }
1273 }
1274 }
1275 while(cpuspeed_exit == 0);
1276}