From 2823a4c8196a02da86ee180cf55586d4e8c91a2f Mon Sep 17 00:00:00 2001 From: notaz Date: Thu, 21 May 2009 18:48:31 +0300 Subject: original source from gpsp09-2xb_src.tar.bz2 --- gp2x/cpu_speed.c | 1276 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1276 insertions(+) create mode 100644 gp2x/cpu_speed.c (limited to 'gp2x/cpu_speed.c') diff --git a/gp2x/cpu_speed.c b/gp2x/cpu_speed.c new file mode 100644 index 0000000..519a2f6 --- /dev/null +++ b/gp2x/cpu_speed.c @@ -0,0 +1,1276 @@ + +/* CPU/LCD/RAM-Tuner for GP2X Version 2.0 + Copyright (C) 2006 god_at_hell + original CPU-Overclocker (c) by Hermes/PS2Reality + the gamma-routine was provided by theoddbot + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "display.h" +#include "cpuctrl.h" +#include "gp2xminilib.h" +#include "speedtest.h" +#include "cmdline.h" +#include "daemon.h" + +int cpuspeed_exit = 0; + +unsigned COLORFONDO=0xB00000; // background-color +unsigned WHITE=0xFFFFFF; +unsigned TEXTBACK=0x0000B0; + +unsigned gp2x_nKeys=0; +int oldtime=0; +char pageshift; +short menupoint; +unsigned char cad[256]; +short cpusettings[2],dispsettings[3],ramsettings[10]; +extern int daemonsettings[8]; +extern unsigned MDIV,PDIV,SCALE; + +void cleardisp() +{ + ClearScreen(COLORFONDO); + sprintf(cad,"gpSP2X v0.9008 with CPU_SPEED"); + v_putcad(1,1,WHITE,COLORFONDO,cad); + v_putcad(28,5,WHITE,COLORFONDO,"Item Help"); + v_putcad(2,26,WHITE,COLORFONDO,"Start:Quit Stick:UP/DOWN"); + + DrawBox(WHITE); +} + +void itemhelp(char item[]) +{ + if(strcmp(item, "menu") == 0) + { + v_putcad(26,8,0xffffff,COLORFONDO,"Enter submenu"); + v_putcad(26,9,0xffffff,COLORFONDO,"with B."); + } + if(strcmp(item, "cpuclk") == 0) + { + v_putcad(26,8,0xffffff,COLORFONDO,"Choose a"); + v_putcad(26,9,0xffffff,COLORFONDO,"clockspeed"); + v_putcad(26,10,0xffffff,COLORFONDO,"with R/L or"); + v_putcad(26,11,0xffffff,COLORFONDO,"Vol UP/Down."); + v_putcad(26,13,0xffffff,COLORFONDO,"Valid speeds"); + v_putcad(26,14,0xffffff,COLORFONDO,"are:"); + v_putcad(26,15,0xffffff,COLORFONDO,"33 to 340Mhz"); + } + if(strcmp(item, "cpudiv") == 0) + { + v_putcad(26,8,0xffffff,COLORFONDO,"Choose with"); + v_putcad(26,9,0xffffff,COLORFONDO,"R/L."); + v_putcad(26,11,0xffffff,COLORFONDO,"The CPU-clock"); + v_putcad(26,12,0xffffff,COLORFONDO,"will be"); + v_putcad(26,13,0xffffff,COLORFONDO,"divided by"); + v_putcad(26,14,0xffffff,COLORFONDO,"this value."); + v_putcad(26,16,0xffffff,COLORFONDO,"Valid values"); + v_putcad(26,17,0xffffff,COLORFONDO,"are from"); + v_putcad(26,18,0xffffff,COLORFONDO,"1 to 8"); + } + if(strcmp(item, "test") == 0) + { + v_putcad(26,8,0xffffff,COLORFONDO,"Change with"); + v_putcad(26,9,0xffffff,COLORFONDO,"R/L."); + v_putcad(26,11,0xffffff,COLORFONDO,"The test"); + v_putcad(26,12,0xffffff,COLORFONDO,"checks how"); + v_putcad(26,13,0xffffff,COLORFONDO,"high you can"); + v_putcad(26,14,0xffffff,COLORFONDO,"clock the"); + v_putcad(26,15,0xffffff,COLORFONDO,"CPU."); + v_putcad(26,17,0xffffff,COLORFONDO,"Check the"); + v_putcad(26,18,0xffffff,COLORFONDO,"Readme for"); + v_putcad(26,19,0xffffff,COLORFONDO,"more infos."); + } + if(strcmp(item, "gotest") == 0) + { + v_putcad(26,8,0xffffff,COLORFONDO,"Start the"); + v_putcad(26,9,0xffffff,COLORFONDO,"test with B."); + } + if(strcmp(item, "clockgen") == 0) + { + v_putcad(26,8,0xffffff,COLORFONDO,"Change the"); + v_putcad(26,9,0xffffff,COLORFONDO,"clockgen with"); + v_putcad(26,10,0xffffff,COLORFONDO,"R/L."); + v_putcad(26,12,0xffffff,COLORFONDO,"FPLL is for"); + v_putcad(26,13,0xffffff,COLORFONDO,"FW 1.0"); + v_putcad(26,14,0xffffff,COLORFONDO,"UPLL for the"); + v_putcad(26,15,0xffffff,COLORFONDO,"rest."); + } + if(strcmp(item, "timing") == 0) + { + v_putcad(26,8,0xffffff,COLORFONDO,"Choose the"); + v_putcad(26,9,0xffffff,COLORFONDO,"LCD-Timing"); + v_putcad(26,10,0xffffff,COLORFONDO,"with R/L."); + v_putcad(26,12,0xffffff,COLORFONDO,"Valid are"); + v_putcad(26,13,0xffffff,COLORFONDO,"values from"); + v_putcad(26,14,0xffffff,COLORFONDO,"-20 to 36"); + v_putcad(26,15,0xffffff,COLORFONDO,"for FPLL"); + v_putcad(26,16,0xffffff,COLORFONDO,"and -6 to 10"); + v_putcad(26,17,0xffffff,COLORFONDO,"for UPLL"); + } + if(strcmp(item, "gamma") == 0) + { + v_putcad(26,8,0xffffff,COLORFONDO,"Change gamma"); + v_putcad(26,9,0xffffff,COLORFONDO,"with R/L or"); + v_putcad(26,10,0xffffff,COLORFONDO,"Vol UP/DOWN"); + v_putcad(26,12,0xffffff,COLORFONDO,"Valid are"); + v_putcad(26,13,0xffffff,COLORFONDO,"values from"); + v_putcad(26,14,0xffffff,COLORFONDO,"0.01 to 10.00"); + } + if(strcmp(item, "CAS") == 0) + { + v_putcad(26,8,0xffffff,COLORFONDO,"Choose the"); + v_putcad(26,9,0xffffff,COLORFONDO,"CAS Latency"); + v_putcad(26,10,0xffffff,COLORFONDO,"with R/L"); + v_putcad(26,12,0xffffff,COLORFONDO,"Valid are"); + v_putcad(26,13,0xffffff,COLORFONDO,"2 or 3 cycles"); + v_putcad(26,15,0xffffff,COLORFONDO,"Delay between"); + v_putcad(26,16,0xffffff,COLORFONDO,"registration"); + v_putcad(26,17,0xffffff,COLORFONDO,"of a READ"); + v_putcad(26,18,0xffffff,COLORFONDO,"command and"); + v_putcad(26,19,0xffffff,COLORFONDO,"outputdata."); + v_putcad(27,21,0x0000DD,COLORFONDO,"!INSTABLE!"); + } + if(strcmp(item, "tRC") == 0) + { + v_putcad(26,8,0xffffff,COLORFONDO,"Change with"); + v_putcad(26,9,0xffffff,COLORFONDO,"R/L."); + v_putcad(26,11,0xffffff,COLORFONDO,"Valid are"); + v_putcad(26,12,0xffffff,COLORFONDO,"1 to 16"); + v_putcad(26,13,0xffffff,COLORFONDO,"cycles."); + v_putcad(26,15,0xffffff,COLORFONDO,"ACTIVE to"); + v_putcad(26,16,0xffffff,COLORFONDO,"ACTIVE/"); + v_putcad(26,17,0xffffff,COLORFONDO,"AUTOREFRESH"); + v_putcad(26,18,0xffffff,COLORFONDO,"command"); + v_putcad(26,19,0xffffff,COLORFONDO,"period delay."); + } + if(strcmp(item, "tRAS") == 0) + { + v_putcad(26,8,0xffffff,COLORFONDO,"Change with"); + v_putcad(26,9,0xffffff,COLORFONDO,"R/L."); + v_putcad(26,11,0xffffff,COLORFONDO,"Valid are"); + v_putcad(26,12,0xffffff,COLORFONDO,"1 to 16"); + v_putcad(26,13,0xffffff,COLORFONDO,"cycles."); + v_putcad(26,15,0xffffff,COLORFONDO,"Delay between"); + v_putcad(26,16,0xffffff,COLORFONDO,"the ACTIVE"); + v_putcad(26,17,0xffffff,COLORFONDO,"and PRECHARGE"); + v_putcad(26,18,0xffffff,COLORFONDO,"commands."); + } + if(strcmp(item, "tWR") == 0) + { + v_putcad(26,8,0xffffff,COLORFONDO,"Change with"); + v_putcad(26,9,0xffffff,COLORFONDO,"R/L."); + v_putcad(26,11,0xffffff,COLORFONDO,"Valid are"); + v_putcad(26,12,0xffffff,COLORFONDO,"1 to 16"); + v_putcad(26,13,0xffffff,COLORFONDO,"cycles."); + v_putcad(26,15,0xffffff,COLORFONDO,"Write"); + v_putcad(26,16,0xffffff,COLORFONDO,"recovery time"); + v_putcad(26,17,0xffffff,COLORFONDO,"in cycles."); + } + if(strcmp(item, "tMRD") == 0) + { + v_putcad(26,8,0xffffff,COLORFONDO,"Change with"); + v_putcad(26,9,0xffffff,COLORFONDO,"R/L."); + v_putcad(26,11,0xffffff,COLORFONDO,"Valid are"); + v_putcad(26,12,0xffffff,COLORFONDO,"1 to 16"); + v_putcad(26,13,0xffffff,COLORFONDO,"cycles."); + v_putcad(26,15,0xffffff,COLORFONDO,"LOAD MODE"); + v_putcad(26,16,0xffffff,COLORFONDO,"REGISTER"); + v_putcad(26,17,0xffffff,COLORFONDO,"command cycle"); + v_putcad(26,18,0xffffff,COLORFONDO,"time."); + } + if(strcmp(item, "tRFC") == 0) + { + v_putcad(26,8,0xffffff,COLORFONDO,"Change with"); + v_putcad(26,9,0xffffff,COLORFONDO,"R/L."); + v_putcad(26,11,0xffffff,COLORFONDO,"Valid are"); + v_putcad(26,12,0xffffff,COLORFONDO,"1 to 16"); + v_putcad(26,13,0xffffff,COLORFONDO,"cycles."); + v_putcad(26,15,0xffffff,COLORFONDO,"AUTOREFRESH"); + v_putcad(26,16,0xffffff,COLORFONDO,"command"); + v_putcad(26,17,0xffffff,COLORFONDO,"period."); + } + if(strcmp(item, "tRP") == 0) + { + v_putcad(26,8,0xffffff,COLORFONDO,"Change with"); + v_putcad(26,9,0xffffff,COLORFONDO,"R/L."); + v_putcad(26,11,0xffffff,COLORFONDO,"Valid are"); + v_putcad(26,12,0xffffff,COLORFONDO,"1 to 16"); + v_putcad(26,13,0xffffff,COLORFONDO,"cycles."); + v_putcad(26,15,0xffffff,COLORFONDO,"PRECHARGE"); + v_putcad(26,16,0xffffff,COLORFONDO,"command"); + v_putcad(26,17,0xffffff,COLORFONDO,"period."); + } + if(strcmp(item, "tRCD") == 0) + { + v_putcad(26,8,0xffffff,COLORFONDO,"Change with"); + v_putcad(26,9,0xffffff,COLORFONDO,"R/L."); + v_putcad(26,11,0xffffff,COLORFONDO,"Valid are"); + v_putcad(26,12,0xffffff,COLORFONDO,"1 to 16"); + v_putcad(26,13,0xffffff,COLORFONDO,"cycles."); + v_putcad(26,15,0xffffff,COLORFONDO,"RAS to CAS"); + v_putcad(26,16,0xffffff,COLORFONDO,"Delay in"); + v_putcad(26,17,0xffffff,COLORFONDO,"cycles."); + } + if(strcmp(item, "REFPERD") == 0) + { + v_putcad(26,8,0xffffff,COLORFONDO,"Choose the"); + v_putcad(26,9,0xffffff,COLORFONDO,"RAM Refresh"); + v_putcad(26,9,0xffffff,COLORFONDO,"Period"); + v_putcad(26,10,0xffffff,COLORFONDO,"with R/L"); + v_putcad(26,12,0xffffff,COLORFONDO,"Valid are"); + v_putcad(26,13,0xffffff,COLORFONDO,"1 to 65535 "); + v_putcad(26,14,0xffffff,COLORFONDO,"cycles."); + v_putcad(26,16,0xffffff,COLORFONDO,"Max. cycles"); + v_putcad(26,17,0xffffff,COLORFONDO,"between"); + v_putcad(26,18,0xffffff,COLORFONDO,"AUTOREFRESH"); + v_putcad(26,19,0xffffff,COLORFONDO,"commands."); + v_putcad(26,21,0xFFFF,COLORFONDO,"Default ~250"); + } + if(strcmp(item, "DCLK_Div") == 0) + { + v_putcad(26,8,0xffffff,COLORFONDO,"Choose with"); + v_putcad(26,9,0xffffff,COLORFONDO,"R/L."); + v_putcad(26,11,0xffffff,COLORFONDO,"The CPU-clock"); + v_putcad(26,12,0xffffff,COLORFONDO,"will be"); + v_putcad(26,13,0xffffff,COLORFONDO,"divided by"); + v_putcad(26,14,0xffffff,COLORFONDO,"this value."); + v_putcad(26,15,0xffffff,COLORFONDO,"Valid values"); + v_putcad(26,17,0xffffff,COLORFONDO,"are from"); + v_putcad(26,18,0xffffff,COLORFONDO,"1 to 8"); + v_putcad(26,20,0xffffff,COLORFONDO,"RAM-Clock ="); + v_putcad(26,21,0xffffff,COLORFONDO,"CPU-Clock / 2"); + } +} + +short cpumenu() +{ + unsigned sysfreq=0, cpufreq, cpu_div; + + short test = 1; + + if(cpusettings[0] == -1) + { + //get the setted values from system + cpu_div = get_920_Div(); + sysfreq=get_freq_920_CLK(); + sysfreq*=cpu_div+1; + cpufreq=sysfreq/1000000; + } + else + { + //use old settings + cpufreq = cpusettings[0]; + cpu_div = cpusettings[1]; + } + + menupoint = 0; + + do + { + cleardisp(); + + //cpu menu + v_putcad(12,2,WHITE,COLORFONDO,"CPU Clock Setup"); + sprintf(cad,"CPU Frequency = %uMhz",cpufreq); + if(menupoint==0){v_putcad(2,5,0xffffff,TEXTBACK,cad);itemhelp("cpuclk");} + else v_putcad(2,5,0xffff,COLORFONDO,cad); + sprintf(cad,"CPU Divider: %u",cpu_div+1); + if(menupoint==1){v_putcad(2,7,0xffffff,TEXTBACK,cad);itemhelp("cpudiv");} + else v_putcad(2,7,0xffff,COLORFONDO,cad); + v_putcad(2,12,0xffff00,COLORFONDO,"CPU Speedtest"); + if(test==0) sprintf(cad,"Test 2: Primnumber"); + if(test==1) sprintf(cad,"Test 1: Walking Ant"); + if(menupoint==2){v_putcad(2,15,0xffffff,TEXTBACK,cad);itemhelp("test");} + else v_putcad(2,15,0xffff,COLORFONDO,cad); + if(menupoint==3){v_putcad(8,17,0xffffff,TEXTBACK,"GO!!!");itemhelp("gotest");} + else v_putcad(8,17,0xffff,COLORFONDO,"GO!!!"); + + gp2x_video_flip(); + + while(1) + { + gp2x_nKeys=gp2x_joystick_read(); + + if((gp2x_nKeys & GP2X_START)) + { + while(1) + { + gp2x_nKeys=gp2x_joystick_read(); + if(!(gp2x_nKeys & GP2X_START)) break; + } + cpusettings[0] = cpufreq; + cpusettings[1] = cpu_div; + return 0; + } + + if((gp2x_nKeys & GP2X_DOWN)) + { + menupoint++; + if(menupoint>3) menupoint=0; + delay_us(200000); + break; + } + + if((gp2x_nKeys & GP2X_UP)) + { + menupoint--; + if(menupoint<0) menupoint=3; + delay_us(200000); + break; + } + + if((gp2x_nKeys & GP2X_R)) + { + if (menupoint == 0) + { + cpufreq+=10; + if (cpufreq > 340) cpufreq = 33; + } + if (menupoint == 1) + { + cpu_div++; + if (cpu_div == 8) cpu_div = 0; + } + if (menupoint == 2) + { + test++; + if (test == 2) test = 0; + } + delay_us(200000); + break; + } + + if((gp2x_nKeys & GP2X_L)) + { + if (menupoint == 0) + { + cpufreq-=10; + if (cpufreq < 33) cpufreq = 340; + } + if (menupoint == 1) + { + cpu_div--; + if (cpu_div == -1) cpu_div = 7; + } + if (menupoint == 2) + { + cpu_div--; + if (cpu_div == -1) cpu_div = 1; + } + delay_us(200000); + break; + } + + if((gp2x_nKeys & GP2X_VOL_DOWN)) + { + if (menupoint == 0) + { + cpufreq++; + if (cpufreq == 340) cpufreq = 33; + } + delay_us(200000); + break; + } + + if((gp2x_nKeys & GP2X_VOL_UP)) + { + if (menupoint == 0) + { + cpufreq--; + if (cpufreq == 32) cpufreq = 340; + } + delay_us(200000); + break; + } + + if((gp2x_nKeys & GP2X_B)) + { + if (menupoint == 3) speedtest(test); + delay_us(200000); + break; + } + } + } + while(1); +} + +short lcdmenu() +{ + short clockgen, LCDClk; + float gamma; + + if(dispsettings[0] == -1) + { + //get the setted values from system + clockgen = get_Clkgen(); + LCDClk = get_LCDClk(clockgen); + gamma = 1.0; + } + else + { + //use old settings + clockgen = dispsettings[0]; + LCDClk = dispsettings[1]; + gamma = dispsettings[2]/100; + } + + menupoint = 0; + + do + { + cleardisp(); + + //display menu + v_putcad(9,2,WHITE,COLORFONDO,"Display Setting Setup"); + if (clockgen == 0) + { + sprintf(cad,"Clockgen = FPLL"); + if(menupoint==0){v_putcad(2,5,0xffffff,TEXTBACK,cad);itemhelp("clockgen");} + else v_putcad(2,5,0xffff,COLORFONDO,cad); + } + else + { + sprintf(cad,"Clockgen = UPLL"); + if(menupoint==0){v_putcad(2,5,0xffffff,TEXTBACK,cad);itemhelp("clockgen");} + else v_putcad(2,5,0xffff,COLORFONDO,cad); + } + sprintf(cad,"Timing: %i",LCDClk); + if(menupoint==1){v_putcad(2,7,0xffffff,TEXTBACK,cad);itemhelp("timing");} + else v_putcad(2,7,0xffff,COLORFONDO,cad); + sprintf(cad,"Gamma: %.2f",gamma); + if(menupoint==2){v_putcad(2,9,0xffffff,TEXTBACK,cad);itemhelp("gamma");} + else v_putcad(2,9,0xffff,COLORFONDO,cad); + + gp2x_video_flip(); + + while(1) + { + gp2x_nKeys=gp2x_joystick_read(); + + if((gp2x_nKeys & GP2X_START)) + { + while(1) + { + gp2x_nKeys=gp2x_joystick_read(); + if(!(gp2x_nKeys & GP2X_START)) break; + } + dispsettings[0] = clockgen; + dispsettings[1] = LCDClk; + dispsettings[2] = (int)(gamma*100); + return 0; + } + + if((gp2x_nKeys & GP2X_DOWN)) + { + menupoint++; + if(menupoint>2) menupoint=0; + delay_us(200000); + break; + } + + if((gp2x_nKeys & GP2X_UP)) + { + menupoint--; + if(menupoint<0) menupoint=2; + delay_us(200000); + break; + } + + if((gp2x_nKeys & GP2X_R)) + { + if (menupoint == 0) + { + clockgen++; + if (clockgen == 2) clockgen = 0; + } + if (menupoint == 1) + { + LCDClk++; + if (clockgen == 0) + { + if (LCDClk == 37) LCDClk = -20; + set_add_FLCDCLK(LCDClk); + } + else + { + if (LCDClk == 11) LCDClk = -6; + set_add_ULCDCLK(LCDClk); + } + } + if (menupoint == 2) + { + gamma += 0.2; + if (gamma > 10) gamma = 0.2; + set_gamma(gamma); + } + delay_us(200000); + break; + } + + if((gp2x_nKeys & GP2X_L)) + { + if (menupoint == 0) + { + clockgen--; + if (clockgen == -1) clockgen = 1; + } + if (menupoint == 1) + { + LCDClk--; + if(clockgen == 0) + { + if (LCDClk == -21) LCDClk = 36; + set_add_FLCDCLK(LCDClk); + } + else + { + if (LCDClk == -7) LCDClk = 10; + set_add_ULCDCLK(LCDClk); + } + } + if (menupoint == 2) + { + gamma -= 0.2; + if (gamma < 0.01) gamma = 10; + set_gamma(gamma); + } + delay_us(200000); + break; + } + + if((gp2x_nKeys & GP2X_VOL_DOWN)) + { + if (menupoint == 2) + { + gamma += 0.01; + if (gamma > 10) gamma = 0.01; + set_gamma(gamma); + } + delay_us(200000); + break; + } + + if((gp2x_nKeys & GP2X_VOL_UP)) + { + if (menupoint == 2) + { + gamma -= 0.01; + if (gamma < 0.01) gamma = 10; + set_gamma(gamma); + } + delay_us(200000); + break; + } + } + } + while(1); +} + +short rammenu() +{ + short CAS,tRC,tRAS,tWR,tMRD,tRFC,tRP,tRCD,DCLK_Div; + int REFPERD; + + if(ramsettings[0] == -1) + { + //get the setted values from system + CAS = get_CAS(); + tRC = get_tRC(); + tRAS = get_tRAS(); + tWR = get_tWR(); + tMRD = get_tMRD(); + tRFC = get_tRFC(); + tRP = get_tRP(); + tRCD = get_tRCD(); + REFPERD = get_REFPERD(); + DCLK_Div = get_DCLK_Div(); + } + else + { + //use old settings + CAS = ramsettings[0]; + tRC = ramsettings[1]; + tRAS = ramsettings[2]; + tWR = ramsettings[3]; + tMRD = ramsettings[4]; + tRFC = ramsettings[5]; + tRP = ramsettings[6]; + tRCD = ramsettings[7]; + REFPERD = ramsettings[8]; + DCLK_Div = ramsettings[9]; + } + + pageshift = 0; + menupoint = 0; + + do + { + cleardisp(); + + //ram menu + v_putcad(11,2,WHITE,COLORFONDO,"RAM Setting Setup"); + if(pageshift == 0) + { + sprintf(cad,"CAS: %u",CAS+2); + if(menupoint==0){v_putcad(2,5,0xffffff,TEXTBACK,cad);itemhelp("CAS");} + else v_putcad(2,5,0xffff,COLORFONDO,cad); + } + else v_putcad(13,5,0xffff,COLORFONDO,"^"); + sprintf(cad,"tRC: %u",tRC+1); + if(menupoint==1){v_putcad(2,7-pageshift,0xffffff,TEXTBACK,cad);itemhelp("tRC");} + else v_putcad(2,7-pageshift,0xffff,COLORFONDO,cad); + sprintf(cad,"tRAS: %u",tRAS+1); + if(menupoint==2){v_putcad(2,9-pageshift,0xffffff,TEXTBACK,cad);itemhelp("tRAS");} + else v_putcad(2,9-pageshift,0xffff,COLORFONDO,cad); + sprintf(cad,"tWR: %u",tWR+1); + if(menupoint==3){v_putcad(2,11-pageshift,0xffffff,TEXTBACK,cad);itemhelp("tWR");} + else v_putcad(2,11-pageshift,0xffff,COLORFONDO,cad); + sprintf(cad,"tMRD: %u",tMRD+1); + if(menupoint==4){v_putcad(2,13-pageshift,0xffffff,TEXTBACK,cad);itemhelp("tMRD");} + else v_putcad(2,13-pageshift,0xffff,COLORFONDO,cad); + sprintf(cad,"tRFC: %u",tRFC+1); + if(menupoint==5){v_putcad(2,15-pageshift,0xffffff,TEXTBACK,cad);itemhelp("tRFC");} + else v_putcad(2,15-pageshift,0xffff,COLORFONDO,cad); + sprintf(cad,"tRP: %u",tRP+1); + if(menupoint==6){v_putcad(2,17-pageshift,0xffffff,TEXTBACK,cad);itemhelp("tRP");} + else v_putcad(2,17-pageshift,0xffff,COLORFONDO,cad); + sprintf(cad,"tRCD: %u",tRCD+1); + if(menupoint==7){v_putcad(2,19-pageshift,0xffffff,TEXTBACK,cad);itemhelp("tRCD");} + else v_putcad(2,19-pageshift,0xffff,COLORFONDO,cad); + sprintf(cad,"Refresh Period: %u",REFPERD+1); + if(menupoint==8){v_putcad(2,21-pageshift,0xffffff,TEXTBACK,cad);itemhelp("REFPERD");} + else v_putcad(2,21-pageshift,0xffff,COLORFONDO,cad); + if(pageshift == 1) + { + sprintf(cad,"RAM Divider: %u",DCLK_Div+1); + if(menupoint==9){v_putcad(2,23,0xffffff,TEXTBACK,cad);itemhelp("DCLK_Div");} + else v_putcad(2,23,0xffff,COLORFONDO,cad); + } + else v_putcad(13,23,0xffff,COLORFONDO,"v"); + + + gp2x_video_flip(); + + while(1) + { + gp2x_nKeys=gp2x_joystick_read(); + + if((gp2x_nKeys & GP2X_START)) + { + while(1) + { + gp2x_nKeys=gp2x_joystick_read(); + if(!(gp2x_nKeys & GP2X_START)) break; + } + ramsettings[0] = CAS; + ramsettings[1] = tRC; + ramsettings[2] = tRAS; + ramsettings[3] = tWR; + ramsettings[4] = tMRD; + ramsettings[5] = tRFC; + ramsettings[6] = tRP; + ramsettings[7] = tRCD; + ramsettings[8] = REFPERD; + ramsettings[9] = DCLK_Div; + return 0; + } + + if((gp2x_nKeys & GP2X_DOWN)) + { + menupoint++; + if(menupoint==9) pageshift = 1; + if(menupoint>9) {menupoint=0; pageshift = 0;} + delay_us(200000); + break; + } + + if((gp2x_nKeys & GP2X_UP)) + { + menupoint--; + if(menupoint==0) pageshift = 0; + if(menupoint<0) { menupoint=9; pageshift = 1;} + delay_us(200000); + break; + } + + if((gp2x_nKeys & GP2X_R)) + { + if (menupoint == 0) + { + CAS++; + if (CAS == 2) CAS = 0; + } + if (menupoint == 1) + { + tRC++; + if (tRC == 16) tRC = 0; + } + if (menupoint == 2) + { + tRAS++; + if (tRAS == 16) tRAS = 0; + } + if (menupoint == 3) + { + tWR++; + if (tWR == 16) tWR = 0; + } + if (menupoint == 4) + { + tMRD++; + if (tMRD == 16) tMRD = 0; + } + if (menupoint == 5) + { + tRFC++; + if (tRFC == 16) tRFC = 0; + } + if (menupoint == 6) + { + tRP++; + if (tRP == 16) tRP = 0; + } + if (menupoint == 7) + { + tRCD++; + if (tRCD == 16) tRCD = 0; + } + if (menupoint == 8) + { + REFPERD += 10; + if (REFPERD == 0xffff) REFPERD = 0; + } + if (menupoint == 9) + { + DCLK_Div++; + if (DCLK_Div == 8) DCLK_Div = 0; + } + delay_us(200000); + break; + } + + if((gp2x_nKeys & GP2X_L)) + { + if (menupoint == 0) + { + CAS--; + if (CAS == -1) CAS = 1; + } + if (menupoint == 1) + { + tRC--; + if (tRC == -1) tRC = 15; + } + if (menupoint == 2) + { + tRAS--; + if (tRAS == -1) tRAS = 15; + } + if (menupoint == 3) + { + tWR--; + if (tWR == -1) tWR = 15; + } + if (menupoint == 4) + { + tMRD--; + if (tMRD == -1) tMRD = 15; + } + if (menupoint == 5) + { + tRFC--; + if (tRFC == -1) tRFC = 15; + } + if (menupoint == 6) + { + tRP--; + if (tRP == -1) tRP = 15; + } + if (menupoint == 7) + { + tRCD--; + if (tRCD == -1) tRCD = 15; + } + if (menupoint == 8) + { + REFPERD -= 10; + if (REFPERD == -1) REFPERD = 0xfffe; + } + if (menupoint == 9) + { + DCLK_Div--; + if (DCLK_Div == -1) DCLK_Div = 7; + } + delay_us(200000); + break; + } + } + } + while(1); +} + +int exit_cpu_speed(char* runfile) +{ + gp2x_deinit(); + cpuspeed_exit = 1; +#if 0 + system("sync"); + if(strcmp(runfile, "gp2xmenu") == 0) chdir("/usr/gp2x"); + execl(runfile,NULL); + exit(0); +#endif +} + +/****************************************************************************************************************************************/ +// MAIN +/****************************************************************************************************************************************/ + +int main_cpuspeed(int argc, char *argv[]) +{ + unsigned sysfreq=0; + int cpufreq, n; + short run = 0; + int start_daemon = 0; + short mainmenupoint = 0; + ramsettings[0] = -1; + ramsettings[1] = -1; + ramsettings[2] = -1; + ramsettings[3] = -1; + ramsettings[4] = -1; + ramsettings[5] = -1; + ramsettings[6] = -1; + ramsettings[7] = -1; + ramsettings[8] = -1; + ramsettings[9] = -1; + dispsettings[0] = -1; + dispsettings[1] = -100; + dispsettings[2] = -1; + cpusettings[0] = -1; + cpusettings[1] = -1; + daemonsettings[0] = -1; + daemonsettings[1] = 260; + daemonsettings[2] = 5; + daemonsettings[3] = 5; + daemonsettings[4] = GP2X_L | GP2X_R; + daemonsettings[5] = GP2X_VOL_DOWN; + daemonsettings[6] = GP2X_VOL_UP; + daemonsettings[7] = 1; + + char *runfile; + + FILE *settings; + char sets[41][40]; + char* comps[25] = { + "CPU-Clock\n","CPU-Div\n","FPLL\n","UPLL\n","Gamma\n","CAS\n","tRC\n", + "tRAS\n","tWR\n","tMRD\n","tRFC\n","tRP\n","tRCD\n","Refresh-Period\n","RAM-Div\n","Run\n", + "Daemon-Min\n","Daemon-Max\n","Daemon-Step\n","Daemon-Delay\n","Daemon-Hotkey\n","Daemon-Incr-Key\n","Daemon-Decr-Key\n", + "Daemon-OSD\n","Daemon-Run\n" + }; + + gp2x_init(16,44100,16,1,50); + cpuctrl_init(); // ATENCION: si no se hace esto, cuelgue seguro (aprovecho la definicion de rlyeh y debe ir despues de gp2x_init) + + settings = fopen ("./cpu_speed.cfg", "r"); + + if (settings == NULL) + { + printf("No file found\n"); + } + else + { + char *ReturnCode; + for(n=0; n<40; n++) + { + ReturnCode = fgets(sets[n],40,settings); + if (ReturnCode == NULL) + { + sets[40][0] = (char)n; + break; + } + } + + for(n=0; n<(int)sets[40][0]; n=n+2) + { + if(strcmp(sets[n],comps[0]) == 0) + { + if(atoi(sets[n+1]) > 33) + if(atoi(sets[n+1]) < 341) + cpusettings[0] = atoi(sets[n+1]); + } + if(strcmp(sets[n],comps[1]) == 0) + { + if(atoi(sets[n+1]) > 0) + if(atoi(sets[n+1]) < 9) + cpusettings[1] = atoi(sets[n+1])-1; + } + if(strcmp(sets[n],comps[2]) == 0) + { + if(atoi(sets[n+1]) > -21) + if(atoi(sets[n+1]) < 37) + dispsettings[0] = 0; + dispsettings[1] = atoi(sets[n+1]); + + } + if(strcmp(sets[n],comps[3]) == 0) + { + if(atoi(sets[n+1]) > -7) + if(atoi(sets[n+1]) < 11) + dispsettings[0] = 1; + dispsettings[1] = atoi(sets[n+1]); + } + if(strcmp(sets[n],comps[4]) == 0) + { + if(atof(sets[n+1]) > 0) + if(atof(sets[n+1]) <= 10) + dispsettings[2] = (int)(atof(sets[n+1])*100); + } + if(strcmp(sets[n],comps[5]) == 0) + { + if(atoi(sets[n+1]) > 1) + if(atoi(sets[n+1]) < 4) + ramsettings[0] = atoi(sets[n+1])-2; + } + if(strcmp(sets[n],comps[6]) == 0) + { + if(atoi(sets[n+1]) > 0) + if(atoi(sets[n+1]) < 17) + ramsettings[1] = atoi(sets[n+1])-1; + } + if(strcmp(sets[n],comps[7]) == 0) + { + if(atoi(sets[n+1]) > 0) + if(atoi(sets[n+1]) < 17) + ramsettings[2] = atoi(sets[n+1])-1; + } + if(strcmp(sets[n],comps[8]) == 0) + { + if(atoi(sets[n+1]) > 0) + if(atoi(sets[n+1]) < 17) + ramsettings[3] = atoi(sets[n+1])-1; + } + if(strcmp(sets[n],comps[9]) == 0) + { + if(atoi(sets[n+1]) > 0) + if(atoi(sets[n+1]) < 17) + ramsettings[4] = atoi(sets[n+1])-1; + } + if(strcmp(sets[n],comps[10]) == 0) + { + if(atoi(sets[n+1]) > 0) + if(atoi(sets[n+1]) < 17) + ramsettings[5] = atoi(sets[n+1])-1; + } + if(strcmp(sets[n],comps[11]) == 0) + { + if(atoi(sets[n+1]) > 0) + if(atoi(sets[n+1]) < 17) + ramsettings[6] = atoi(sets[n+1])-1; + } + if(strcmp(sets[n],comps[12]) == 0) + { + if(atoi(sets[n+1]) > 0) + if(atoi(sets[n+1]) < 17) + ramsettings[7] = atoi(sets[n+1])-1; + } + if(strcmp(sets[n],comps[13]) == 0) + { + if(atoi(sets[n+1]) > 0) + if(atoi(sets[n+1]) < 65536) + ramsettings[8] = atoi(sets[n+1])-1; + } + if(strcmp(sets[n],comps[14]) == 0) + { + if(atoi(sets[n+1]) > 0) + if(atoi(sets[n+1]) < 9) + ramsettings[9] = atoi(sets[n+1])-1; + } + if(strcmp(sets[n],comps[15]) == 0) + { + run = 1; + runfile = sets[n+1]; + } + if(strcmp(sets[n],comps[16]) == 0) + { + if(atoi(sets[n+1]) >= 33) + if(atoi(sets[n+1]) <= 340) + daemonsettings[0] = atoi(sets[n+1]); + } + if(strcmp(sets[n],comps[17]) == 0) + { + if(atoi(sets[n+1]) >= 33) + if(atoi(sets[n+1]) <= 340) + daemonsettings[1] = atoi(sets[n+1]); + } + if(strcmp(sets[n],comps[18]) == 0) + { + if(atoi(sets[n+1]) >= daemonsettings[1]) + if(atoi(sets[n+1]) <= 340) + daemonsettings[2] = atoi(sets[n+1]); + } + if(strcmp(sets[n],comps[19]) == 0) + { + daemonsettings[3] = (int)(atof(sets[n+1])*10+0.5); + if(daemonsettings[3] < 1) + daemonsettings[3] = 5; + } + if(strcmp(sets[n],comps[20]) == 0) + { + daemonsettings[4] = parse_key_sequence(sets[n+1]); + } + if(strcmp(sets[n],comps[21]) == 0) + { + daemonsettings[5] = parse_key_sequence(sets[n+1]); + } + if(strcmp(sets[n],comps[22]) == 0) + { + daemonsettings[6] = parse_key_sequence(sets[n+1]); + } + if(strcmp(sets[n],comps[23]) == 0) + { + daemonsettings[7] = (sets[n+1][1] == 'n' ? 1 : 0); + } + if(strcmp(sets[n],comps[24]) == 0) + { + start_daemon = 1; + } + } + } + + if(run == 1) + { + if (cpusettings[0] > -1) set_FCLK(cpusettings[0]); + if (cpusettings[1] > -1) set_920_Div(cpusettings[1]); + if (dispsettings[0] == 0) + if (dispsettings[1] > -100) set_add_FLCDCLK(dispsettings[1]); + if (dispsettings[0] == 1) + if (dispsettings[1] > -100) set_add_ULCDCLK(dispsettings[1]); + if (dispsettings[2] > -1) set_gamma((float)(dispsettings[2]/100)); + if (ramsettings[0] > -1) set_CAS(ramsettings[0]); + if (ramsettings[1] > -1) set_tRC(ramsettings[1]); + if (ramsettings[2] > -1) set_tRAS(ramsettings[2]); + if (ramsettings[3] > -1) set_tWR(ramsettings[3]); + if (ramsettings[4] > -1) set_tMRD(ramsettings[4]); + if (ramsettings[5] > -1) set_tRFC(ramsettings[5]); + if (ramsettings[6] > -1) set_tRP(ramsettings[6]); + if (ramsettings[7] > -1) set_tRCD(ramsettings[7]); + if (ramsettings[8] > -1) set_REFPERD(ramsettings[8]); + if (ramsettings[9] > -1) set_DCLK_Div(ramsettings[9]); + exit_cpu_speed(runfile); + return 0; + } + + sysfreq=get_freq_920_CLK(); + sysfreq*=get_920_Div()+1; + cpufreq=sysfreq/1000000; + +#if 0 + if(argc > 1) + { + if(strcmp(argv[1], "0") == 0) fallback(argc, argv); + else if(strcmp(argv[1], "1") == 0) fallback(argc, argv); + else if(strcmp(argv[1], "--help") == 0) cmdhelp(); + else if(strcmp(argv[1], "--daemon") == 0) cmd_daemon(argc, argv); + else if(strcmp(argv[1], "--kill-daemon") == 0) kill_running_daemon() || printf("no daemon running\r\n"); + else if(strcmp(argv[1], "--kill") == 0) kill_running_daemon() || printf("no daemon running\r\n"); + else cmdline(argc, argv); + gp2x_deinit(); + return 0; + } +#endif + + if(start_daemon) + start_daemon_by_settings(); + + set_gamma(1.0); + + do + { + cleardisp(); + + //main menu + v_putcad(27,26,WHITE,COLORFONDO,"Y:Save to SD"); + v_putcad(2,27,WHITE,COLORFONDO,"Select: Set setting and quit"); + itemhelp("menu"); + if(mainmenupoint==0) v_putcad(2,6,0xffffff,TEXTBACK,"> CPU Clock"); + else v_putcad(2,6,0xffff,COLORFONDO,"> CPU Clock"); + if(mainmenupoint==1) v_putcad(2,8,0xffffff,TEXTBACK,"> Display Settings"); + else v_putcad(2,8,0xffff,COLORFONDO,"> Display Settings"); + if(mainmenupoint==2) v_putcad(2,10,0xffffff,TEXTBACK,"> RAM Settings"); + else v_putcad(2,10,0xffff,COLORFONDO,"> RAM Settings"); + if(mainmenupoint==3) v_putcad(2,12,0xffffff,TEXTBACK,"> Daemon"); + else v_putcad(2,12,0xffff,COLORFONDO,"> Daemon"); + v_putcad(2,17,0xffff00,COLORFONDO,"Information:"); + sprintf(cad,"Sys.-Frq: %u Hz",sysfreq); + v_putcad(2,19,0xffffff,COLORFONDO,cad); + sprintf(cad,"UCLK-Frq: %u Hz",get_freq_UCLK()); + v_putcad(2,20,0xffffff,COLORFONDO,cad); + sprintf(cad,"ACLK-Frq: %u Hz",get_freq_ACLK()); + v_putcad(2,21,0xffffff,COLORFONDO,cad); + gp2x_video_flip(); + + while(1) + { + gp2x_nKeys=gp2x_joystick_read(); + + if((gp2x_nKeys & GP2X_START)) + { + while(1) + { + gp2x_nKeys=gp2x_joystick_read(); + if(!(gp2x_nKeys & GP2X_START)) break; + } + exit_cpu_speed("gp2xmenu"); + return 0; + } + + if((gp2x_nKeys & GP2X_SELECT)) + { + if (cpusettings[0] > -1) + { + set_FCLK(cpusettings[0]); + set_920_Div(cpusettings[1]); + } + if (ramsettings[0] > -1) + { + set_CAS(ramsettings[0]); + set_tRC(ramsettings[1]); + set_tRAS(ramsettings[2]); + set_tWR(ramsettings[3]); + set_tMRD(ramsettings[4]); + set_tRFC(ramsettings[5]); + set_tRP(ramsettings[6]); + set_tRCD(ramsettings[7]); + set_REFPERD(ramsettings[8]); + set_DCLK_Div(ramsettings[9]); + } + while(1) + { + gp2x_nKeys=gp2x_joystick_read(); + if(!(gp2x_nKeys & GP2X_START)) break; + } + exit_cpu_speed("gp2xmenu"); + return 0; + } + + if((gp2x_nKeys & GP2X_DOWN)) + { + mainmenupoint=mainmenupoint+1; + if(mainmenupoint>3) mainmenupoint=0; + delay_us(200000); + break; + } + + if((gp2x_nKeys & GP2X_UP)) + { + mainmenupoint=mainmenupoint-1; + if(mainmenupoint<0) mainmenupoint=3; + delay_us(200000); + break; + } + + if((gp2x_nKeys & GP2X_Y)) + { + settings = fopen("./cpu_speed.cfg", "w"); + if(cpusettings[0] > -1) + { + fprintf(settings,"CPU-Clock\n%u\n", cpusettings[0]); + fprintf(settings,"CPU-Div\n%i\n", cpusettings[1]+1); + } + if(dispsettings[0] > -1) + { + if(dispsettings[0] == 0) fprintf(settings,"FPLL\n%i\n", dispsettings[1]); + if(dispsettings[0] == 1) fprintf(settings,"UPLL\n%i\n", dispsettings[1]); + fprintf(settings,"Gamma\n%.2f\n", (float)(dispsettings[2]/100)); + } + if(ramsettings[0] > -1) + { + fprintf(settings,"CAS\n%i\n", ramsettings[0]+2); + fprintf(settings,"tRC\n%i\n", ramsettings[1]+1); + fprintf(settings,"tRAS\n%i\n", ramsettings[2]+1); + fprintf(settings,"tWR\n%i\n", ramsettings[3]+1); + fprintf(settings,"tMRD\n%i\n", ramsettings[4]+1); + fprintf(settings,"tRFC\n%i\n", ramsettings[5]+1); + fprintf(settings,"tRP\n%i\n", ramsettings[6]+1); + fprintf(settings,"tRCD\n%i\n", ramsettings[7]+1); + fprintf(settings,"Refresh-Period\n%i\n", ramsettings[8]+1); + fprintf(settings,"RAM-Div\n%i\n", ramsettings[9]+1); + } + if(daemonsettings[0] > -1) + { + fprintf(settings,"Daemon-Min\n%i\n", daemonsettings[0]); + fprintf(settings,"Daemon-Max\n%i\n", daemonsettings[1]); + fprintf(settings,"Daemon-Step\n%i\n", daemonsettings[2]); + fprintf(settings,"Daemon-Delay\n%.1f\n", daemonsettings[3]/10.f); + + char test[256]; + sprintf(test,""); + formatkey(test,daemonsettings[4]); + fprintf(settings,"Daemon-Hotkey\n%s\n",test); + sprintf(test,""); + formatkey(test,daemonsettings[5]); + fprintf(settings,"Daemon-Incr-Key\n%s\n",test); + sprintf(test,""); + formatkey(test,daemonsettings[6]); + fprintf(settings,"Daemon-Decr-Key\n%s\n",test); + + fprintf(settings,"Daemon-OSD\n%s\n",(daemonsettings[7]?"On":"Off")); + if(!access("/tmp/cpu_daemon.pid",R_OK)) + fprintf(settings,"Daemon-Run\nOn\n"); + + } + + + fclose(settings); + system("sync"); + while(1) + { + gp2x_nKeys=gp2x_joystick_read(); + if(!(gp2x_nKeys & GP2X_Y)) break; + } + break; + } + + + if((gp2x_nKeys & GP2X_B)) + { + if(mainmenupoint==0) cpumenu(); + if(mainmenupoint==1) lcdmenu(); + if(mainmenupoint==2) rammenu(); + if(mainmenupoint==3) daemonmenu(); + while(1) + { + gp2x_nKeys=gp2x_joystick_read(); + if(!(gp2x_nKeys & GP2X_B)) break; + } + break; + } + } + } + while(cpuspeed_exit == 0); +} -- cgit v1.2.3