wiz port wip
authornotaz <notaz@pixelinis>
Sat, 30 May 2009 19:47:25 +0000 (22:47 +0300)
committernotaz <notaz@pixelinis>
Sat, 30 May 2009 19:47:25 +0000 (22:47 +0300)
common.h
gp2x/Makefile
gp2x/arm_stub.S
gp2x/gp2x.c
gp2x/gp2x.h
gui.c
input.c
main.c
video.c

index f111348..b58228b 100644 (file)
--- a/common.h
+++ b/common.h
@@ -268,8 +268,6 @@ typedef u32 fixed16_16;
   #define vprintf(format, ap)                                                 \
     vfprintf(stderr, format, ap)                                              \
 
-  void gp2x_overclock(void);
-
 //  #define STDIO_DEBUG
 #endif
 
index c17af14..be06a86 100644 (file)
@@ -4,26 +4,42 @@
 
 # Global definitions
 
+ifeq ($(WIZ),1)
+PREFIX  = /opt/arm-openwiz-linux-gnu
+CC        = $(PREFIX)/bin/arm-openwiz-linux-gnu-gcc
+STRIP     = $(PREFIX)/bin/arm-openwiz-linux-gnu-strip
+else
 PREFIX  = /opt/open2x/gcc-4.1.1-glibc-2.3.6
 CC        = $(PREFIX)/bin/arm-open2x-linux-gcc
 STRIP     = $(PREFIX)/bin/arm-open2x-linux-strip
+endif
 
 OBJS      = main.o cpu.o memory.u video.o input.o sound.o gp2x.o gui.o        \
-            cheats.o zip.o cpu_threaded.z cpuctrl_mmsp2.o                     \
-            arm_stub.o video_blend.o flush_cache.o
+            cheats.o zip.o cpu_threaded.z arm_stub.o video_blend.o            \
+            flush_cache.o warm.o sys_cacheflush.o
 BIN       = gpsp.gpe 
 
 # Platform specific definitions 
 
 VPATH      += ..
 CFLAGS     += -DARM_ARCH -DGP2X_BUILD
+ifeq ($(WIZ),1)
+CFLAGS     += -DWIZ_BUILD
+endif
 # NOTE: -funroll-loops will slow down compiling considerably
 CFLAGS     += -O3 -std=c99 -msoft-float -funsigned-char -fno-common           \
               -fno-builtin                                                    \
 
 INCLUDES   = `$(PREFIX)/bin/sdl-config --cflags` -I$(PREFIX)/include
 LIBS       = `$(PREFIX)/bin/sdl-config --libs`               \
-              -lm -ldl -lpthread -lz -static
+              -lm -ldl -lpthread -lz
+ifneq ($(WIZ),1)
+OBJS       += cpuctrl_mmsp2.o
+LIBS       += -static
+endif
+
+CFLAGS     += -ggdb
+LIBS       += -ggdb
 
 # Compilation:
 
@@ -43,7 +59,7 @@ LIBS       = `$(PREFIX)/bin/sdl-config --libs`               \
 
 all:   $(OBJS)
        $(CC) $(OBJS) $(LIBS) -o $(BIN)  
-       $(STRIP) $(BIN)
+#      $(STRIP) $(BIN)
 
 clean:
        rm -f *.o *.u *.z $(BIN) 
index 17512ba..bff4ad0 100644 (file)
@@ -996,17 +996,25 @@ step_debug_arm:
   restore_flags()
   add pc, lr, #4                          @ return, skipping PC
 
-invalidate_icache_region:
-  mov r2, #0x0
-  swi 0x9f0002
 
-  bx lr
+#include "warm.h"
+
+invalidate_icache_region:
+  mov r2,r1
+  mov r1,r0
+  mov r0,#WOP_I_INVALIDATE
+  b warm_cache_op_range
 
 invalidate_cache_region:
-  mov r2, #0x1
-  swi 0x9f0002
+  sub r2,r1,r0
+  mov r1,r0
+  mov r0,#(WOP_D_CLEAN|WOP_I_INVALIDATE)
+  b warm_cache_op_range
 
-  bx lr
+@  mov r2, #0
+@  swi 0x9f0002
+
+@  bx lr
 
 
 .comm memory_map_read 0x8000
index 608907f..88f1731 100644 (file)
@@ -24,6 +24,7 @@
 #include <sys/soundcard.h>
 #include "../common.h"
 #include "gp2x.h"
+#include "warm.h"
 
 extern int main_cpuspeed(int argc, char *argv[]);
 extern SDL_Surface* screen;
@@ -31,9 +32,10 @@ extern SDL_Surface* screen;
 u32 gp2x_audio_volume = 74/2;
 u32 gpsp_gp2x_dev_audio = 0;
 u32 gpsp_gp2x_dev = 0;
+u32 gpsp_gp2x_gpiodev = 0;
 
-volatile u16 *gpsp_gp2x_memregs;
-volatile u32 *gpsp_gp2x_memregl;
+static volatile u16 *gpsp_gp2x_memregs;
+static volatile u32 *gpsp_gp2x_memregl;
 unsigned short *gp2x_memregs;
 
 static volatile u16 *MEM_REG;
@@ -55,7 +57,7 @@ s32 gp2x_load_mmuhack()
   return 0;
 }
 
-void gp2x_overclock()
+void gp2x_init()
 {
   gpsp_gp2x_dev = open("/dev/mem",   O_RDWR);
   gpsp_gp2x_dev_audio = open("/dev/mixer", O_RDWR);
@@ -63,6 +65,10 @@ void gp2x_overclock()
    (unsigned long  *)mmap(0, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED,
    gpsp_gp2x_dev, 0xc0000000);
   gpsp_gp2x_memregs = (unsigned short *)gpsp_gp2x_memregl;
+#ifdef WIZ_BUILD
+  gpsp_gp2x_gpiodev = open("/dev/GPIO", O_RDONLY);
+#endif
+  warm_init();
 
   clear_screen(0);
 //  main_cpuspeed(0, NULL);
@@ -76,9 +82,13 @@ void gp2x_quit()
   munmap((void *)gpsp_gp2x_memregl, 0x10000);
   close(gpsp_gp2x_dev_audio);
   close(gpsp_gp2x_dev);
+#ifdef WIZ_BUILD
+  close(gpsp_gp2x_gpiodev);
+#endif
 
-  chdir("/usr/gp2x");
-  execl("gp2xmenu", "gp2xmenu", NULL);
+  //chdir("/usr/gp2x");
+  //execl("gp2xmenu", "gp2xmenu", NULL);
+  exit(0);
 }
 
 void gp2x_sound_volume(u32 volume_up)
@@ -95,3 +105,44 @@ void gp2x_sound_volume(u32 volume_up)
   ioctl(gpsp_gp2x_dev_audio, SOUND_MIXER_WRITE_PCM, &volume);
 }
 
+u32 gpsp_gp2x_joystick_read(void)
+{
+#ifdef WIZ_BUILD
+  u32 value = 0;
+  read(gpsp_gp2x_gpiodev, &value, 4);
+  if(value & 0x02)
+   value |= 0x05;
+  if(value & 0x08)
+   value |= 0x14;
+  if(value & 0x20)
+   value |= 0x50;
+  if(value & 0x80)
+   value |= 0x41;
+  return value;
+#else
+  u32 value = (gpsp_gp2x_memregs[0x1198 >> 1] & 0x00FF);
+
+  if(value == 0xFD)
+   value = 0xFA;
+  if(value == 0xF7)
+   value = 0xEB;
+  if(value == 0xDF)
+   value = 0xAF;
+  if(value == 0x7F)
+   value = 0xBE;
+
+  return ~((gpsp_gp2x_memregs[0x1184 >> 1] & 0xFF00) | value |
+   (gpsp_gp2x_memregs[0x1186 >> 1] << 16));
+#endif
+}
+
+#ifdef WIZ_BUILD
+void cpuctrl_init(void)
+{
+}
+
+void set_FCLK(u32 MHZ)
+{
+}
+#endif
+
index f0b2914..15b4a90 100644 (file)
@@ -15,16 +15,20 @@ enum
   GP2X_B        = 1 << 13,
   GP2X_X        = 1 << 14,
   GP2X_Y        = 1 << 15,
+#ifdef WIZ_BUILD
+  GP2X_VOL_UP   = 1 << 16,
+  GP2X_VOL_DOWN = 1 << 17,
+  GP2X_PUSH     = 1 << 18,
+#else
   GP2X_VOL_DOWN = 1 << 22,
   GP2X_VOL_UP   = 1 << 23,
-  GP2X_PUSH     = 1 << 27
+  GP2X_PUSH     = 1 << 27,
+#endif
 };
 
 
 extern u32 gpsp_gp2x_dev_audio;
 extern u32 gpsp_gp2x_dev;
-extern volatile u16 *gpsp_gp2x_memregs;
-extern volatile u32 *gpsp_gp2x_memregl;
 
 void gp2x_sound_volume(u32 volume_up);
 void gp2x_quit();
diff --git a/gui.c b/gui.c
index 21e1023..8a90aac 100644 (file)
--- a/gui.c
+++ b/gui.c
@@ -1281,10 +1281,15 @@ u32 menu(u16 *original_screen)
              &audio_buffer_size_number, 10,
 #endif
 
+#ifdef PSP_BUILD
      "Set the size (in bytes) of the audio buffer. Larger values may result\n"
      "in slightly better performance at the cost of latency; the lowest\n"
      "value will give the most responsive audio.\n"
      "This option requires gpSP to be restarted before it will take effect.",
+#else
+     "Set the size (in bytes) of the audio buffer.\n"
+     "This option requires gpSP restart to take effect.",
+#endif
      10),
     submenu_option(NULL, "Back", "Return to the main menu.", 12)
   };
diff --git a/input.c b/input.c
index 2b17f50..3eee0b0 100644 (file)
--- a/input.c
+++ b/input.c
@@ -375,23 +375,7 @@ u32 gamepad_config_map[16] =
 };
 
 extern u32 gp2x_fps_debug;
-
-u32 gpsp_gp2x_joystick_read(void)
-{
-  u32 value = (gpsp_gp2x_memregs[0x1198 >> 1] & 0x00FF);
-
-  if(value == 0xFD)
-   value = 0xFA;
-  if(value == 0xF7)
-   value = 0xEB;
-  if(value == 0xDF)
-   value = 0xAF;
-  if(value == 0x7F)
-   value = 0xBE;
-
-  return ~((gpsp_gp2x_memregs[0x1184 >> 1] & 0xFF00) | value |
-   (gpsp_gp2x_memregs[0x1186 >> 1] << 16));
-}
+extern u32 gpsp_gp2x_joystick_read(void);
 
 gui_action_type get_gui_input()
 {
diff --git a/main.c b/main.c
index ac891cb..64329d0 100644 (file)
--- a/main.c
+++ b/main.c
@@ -49,6 +49,7 @@ u64 frame_count_initial_timestamp = 0;
 u64 last_frame_interval_timestamp;
 u32 gp2x_fps_debug = 0;
 
+void gp2x_init(void);
 void gp2x_quit(void);
 #else
 
@@ -194,14 +195,14 @@ int main(int argc, char *argv[])
 
 #ifdef GP2X_BUILD
   if(gp2x_load_mmuhack() == -1)
-    delay_us(2500000);
+;//    delay_us(2500000);
 #endif
 
 #ifdef PSP_BUILD
   sceKernelRegisterSubIntrHandler(PSP_VBLANK_INT, 0,
    vblank_interrupt_handler, NULL);
   sceKernelEnableSubIntr(PSP_VBLANK_INT, 0);
-#else
+#elif !defined(GP2X_BUILD)
   freopen("CON", "wb", stdout);
 #endif
 
@@ -229,7 +230,7 @@ int main(int argc, char *argv[])
 
 #ifdef GP2X_BUILD
   // Overclocking GP2X and MMU patch goes here
-  gp2x_overclock();
+  gp2x_init();
 #endif
 
 #ifdef GP2X_BUILD
diff --git a/video.c b/video.c
index 1240377..5a1181f 100644 (file)
--- a/video.c
+++ b/video.c
@@ -88,8 +88,13 @@ static void Ge_Finish_Callback(int id, void *arg)
 #else
 
 #ifdef GP2X_BUILD
-#include "SDL_gp2x.h"
-SDL_Surface *hw_screen;
+ #ifdef WIZ_BUILD
+  static void SDL_GP2X_AllowGfxMemory() {}
+  #include <SDL.h>
+ #else
+  #include "SDL_gp2x.h"
+ #endif
+ SDL_Surface *hw_screen;
 #endif
 SDL_Surface *screen;
 const u32 video_scale = 1;