cpu clock setup, save rom dir, cleanups
authornotaz <notaz@pixelinis>
Sat, 6 Jun 2009 20:33:15 +0000 (23:33 +0300)
committernotaz <notaz@pixelinis>
Sat, 6 Jun 2009 20:33:15 +0000 (23:33 +0300)
common.h
gp2x/Makefile
gp2x/cpuctrl_mmsp2.c [deleted file]
gp2x/flush_cache.S [deleted file]
gp2x/gp2x.c
gp2x/gp2x.h
gui.c
main.c
video.c

index b58228b..0f800d6 100644 (file)
--- a/common.h
+++ b/common.h
 
   #define file_close(filename_tag)                                            \
   {                                                                           \
 
   #define file_close(filename_tag)                                            \
   {                                                                           \
-    sync();                                                                   \
     fclose(filename_tag);                                                     \
     fclose(filename_tag);                                                     \
+    sync();                                                                   \
   }                                                                           \
 
 #else
   }                                                                           \
 
 #else
index cf0b3a5..7258644 100644 (file)
@@ -34,7 +34,6 @@ INCLUDES   = `$(PREFIX)/bin/sdl-config --cflags` -I$(PREFIX)/include
 LIBS       = `$(PREFIX)/bin/sdl-config --libs`               \
               -lm -ldl -lpthread -lz
 ifneq ($(WIZ),1)
 LIBS       = `$(PREFIX)/bin/sdl-config --libs`               \
               -lm -ldl -lpthread -lz
 ifneq ($(WIZ),1)
-OBJS       += cpuctrl_mmsp2.o
 LIBS       += -static
 endif
 
 LIBS       += -static
 endif
 
diff --git a/gp2x/cpuctrl_mmsp2.c b/gp2x/cpuctrl_mmsp2.c
deleted file mode 100644 (file)
index 60cd6dc..0000000
+++ /dev/null
@@ -1,486 +0,0 @@
-/*  cpuctrl.c for GP2X (CPU/LCD/RAM-Tuner Version 2.0)
-    Copyright (C) 2006 god_at_hell 
-    original CPU-Overclocker (c) by Hermes/PS2Reality 
-       the gamma-routine was provided by theoddbot
-       parts (c) Rlyehs Work
-
-    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
-
-*/
-
-
-/****************************************************************************************************************************************/
-// CPU CONTROL
-/****************************************************************************************************************************************/
-
-//#include <sys/mman.h>
-#include <math.h>
-#include <stdio.h>
-//#include "gp2xminilib.h"
-
-#define SYS_CLK_FREQ 7372800
-
-//from minimal library rlyeh
-
-//extern unsigned long   gp2x_dev[4];
-extern unsigned short *gp2x_memregs;
-
-// system registers
-static struct 
-{
-       unsigned short SYSCLKENREG,SYSCSETREG,FPLLVSETREG,DUALINT920,DUALINT940,DUALCTRL940,DISPCSETREG,MEMTIMEX0;
-       unsigned short MEMTIMEX1,MEMREFX,MLC_GAMM_BYPATH,MLC_GAMMA_A,MLC_GAMMA_D,YBNKLVL;
-}
-system_reg;
-
-volatile unsigned short *MEM_REG;
-unsigned MDIV,PDIV,SCALE;
-volatile unsigned *arm940code;
-
-void cpuctrl_init()
-{
-       MEM_REG=&gp2x_memregs[0];
-}
-
-void save_system_regs()
-{
-       system_reg.SYSCSETREG=MEM_REG[0x91c>>1];
-       system_reg.FPLLVSETREG=MEM_REG[0x912>>1];
-       system_reg.SYSCLKENREG=MEM_REG[0x904>>1];
-       system_reg.DUALINT920=MEM_REG[0x3B40>>1];       
-       system_reg.DUALINT940=MEM_REG[0x3B42>>1];
-       system_reg.DUALCTRL940=MEM_REG[0x3B48>>1];
-       system_reg.DISPCSETREG=MEM_REG[0x924>>1];
-       system_reg.MEMTIMEX0=MEM_REG[0x3802>>1];
-       system_reg.MEMTIMEX1=MEM_REG[0x3804>>1];
-       system_reg.MEMREFX=MEM_REG[0x3808>>1];
-       system_reg.MLC_GAMM_BYPATH=MEM_REG[0x2880>>1];
-       system_reg.MLC_GAMMA_A=MEM_REG[0x295C>>1];
-       system_reg.MLC_GAMMA_D=MEM_REG[0x295E>>1];
-       system_reg.YBNKLVL=MEM_REG[0x283A>>1];
-}
-
-void load_system_regs()
-{
-       MEM_REG[0x91c>>1]=system_reg.SYSCSETREG;
-       MEM_REG[0x910>>1]=system_reg.FPLLVSETREG;
-       MEM_REG[0x3B40>>1]=system_reg.DUALINT920;
-       MEM_REG[0x3B42>>1]=system_reg.DUALINT940;
-       MEM_REG[0x3B48>>1]=system_reg.DUALCTRL940;
-       MEM_REG[0x904>>1]=system_reg.SYSCLKENREG;
-       /* Set UPLLSETVREG to 0x4F02, which gives 80MHz */
-       MEM_REG[0x0914>>1] = 0x4F02;
-       /* Wait for clock change to start */
-       while (MEM_REG[0x0902>>1] & 2);
-       /* Wait for clock change to be verified */
-       while (MEM_REG[0x0916>>1] != 0x4F02);
-       MEM_REG[0x3802>>1]=system_reg.MEMTIMEX0;
-       MEM_REG[0x3804>>1]=system_reg.MEMTIMEX1;
-       MEM_REG[0x3808>>1]=system_reg.MEMREFX;
-       MEM_REG[0x2880>>1]=system_reg.MLC_GAMM_BYPATH;
-       MEM_REG[0x295C>>1]=system_reg.MLC_GAMMA_A;
-       MEM_REG[0x295E>>1]=system_reg.MLC_GAMMA_D;
-       MEM_REG[0x283A>>1]=system_reg.YBNKLVL;
-}
-
-
-void set_FCLK(unsigned MHZ)
-{
-       printf ("set CPU-Frequency = %uMHz\r\n",MHZ);
-       unsigned v;
-       unsigned mdiv,pdiv=3,scale=0;
-       MHZ*=1000000;
-       mdiv=(MHZ*pdiv)/SYS_CLK_FREQ;
-       //printf ("Old value = %04X\r",MEM_REG[0x924>>1]," ");
-       //printf ("APLL = %04X\r",MEM_REG[0x91A>>1]," ");
-       mdiv=((mdiv-8)<<8) & 0xff00;
-       pdiv=((pdiv-2)<<2) & 0xfc;
-       scale&=3;
-       v=mdiv | pdiv | scale;
-       MEM_REG[0x910>>1]=v;
-}
-
-unsigned get_FCLK()
-{
-       return MEM_REG[0x910>>1];
-}
-
-#if 0
-void set_add_FLCDCLK(int addclock)
-{
-       //Set LCD controller to use FPLL
-       printf ("...set to FPLL-Clockgen...\r\n");
-       printf ("set Timing-Prescaler = %i\r\n",addclock);
-       MEM_REG[0x924>>1]= 0x5A00 + ((addclock)<<8); 
-       //If you change the initial timing, don't forget to shift your intervall-borders in "cpu_speed.c"
-}
-
-void set_add_ULCDCLK(int addclock)
-{
-       //Set LCD controller to use UPLL
-       printf ("...set to UPLL-Clockgen...\r\n");
-       printf ("set Timing-Prescaler = %i\r\n",addclock);
-       MEM_REG[0x0924>>1] = 0x8900 + ((addclock)<<8);
-       //If you change the initial timing, don't forget to shift your intervall-borders in "cpu_speed.c"
-}
-
-unsigned get_LCDClk()
-{
-       if (MEM_REG[0x0924>>1] < 0x7A01) return((MEM_REG[0x0924>>1] - 0x5A00)>>8);
-       else return((MEM_REG[0x0924>>1] - 0x8900)>>8);
-}
-
-char get_Clkgen()
-{
-       if (MEM_REG[0x0924>>1] < 0x7A01) return(0);
-       else return(1);
-}
-
-unsigned get_freq_UCLK()
-{
-       unsigned i;
-       unsigned reg,mdiv,pdiv,scale;
-       i = MEM_REG[0x900>>1];
-       i = ((i >> 7) & 1) ;
-       if(i) return 0;
-       reg=MEM_REG[0x916>>1];
-       mdiv = ((reg & 0xff00) >> 8) + 8;
-       pdiv = ((reg & 0xfc) >> 2) + 2;
-       scale = reg & 3;        
-       return ((SYS_CLK_FREQ * mdiv) / (pdiv << scale));
-}
-
-unsigned get_freq_ACLK()
-{
-       unsigned i;
-       unsigned reg,mdiv,pdiv,scale;
-       i = MEM_REG[0x900>>1];
-       i = ((i >> 8) & 1) ;
-       if(i) return 0;
-       reg=MEM_REG[0x918>>1];
-       mdiv = ((reg & 0xff00) >> 8) + 8;
-       pdiv = ((reg & 0xfc) >> 2) + 2;
-       scale = reg & 3;
-       return ((SYS_CLK_FREQ * mdiv)/(pdiv << scale));
-}
-
-unsigned get_freq_920_CLK()
-{
-       unsigned i;
-       unsigned reg,mdiv,pdiv,scale;
-       reg=MEM_REG[0x912>>1];
-       mdiv = ((reg & 0xff00) >> 8) + 8;
-       pdiv = ((reg & 0xfc) >> 2) + 2;
-       scale = reg & 3;
-       MDIV=mdiv;
-       PDIV=pdiv;
-       SCALE=scale;
-       i = (MEM_REG[0x91c>>1] & 7)+1;
-       return ((SYS_CLK_FREQ * mdiv)/(pdiv << scale))/i;
-}
-
-unsigned get_freq_940_CLK()
-{
-       unsigned i;
-       unsigned reg,mdiv,pdiv,scale;
-       reg=MEM_REG[0x912>>1];
-       mdiv = ((reg & 0xff00) >> 8) + 8;
-       pdiv = ((reg & 0xfc) >> 2) + 2;
-       scale = reg & 3;
-       i = ((MEM_REG[0x91c>>1]>>3) & 7)+1;
-       return ((SYS_CLK_FREQ * mdiv) / (pdiv << scale))/i;
-}
-
-unsigned get_freq_DCLK()
-{
-       unsigned i;
-       unsigned reg,mdiv,pdiv,scale;
-       reg=MEM_REG[0x912>>1];
-       mdiv = ((reg & 0xff00) >> 8) + 8;
-       pdiv = ((reg & 0xfc) >> 2) + 2;
-       scale = reg & 3;
-       i = ((MEM_REG[0x91c>>1]>>6) & 7)+1;
-       return ((SYS_CLK_FREQ * mdiv) / (pdiv << scale))/i;
-}
-
-void set_920_Div(unsigned short div)
-{
-       printf ("set divider for CPU-Clock = %u\r\n",div+1);
-       unsigned short v;
-       v = MEM_REG[0x91c>>1] & (~0x3);
-       MEM_REG[0x91c>>1] = (div & 0x7) | v; 
-}
-
-unsigned short get_920_Div()
-{
-       return (MEM_REG[0x91c>>1] & 0x7); 
-}
-
-void set_940_Div(unsigned short div)
-{      
-       unsigned short v;
-       v = (unsigned short)( MEM_REG[0x91c>>1] & (~(0x7 << 3)));
-       MEM_REG[0x91c>>1] = ((div & 0x7) << 3) | v; 
-}
-
-unsigned short get_940_Div()
-{
-       return ((MEM_REG[0x91c>>1] >> 3) & 0x7); 
-}
-
-void set_DCLK_Div( unsigned short div )
-{
-       printf ("set divider for RAM-Clock = %u\r\n",div+1);
-       unsigned short v;
-       v = (unsigned short)( MEM_REG[0x91c>>1] & (~(0x7 << 6)));
-       MEM_REG[0x91c>>1] = ((div & 0x7) << 6) | v; 
-}
-
-unsigned short get_DCLK_Div()
-{
-       return ((MEM_REG[0x91c>>1] >> 6) & 0x7); 
-}
-
-unsigned short Disable_Int_920()
-{
-       unsigned short ret;
-       ret=MEM_REG[0x3B40>>1];
-       MEM_REG[0x3B40>>1]=0;
-       MEM_REG[0x3B44>>1]=0xffff;      
-       return ret;     
-}
-
-unsigned short Disable_Int_940()
-{
-       unsigned short ret;
-       ret=MEM_REG[0x3B42>>1];
-       MEM_REG[0x3B42>>1]=0;
-       MEM_REG[0x3B46>>1]=0xffff;      
-       return ret;     
-}
-
-unsigned get_state940()
-{
-       return MEM_REG[0x904>>1];       
-}
-
-
-void Enable_Int_920(unsigned short flag)
-{
-       MEM_REG[0x3B40>>1]=flag;
-}
-
-void Enable_Int_940(unsigned short flag)
-{
-       MEM_REG[0x3B42>>1]=flag;
-}
-
-void Disable_940()
-{
-       Disable_Int_940();
-       MEM_REG[0x3B48>>1]|= (1 << 7);
-       MEM_REG[0x904>>1]&=0xfffe;
-}
-
-void Load_940_code(unsigned *code,int size)
-{
-       unsigned *cp;
-       int i;
-       arm940code=(unsigned short *)mmap(0, 0x100000, PROT_READ|PROT_WRITE, MAP_SHARED, gp2x_dev[2], 0x03000000);
-       Disable_940();
-       cp=(unsigned *) code;
-       for (i = 0; i < size/4; i ++)
-       {
-               arm940code[i] = cp[i];
-       }
-       for (i = 0; i < 64; i ++)
-       {
-               arm940code[0x3FC0+i] = 0;
-       }
-       MEM_REG[0x3B48>>1]=(MEM_REG[0x3B48>>1]  & 0xFF00) | 0x03; // allow 940
-}
-
-void clock_940_off()
-{
-       MEM_REG[0x904>>1]&=0xfffe;
-}
-
-void clock_940_on()
-{
-       MEM_REG[0x904>>1]|=1;
-}
-#endif
-
-
-//--------------
-//Memory Timings
-//--------------
-
-//get
-
-unsigned get_CAS()
-{
-       return ((MEM_REG[0x3804>>1] >> 12) & 0x1);      
-}
-
-unsigned get_tRC()
-{
-       return ((MEM_REG[0x3804>>1] >> 8) & 0xF);       
-}
-
-unsigned get_tRAS()
-{
-       return ((MEM_REG[0x3804>>1] >> 4) & 0xF);       
-}
-
-unsigned get_tWR()
-{
-       return (MEM_REG[0x3804>>1] & 0xF);      
-}
-
-unsigned get_tMRD()
-{
-       return ((MEM_REG[0x3802>>1] >> 12) & 0xF);      
-}
-
-unsigned get_tRFC()
-{
-       return ((MEM_REG[0x3802>>1] >> 8) & 0xF);       
-}
-
-unsigned get_tRP()
-{
-       return ((MEM_REG[0x3802>>1] >> 4) & 0xF);       
-}
-
-unsigned get_tRCD()
-{
-       return (MEM_REG[0x3802>>1] & 0xF);      
-}
-
-unsigned get_REFPERD()
-{
-       return MEM_REG[0x3808>>1];      
-}
-
-
-//set
-
-void set_CAS(unsigned short timing)
-{
-       printf ("set CAS = %u\r\n",timing+2);
-       unsigned short v;
-       v = (unsigned short)(MEM_REG[0x3804>>1] & (~(0x1 << 12)));
-       MEM_REG[0x3804>>1] = ((timing & 0x1) << 12) | v;        
-}
-
-void set_tRC(unsigned short timing)
-{
-       printf ("set tRC = %u\r\n",timing+1);
-       unsigned short v;
-       v = (unsigned short)(MEM_REG[0x3804>>1] & (~(0xF << 8)));
-       MEM_REG[0x3804>>1] = ((timing & 0xF) << 8) | v; 
-}
-
-void set_tRAS(unsigned short timing)
-{
-       printf ("set tRAS = %u\r\n",timing+1);
-       unsigned short v;
-       v = (unsigned short)(MEM_REG[0x3804>>1] & (~(0xF << 4)));
-       MEM_REG[0x3804>>1] = ((timing & 0xF) << 4) | v; 
-}
-
-void set_tWR(unsigned short timing)
-{      
-       printf ("set tWR = %u\r\n",timing+1);
-       unsigned short v;
-       v = (unsigned short)(MEM_REG[0x3804>>1] & (~(0xF)));
-       MEM_REG[0x3804>>1] = (timing & 0xF) | v;        
-}
-
-void set_tMRD(unsigned short timing)
-{
-       printf ("set tMRD = %u\r\n",timing+1);
-       unsigned short v;
-       v = (unsigned short)(MEM_REG[0x3802>>1] & (~(0xF << 12)));
-       MEM_REG[0x3802>>1] = ((timing & 0xF) << 12) | v;        
-}
-
-void set_tRFC(unsigned short timing)
-{
-       printf ("set tRFC = %u\r\n",timing+1);
-       unsigned short v;
-       v = (unsigned short)(MEM_REG[0x3802>>1] & (~(0xF << 8)));
-       MEM_REG[0x3802>>1] = ((timing & 0xF) << 8) | v; 
-}
-
-void set_tRP(unsigned short timing)
-{
-       printf ("set tRP = %u\r\n",timing+1);
-       unsigned short v;
-       v = (unsigned short)(MEM_REG[0x3802>>1] & (~(0xF << 4)));
-       MEM_REG[0x3802>>1] = ((timing & 0xF) << 4) | v; 
-}
-
-void set_tRCD(unsigned short timing)
-{
-       printf ("set tRCD = %u\r\n",timing+1);
-       unsigned short v;
-       v = (unsigned short)(MEM_REG[0x3802>>1] & (~(0xF)));
-       MEM_REG[0x3802>>1] = (timing & 0xF) | v;        
-}
-
-void set_REFPERD(unsigned short timing)
-{
-       printf ("set Refresh Period = %u\r\n",timing+1);
-       MEM_REG[0x3808>>1] = timing;    
-}
-
-
-//-----
-//Gamma
-//-----
-
-void set_gamma(float gamma)
-{
-       printf ("set gamma = %f\r\n",gamma);
-       int i;
-       gamma = 1/gamma;
-
-    //enable gamma
-    MEM_REG[0x2880>>1]&=~(1<<12);
-
-    MEM_REG[0x295C>>1]=0;
-    for(i=0; i<256; i++)
-    {
-               unsigned char g;
-        unsigned short s;
-        g =(unsigned char)(255.0*pow(i/255.0,gamma));
-        s = (g<<8) | g;
-               MEM_REG[0x295E>>1]= s;
-        MEM_REG[0x295E>>1]= g;
-    }
-}
-
-unsigned get_YBNKLVL()
-{
-       return (MEM_REG[0x283A>>1] & 0x3FF);    
-}
-
-void set_YBNKLVL(unsigned short val)
-{
-       unsigned short temp = (unsigned short)(MEM_REG[0x3808>>1] & (~(0x3FF)));
-       MEM_REG[0x3808>>1] = (val & 0x3FF) | temp;      
-}
diff --git a/gp2x/flush_cache.S b/gp2x/flush_cache.S
deleted file mode 100644 (file)
index 4bde0e7..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-@ vim:filetype=armasm
-
-.global gp2x_flush_cache @ beginning_addr, end_addr, flags
-
-gp2x_flush_cache:
-    swi #0x9f0002
-    mov pc, lr
-
index a8ec704..2107e61 100644 (file)
 */
 
 
 */
 
 
+#define _BSD_SOURCE
+#define _GNU_SOURCE
 #include <sys/mman.h>
 #include <sys/ioctl.h>
 #include <sys/soundcard.h>
 #include <sys/mman.h>
 #include <sys/ioctl.h>
 #include <sys/soundcard.h>
+#include <sys/types.h>
+#include <unistd.h>
 #include "../common.h"
 #include "gp2x.h"
 #include "warm.h"
 
 #include "../common.h"
 #include "gp2x.h"
 #include "warm.h"
 
-extern int main_cpuspeed(int argc, char *argv[]);
-extern SDL_Surface* screen;
-
 u32 gp2x_audio_volume = 74/2;
 u32 gpsp_gp2x_dev_audio = 0;
 u32 gpsp_gp2x_dev = 0;
 u32 gp2x_audio_volume = 74/2;
 u32 gpsp_gp2x_dev_audio = 0;
 u32 gpsp_gp2x_dev = 0;
@@ -36,24 +37,6 @@ u32 gpsp_gp2x_gpiodev = 0;
 
 static volatile u16 *gpsp_gp2x_memregs;
 static volatile u32 *gpsp_gp2x_memregl;
 
 static volatile u16 *gpsp_gp2x_memregs;
 static volatile u32 *gpsp_gp2x_memregl;
-unsigned short *gp2x_memregs;
-
-s32 gp2x_load_mmuhack()
-{
-  s32 mmufd = open("/dev/mmuhack", O_RDWR);
-
-  if(mmufd < 0)
-  {
-    system("/sbin/insmod mmuhack.o");
-    mmufd = open("/dev/mmuhack", O_RDWR);
-  }
-
-  if(mmufd < 0)
-    return -1;
-
-  close(mmufd);
-  return 0;
-}
 
 #ifdef WIZ_BUILD
 #include <linux/fb.h>
 
 #ifdef WIZ_BUILD
 #include <linux/fb.h>
@@ -140,27 +123,55 @@ static void fb_video_exit()
 
 void gp2x_init()
 {
 
 void gp2x_init()
 {
+  FILE *f;
   gpsp_gp2x_dev = open("/dev/mem",   O_RDWR);
   gpsp_gp2x_dev_audio = open("/dev/mixer", O_RDWR);
   gpsp_gp2x_memregl =
    (unsigned long  *)mmap(0, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED,
    gpsp_gp2x_dev, 0xc0000000);
   gpsp_gp2x_memregs = (unsigned short *)gpsp_gp2x_memregl;
   gpsp_gp2x_dev = open("/dev/mem",   O_RDWR);
   gpsp_gp2x_dev_audio = open("/dev/mixer", O_RDWR);
   gpsp_gp2x_memregl =
    (unsigned long  *)mmap(0, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED,
    gpsp_gp2x_dev, 0xc0000000);
   gpsp_gp2x_memregs = (unsigned short *)gpsp_gp2x_memregl;
+  warm_init();
 #ifdef WIZ_BUILD
   gpsp_gp2x_gpiodev = open("/dev/GPIO", O_RDONLY);
 #ifdef WIZ_BUILD
   gpsp_gp2x_gpiodev = open("/dev/GPIO", O_RDONLY);
-  warm_init();
   fb_video_init();
 #endif
 
   fb_video_init();
 #endif
 
-//  clear_screen(0);
-//  main_cpuspeed(0, NULL);
-  gp2x_memregs = (void *)gpsp_gp2x_memregs;
-  cpuctrl_init();
+  f = fopen("romdir.txt", "r");
+  if (f != NULL)
+  {
+    char buff[256];
+    char *s = fgets(buff, sizeof(buff) - 1, f);
+    if (s)
+    {
+      int r = strlen(s);
+      while (r > 0 && isspace(buff[r-1]))
+        buff[--r] = 0;
+      chdir(buff);
+    }
+    fclose(f);
+  }
+
   gp2x_sound_volume(1);
 }
 
   gp2x_sound_volume(1);
 }
 
+#include <errno.h>
 void gp2x_quit()
 {
 void gp2x_quit()
 {
+  char buff[256];
+  FILE *f;
+
+  getcwd(buff, sizeof(buff));
+  chdir(main_path);
+  f = fopen("romdir.txt", "r+");
+  if (f != NULL)
+  {
+    fprintf(f, "%s", buff);
+    fclose(f);
+    truncate("romdir.txt", strlen(buff));
+    sync();
+  }
+
+  warm_finish();
 #ifdef WIZ_BUILD
   close(gpsp_gp2x_gpiodev);
   fb_video_exit();
 #ifdef WIZ_BUILD
   close(gpsp_gp2x_gpiodev);
   fb_video_exit();
@@ -169,6 +180,7 @@ void gp2x_quit()
   close(gpsp_gp2x_dev_audio);
   close(gpsp_gp2x_dev);
 
   close(gpsp_gp2x_dev_audio);
   close(gpsp_gp2x_dev);
 
+  fcloseall();
   //chdir("/usr/gp2x");
   //execl("gp2xmenu", "gp2xmenu", NULL);
   exit(0);
   //chdir("/usr/gp2x");
   //execl("gp2xmenu", "gp2xmenu", NULL);
   exit(0);
@@ -219,13 +231,29 @@ u32 gpsp_gp2x_joystick_read(void)
 #endif
 }
 
 #endif
 }
 
-#ifdef WIZ_BUILD
-void cpuctrl_init(void)
-{
-}
-
+// Fout = (m * Fin) / (p * 2^s)
 void set_FCLK(u32 MHZ)
 {
 void set_FCLK(u32 MHZ)
 {
-}
+  u32 v;
+  u32 mdiv, pdiv, sdiv = 0;
+#ifdef WIZ_BUILD
+  #define SYS_CLK_FREQ 27
+  // m = MDIV, p = PDIV, s = SDIV
+  pdiv = 9;
+  mdiv = (MHZ * pdiv) / SYS_CLK_FREQ;
+  mdiv &= 0x3ff;
+  v = (pdiv<<18) | (mdiv<<8) | sdiv;
+
+  gpsp_gp2x_memregl[0xf004>>2] = v;
+  gpsp_gp2x_memregl[0xf07c>>2] |= 0x8000;
+#else
+  #define SYS_CLK_FREQ 7372800
+  // m = MDIV + 8, p = PDIV + 2, s = SDIV
+  pdiv = 3;
+  mdiv = (MHZ * pdiv * 1000000) / SYS_CLK_FREQ;
+  mdiv &= 0xff;
+  v = ((mdiv-8)<<8) | ((pdiv-2)<<2) | sdiv;
+  gpsp_gp2x_memregs[0x910>>1] = v;
 #endif
 #endif
+}
 
 
index df7d141..a801485 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef GP2X_H
 #define GP2X_H
 
 #ifndef GP2X_H
 #define GP2X_H
 
+#include "warm.h"
+
 enum
 {
   GP2X_UP       = 1 << 0,
 enum
 {
   GP2X_UP       = 1 << 0,
@@ -33,23 +35,9 @@ extern u32 gpsp_gp2x_dev;
 void gp2x_sound_volume(u32 volume_up);
 void gp2x_quit();
 
 void gp2x_sound_volume(u32 volume_up);
 void gp2x_quit();
 
-// call this at first
-void cpuctrl_init(void);
-void save_system_regs(void);
-void cpuctrl_deinit(void);
-void set_display_clock_div(unsigned div);
-
 void set_FCLK(u32 MHZ);
 void set_FCLK(u32 MHZ);
-// 0 to 7 divider (freq = FCLK / (1 + div))
-void set_920_Div(u16 div);
-void set_DCLK_Div(u16 div);
-
-void Disable_940(void);
-void gp2x_video_wait_vsync(void);
-unsigned short get_920_Div();
-void set_940_Div(u16 div);
 
 
-s32 gp2x_load_mmuhack();
+void upscale_aspect(u16 *dst, u16 *src);
 
 /* wiz only */
 extern void *gpsp_gp2x_screen;
 
 /* wiz only */
 extern void *gpsp_gp2x_screen;
diff --git a/gui.c b/gui.c
index 18170f7..8e0c1d4 100644 (file)
--- a/gui.c
+++ b/gui.c
 #define COLOR_FRAMESKIP_BAR color16(15, 31, 31)
 #define COLOR_HELP_TEXT     color16(16, 40, 24)
 
 #define COLOR_FRAMESKIP_BAR color16(15, 31, 31)
 #define COLOR_HELP_TEXT     color16(16, 40, 24)
 
+#ifdef PSP_BUILD
+  #define get_clock_speed() \
+    clock_speed = (clock_speed_number + 1) * 33
+  #define get_clock_speed_number() \
+    clock_speed_number = (clock_speed / 33) - 1
+#elif defined(WIZ_BUILD)
+  #define get_clock_speed() \
+    clock_speed = 300 + (clock_speed_number * 3333) / 100
+  #define get_clock_speed_number() \
+    clock_speed_number = (clock_speed - 300) / 33
+#elif defined(GP2X_BUILD)
+  #define get_clock_speed() \
+    clock_speed = 150 + clock_speed_number * 10
+  #define get_clock_speed_number() \
+    clock_speed_number = (clock_speed - 150) / 10
+#else
+  #define get_clock_speed() 0
+  #define get_clock_speed_number() 0
+#endif
+
+const int
+#ifdef WIZ_BUILD
+  default_clock_speed = 533;
+#elif defined(GP2X_BUILD)
+  default_clock_speed = 200;
+#else
+  default_clock_speed = 333;
+#endif
 int sort_function(const void *dest_str_ptr, const void *src_str_ptr)
 {
   char *dest_str = *((char **)dest_str_ptr);
 int sort_function(const void *dest_str_ptr, const void *src_str_ptr)
 {
   char *dest_str = *((char **)dest_str_ptr);
@@ -676,7 +704,10 @@ s32 load_game_config_file()
       random_skip = file_options[2] % 2;
       clock_speed = file_options[3];
 
       random_skip = file_options[2] % 2;
       clock_speed = file_options[3];
 
-#ifdef GP2X_BUILD
+#ifdef WIZ_BUILD
+      if(clock_speed > 900)
+        clock_speed = 533;
+#elif defined(GP2X_BUILD)
       if(clock_speed >= 300)
         clock_speed = 200;
 #else
       if(clock_speed >= 300)
         clock_speed = 200;
 #else
@@ -710,11 +741,7 @@ s32 load_game_config_file()
   current_frameskip_type = auto_frameskip;
   frameskip_value = 4;
   random_skip = 0;
   current_frameskip_type = auto_frameskip;
   frameskip_value = 4;
   random_skip = 0;
-#ifdef GP2X_BUILD
-  clock_speed = 200;
-#else
-  clock_speed = 333;
-#endif
+  clock_speed = default_clock_speed;
 
   for(i = 0; i < 10; i++)
   {
 
   for(i = 0; i < 10; i++)
   {
@@ -959,9 +986,7 @@ void get_savestate_filename_noshot(u32 slot, u8 *name_buffer)
 u32 menu(u16 *original_screen)
 {
   u32 clock_speed_number;
 u32 menu(u16 *original_screen)
 {
   u32 clock_speed_number;
-#ifdef GP2X_BUILD
-  static u32 clock_speed_old = 200;
-#endif
+  static u32 clock_speed_old = default_clock_speed;
   u8 print_buffer[81];
   u32 _current_option = 0;
   gui_action_type gui_action;
   u8 print_buffer[81];
   u32 _current_option = 0;
   gui_action_type gui_action;
@@ -1017,11 +1042,7 @@ u32 menu(u16 *original_screen)
 
   void menu_quit()
   {
 
   void menu_quit()
   {
-  #ifdef PSP_BUILD
-    clock_speed = (clock_speed_number + 1) * 33;
-  #elif defined(GP2X_BUILD)
-    clock_speed = 150 + clock_speed_number * 10;
-  #endif
+    get_clock_speed();
     save_config_file();
     quit();
   }
     save_config_file();
     quit();
   }
@@ -1154,9 +1175,13 @@ u32 menu(u16 *original_screen)
 
   u8 *scale_options[] =
   {
 
   u8 *scale_options[] =
   {
+#ifdef WIZ_BUILD
+    "unscaled 3:2", "scaled 3:2 (slower)"
+#else
     "unscaled 3:2", "scaled 3:2", "fullscreen"
 #ifdef PSP_BUILD
     " 16:9"
     "unscaled 3:2", "scaled 3:2", "fullscreen"
 #ifdef PSP_BUILD
     " 16:9"
+#endif
 #endif
   };
 
 #endif
   };
 
@@ -1181,7 +1206,15 @@ u32 menu(u16 *original_screen)
 
   u8 *update_backup_options[] = { "Exit only", "Automatic" };
 
 
   u8 *update_backup_options[] = { "Exit only", "Automatic" };
 
-#ifdef GP2X_BUILD
+#ifdef WIZ_BUILD
+  u8 *clock_speed_options[] =
+  {
+    "300MHz", "333MHz", "366MHz", "400MHz", "433MHz",
+    "466MHz", "500MHz", "533MHz", "566MHz", "600MHz",
+    "633MHz", "666MHz", "700MHz", "733MHz", "766MHz",
+    "800MHz", "833MHz", "866MHz", "900MHz"
+  };
+#elif defined(GP2X_BUILD)
   u8 *clock_speed_options[] =
   {
     "150MHz", "160MHz", "170MHz", "180MHz", "190MHz",
   u8 *clock_speed_options[] =
   {
     "150MHz", "160MHz", "170MHz", "180MHz", "190MHz",
@@ -1315,11 +1348,7 @@ u32 menu(u16 *original_screen)
     cheat_option(9),
     string_selection_option(NULL, "Clock speed",
      clock_speed_options, &clock_speed_number,
     cheat_option(9),
     string_selection_option(NULL, "Clock speed",
      clock_speed_options, &clock_speed_number,
-#ifdef GP2X_BUILD
-     15,
-#else
-     10,
-#endif
+     sizeof(clock_speed_options) / sizeof(clock_speed_options[0]),
      "Change the clock speed of the device. Higher clock\n"
      "speed will yield better performance, but will drain\n"
      "battery life further.", 11),
      "Change the clock speed of the device. Higher clock\n"
      "speed will yield better performance, but will drain\n"
      "battery life further.", 11),
@@ -1525,11 +1554,13 @@ u32 menu(u16 *original_screen)
     }
   }
 
     }
   }
 
-#ifdef PSP_BUILD
-  clock_speed_number = (clock_speed / 33) - 1;
-#elif defined(GP2X_BUILD)
-  clock_speed_number = (clock_speed - 150) / 10;
-#endif
+  get_clock_speed_number();
+  if (clock_speed_number < 0 || clock_speed_number >=
+   sizeof(clock_speed_options) / sizeof(clock_speed_options[0]))
+  {
+    clock_speed = default_clock_speed;
+    get_clock_speed_number();
+  }
 
   video_resolution_large();
 
 
   video_resolution_large();
 
@@ -1680,18 +1711,17 @@ u32 menu(u16 *original_screen)
   set_gba_resolution(screen_scale);
   video_resolution_small();
 
   set_gba_resolution(screen_scale);
   video_resolution_small();
 
+  get_clock_speed();
+  if (clock_speed != clock_speed_old)
+  {
+    printf("about to set CPU clock to %iMHz\n", clock_speed);
   #ifdef PSP_BUILD
   #ifdef PSP_BUILD
-    clock_speed = (clock_speed_number + 1) * 33;
     scePowerSetClockFrequency(clock_speed, clock_speed, clock_speed / 2);
   #elif defined(GP2X_BUILD)
     scePowerSetClockFrequency(clock_speed, clock_speed, clock_speed / 2);
   #elif defined(GP2X_BUILD)
-    clock_speed = 150 + clock_speed_number * 10;
-    if (clock_speed != clock_speed_old)
-    {
-      printf("about to set CPU clock to %iMHz\n", clock_speed);
-      set_FCLK(clock_speed);
-      clock_speed_old = clock_speed;
-    }
+    set_FCLK(clock_speed);
   #endif
   #endif
+    clock_speed_old = clock_speed;
+  }
 
   SDL_PauseAudio(0);
 
 
   SDL_PauseAudio(0);
 
diff --git a/main.c b/main.c
index 571336f..3bdc850 100644 (file)
--- a/main.c
+++ b/main.c
@@ -193,11 +193,6 @@ int main(int argc, char *argv[])
   u8 load_filename[512];
   u8 bios_filename[512];
 
   u8 load_filename[512];
   u8 bios_filename[512];
 
-#ifdef GP2X_BUILD
-  if(gp2x_load_mmuhack() == -1)
-;//    delay_us(2500000);
-#endif
-
 #ifdef PSP_BUILD
   sceKernelRegisterSubIntrHandler(PSP_VBLANK_INT, 0,
    vblank_interrupt_handler, NULL);
 #ifdef PSP_BUILD
   sceKernelRegisterSubIntrHandler(PSP_VBLANK_INT, 0,
    vblank_interrupt_handler, NULL);
diff --git a/video.c b/video.c
index 8edea82..457a7b5 100644 (file)
--- a/video.c
+++ b/video.c
@@ -105,7 +105,6 @@ SDL_Surface *hw_screen;
 #endif
 SDL_Surface *screen;
 const u32 video_scale = 1;
 #endif
 SDL_Surface *screen;
 const u32 video_scale = 1;
-extern void gp2x_flush_cache(void *beginning_addr, void *end_addr, int flags);
 
 #define get_screen_pixels()                                                   \
   ((u16 *)screen->pixels)                                                     \
 
 #define get_screen_pixels()                                                   \
   ((u16 *)screen->pixels)                                                     \
@@ -3443,9 +3442,7 @@ void flip_screen()
     {
       SDL_BlitSurface(screen, NULL, hw_screen, NULL);
     }
     {
       SDL_BlitSurface(screen, NULL, hw_screen, NULL);
     }
-    /* it is unclear if this syscall takes virtual or physical addresses,
-     * but using virtual seems to work for me. */
-    gp2x_flush_cache(hw_screen->pixels, hw_screen->pixels + 320*240, 0);
+    warm_cache_op_all(WOP_D_CLEAN);
   }
 #else
   SDL_Flip(screen);
   }
 #else
   SDL_Flip(screen);
@@ -3570,7 +3567,7 @@ void init_video()
   screen = SDL_CreateRGBSurface(SDL_HWSURFACE, 240 * video_scale,
    160 * video_scale, 16, 0xFFFF, 0xFFFF, 0xFFFF, 0);
 
   screen = SDL_CreateRGBSurface(SDL_HWSURFACE, 240 * video_scale,
    160 * video_scale, 16, 0xFFFF, 0xFFFF, 0xFFFF, 0);
 
-  gp2x_load_mmuhack();
+  warm_change_cb_upper(WCB_C_BIT|WCB_B_BIT, 1);
 #else
   screen = SDL_SetVideoMode(240 * video_scale, 160 * video_scale, 16, 0);
 #endif
 #else
   screen = SDL_SetVideoMode(240 * video_scale, 160 * video_scale, 16, 0);
 #endif
@@ -3743,7 +3740,7 @@ void video_resolution_large()
     resolution_height = 240;
   SDL_ShowCursor(0);
 
     resolution_height = 240;
   SDL_ShowCursor(0);
 
-  gp2x_load_mmuhack();
+  warm_change_cb_upper(WCB_C_BIT|WCB_B_BIT, 1);
 #else
   screen = SDL_SetVideoMode(480, 272, 16, 0);
   resolution_width = 480;
 #else
   screen = SDL_SetVideoMode(480, 272, 16, 0);
   resolution_width = 480;
@@ -3775,7 +3772,7 @@ void video_resolution_small()
 
   SDL_ShowCursor(0);
 
 
   SDL_ShowCursor(0);
 
-  gp2x_load_mmuhack();
+  warm_change_cb_upper(WCB_C_BIT|WCB_B_BIT, 1);
 #else
   screen = SDL_SetVideoMode(small_resolution_width * video_scale,
    small_resolution_height * video_scale, 16, 0);
 #else
   screen = SDL_SetVideoMode(small_resolution_width * video_scale,
    small_resolution_height * video_scale, 16, 0);