From: notaz Date: Fri, 4 Oct 2013 00:18:59 +0000 (+0300) Subject: gp2x: various fixes, prepare for release X-Git-Tag: v1.91~20 X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=31f944ea8ceee82ec8b1451aa86b8d4a9d07367e;p=picodrive.git gp2x: various fixes, prepare for release --- diff --git a/platform/gp2x/Makefile b/platform/gp2x/Makefile index a3786c7..9d90ecc 100644 --- a/platform/gp2x/Makefile +++ b/platform/gp2x/Makefile @@ -1,10 +1,24 @@ +# release packaging makefile + +VER := $(shell head -n 1 ../common/version.h | \ + sed 's/.*"\(.*\)\.\(.*\)".*/\1\2/g') +BUILD := $(shell git describe HEAD | grep -- - | \ + sed -e 's/.*\-\(.*\)\-.*/\1/') +ifneq "$(BUILD)" "" +VER := $(VER)_$(BUILD) +endif + +all: rel + +../../tools/textfilter: + make -C ../../tools/ + readme.txt: ../../tools/textfilter ../base_readme.txt ../../tools/textfilter ../base_readme.txt $@ GP2X -VER ?= $(shell head -n 1 version.h | sed 's/.*"\(.*\)\.\(.*\)".*/\1\2/g') CODE940 = code940/pico940_v3.bin -rel: PicoDrive PicoDrive.gpe $(CODE940) readme.txt ../game_def.cfg \ +rel: ../../PicoDrive PicoDrive.gpe $(CODE940) readme.txt ../game_def.cfg \ PicoDrive.png PicoDrive_s.png PicoDrive_t.png \ warm_2.4.25.o warm_2.4.26-open2x.o warm_2.6.24.ko \ ../../pico/carthw.cfg diff --git a/platform/gp2x/PicoDrive.ini b/platform/gp2x/PicoDrive.ini new file mode 100644 index 0000000..06b816f --- /dev/null +++ b/platform/gp2x/PicoDrive.ini @@ -0,0 +1,6 @@ +[info] +name="PicoDrive" +path="/PicoDrive/PicoDrive.gpe" +icon="/PicoDrive/PicoDrive_s.png" +title="/PicoDrive/PicoDrive_t.png" +group="GAMES" diff --git a/platform/gp2x/PicoDrive_s.png b/platform/gp2x/PicoDrive_s.png new file mode 100644 index 0000000..f596616 Binary files /dev/null and b/platform/gp2x/PicoDrive_s.png differ diff --git a/platform/gp2x/PicoDrive_t.png b/platform/gp2x/PicoDrive_t.png new file mode 100644 index 0000000..79fc529 Binary files /dev/null and b/platform/gp2x/PicoDrive_t.png differ diff --git a/platform/gp2x/emu.c b/platform/gp2x/emu.c index 7db89c2..74bcbcb 100644 --- a/platform/gp2x/emu.c +++ b/platform/gp2x/emu.c @@ -407,7 +407,6 @@ void plat_video_flip(void) } /* XXX */ -#ifdef __GP2X__ unsigned int plat_get_ticks_ms(void) { return gp2x_get_ticks_ms(); @@ -417,7 +416,6 @@ unsigned int plat_get_ticks_us(void) { return gp2x_get_ticks_us(); } -#endif void plat_wait_till_us(unsigned int us_to) { @@ -562,7 +560,7 @@ static void vid_reset_mode(void) if (currentConfig.EmuOpt & EOPT_WIZ_TEAR_FIX) gp2x_mode = -gp2x_mode; - gp2x_video_changemode(gp2x_mode); + gp2x_video_changemode(gp2x_mode, Pico.m.pal); Pico.m.dirtyPal = 1; @@ -701,47 +699,20 @@ void plat_update_volume(int has_changed, int is_up) void pemu_sound_start(void) { - emu_sound_start(); - - plat_target_step_volume(¤tConfig.volume, 0); - -#if 0 - static int PsndRate_old = 0, PicoOpt_old = 0, pal_old = 0; + gp2x_soc_t soc; - PsndOut = NULL; + emu_sound_start(); - // prepare sound stuff if (currentConfig.EmuOpt & EOPT_EN_SOUND) { - int is_stereo = (PicoOpt & POPT_EN_STEREO) ? 1 : 0; - int snd_rate_oss = PsndRate; - gp2x_soc_t soc; - - memset(sndBuffer, 0, sizeof(sndBuffer)); - PsndOut = sndBuffer; - PicoWriteSound = oss_write_nonblocking; - plat_update_volume(0, 0); - - printf("starting audio: %i len: %i stereo: %i, pal: %i\n", - PsndRate, PsndLen, is_stereo, Pico.m.pal); - sndout_oss_start(snd_rate_oss, is_stereo, 1); - sndout_oss_setvol(currentConfig.volume, currentConfig.volume); - soc = soc_detect(); - if (soc == SOCID_POLLUX) + if (soc == SOCID_POLLUX) { PsndRate = pollux_get_real_snd_rate(PsndRate); - - #define SOUND_RERATE_FLAGS (POPT_EN_FM|POPT_EN_PSG|POPT_EN_STEREO|POPT_EXT_FM|POPT_EN_MCD_CDDA) - if (PsndRate != PsndRate_old || Pico.m.pal != pal_old || ((PicoOpt & POPT_EXT_FM) && crashed_940) || - ((PicoOpt ^ PicoOpt_old) & SOUND_RERATE_FLAGS)) { PsndRerate(Pico.m.frame_count ? 1 : 0); } - PsndRate_old = PsndRate; - PicoOpt_old = PicoOpt; - pal_old = Pico.m.pal; + plat_target_step_volume(¤tConfig.volume, 0); } -#endif } static const int sound_rates[] = { 44100, 32000, 22050, 16000, 11025, 8000 }; diff --git a/platform/gp2x/plat.c b/platform/gp2x/plat.c index 503e149..e5bf18a 100644 --- a/platform/gp2x/plat.c +++ b/platform/gp2x/plat.c @@ -24,7 +24,7 @@ void *gp2x_screens[4]; void (*gp2x_video_flip)(void); void (*gp2x_video_flip2)(void); -void (*gp2x_video_changemode_ll)(int bpp); +void (*gp2x_video_changemode_ll)(int bpp, int is_pal); void (*gp2x_video_setpalette)(int *pal, int len); void (*gp2x_video_RGB_setscaling)(int ln_offs, int W, int H); void (*gp2x_video_wait_vsync)(void); @@ -71,9 +71,9 @@ static struct in_default_bind in_gp2x_defbinds[] = { 0, 0, 0 } }; -void gp2x_video_changemode(int bpp) +void gp2x_video_changemode(int bpp, int is_pal) { - gp2x_video_changemode_ll(bpp); + gp2x_video_changemode_ll(bpp, is_pal); gp2x_current_bpp = bpp < 0 ? -bpp : bpp; } @@ -131,9 +131,8 @@ void plat_video_menu_enter(int is_rom_loaded) gp2x_video_flip2(); // switch to 16bpp - gp2x_video_changemode_ll(16); + gp2x_video_changemode_ll(16, 0); gp2x_video_RGB_setscaling(0, 320, 240); -printf("menu_enter\n"); } void plat_video_menu_begin(void) diff --git a/platform/gp2x/plat.h b/platform/gp2x/plat.h index d46c430..66acf3f 100644 --- a/platform/gp2x/plat.h +++ b/platform/gp2x/plat.h @@ -5,13 +5,13 @@ extern int gp2x_current_bpp; extern void (*gp2x_video_flip)(void); extern void (*gp2x_video_flip2)(void); /* negative bpp means rotated mode (for Wiz) */ -extern void (*gp2x_video_changemode_ll)(int bpp); +extern void (*gp2x_video_changemode_ll)(int bpp, int is_pal); extern void (*gp2x_video_setpalette)(int *pal, int len); extern void (*gp2x_video_RGB_setscaling)(int ln_offs, int W, int H); extern void (*gp2x_video_wait_vsync)(void); /* ??? */ -void gp2x_video_changemode(int bpp); +void gp2x_video_changemode(int bpp, int is_pal); void gp2x_memcpy_all_buffers(void *data, int offset, int len); void gp2x_memset_all_buffers(int offset, int byte, int len); diff --git a/platform/gp2x/vid_mmsp2.c b/platform/gp2x/vid_mmsp2.c index ea29486..c6c5413 100644 --- a/platform/gp2x/vid_mmsp2.c +++ b/platform/gp2x/vid_mmsp2.c @@ -62,9 +62,8 @@ static void gp2x_video_flip2_(void) g_screen_ptr = gp2x_screens[++screensel&1]; } -static void gp2x_video_changemode_ll_(int bpp) +static void gp2x_video_changemode_ll_(int bpp, int is_pal) { -printf("changemode %d\n", bpp); memregs[0x28DA>>1] = (((bpp+1)/8)<<9)|0xAB; /*8/15/16/24bpp...*/ memregs[0x290C>>1] = 320*((bpp+1)/8); /*line width in bytes*/ } @@ -163,7 +162,7 @@ void vid_mmsp2_init(void) void vid_mmsp2_finish(void) { gp2x_video_RGB_setscaling_(0, 320, 240); - gp2x_video_changemode_ll_(16); + gp2x_video_changemode_ll_(16, 0); memregs[0x290E>>1] = gp2x_screenaddr_old[0]; memregs[0x2910>>1] = gp2x_screenaddr_old[1]; diff --git a/platform/gp2x/vid_pollux.c b/platform/gp2x/vid_pollux.c index 308eb00..b0b28da 100644 --- a/platform/gp2x/vid_pollux.c +++ b/platform/gp2x/vid_pollux.c @@ -34,31 +34,21 @@ #include "../common/arm_utils.h" #include "plat.h" -#define fb_buf_count 4 -static unsigned int fb_paddr[fb_buf_count]; +#define FB_BUF_COUNT 4 +#define FB_MEM_SIZE (320*240*2 * FB_BUF_COUNT) + +static unsigned int fb_paddr[FB_BUF_COUNT]; static int fb_work_buf; static int fbdev = -1; -static unsigned short memtimex_old[2]; -static int last_pal_setting = 0; - - -/* misc */ -static void pollux_set_fromenv(const char *env_var) -{ - const char *set_string; - set_string = getenv(env_var); - if (set_string) - pollux_set(memregs, set_string); - else - printf("env var %s not defined.\n", env_var); -} /* video stuff */ static void pollux_video_flip(int buf_count) { - memregl[0x406C>>2] = fb_paddr[fb_work_buf]; + memregl[0x406C>>2] = memregl[0x446C>>2] = fb_paddr[fb_work_buf]; memregl[0x4058>>2] |= 0x10; + memregl[0x4458>>2] |= 0x10; + fb_work_buf++; if (fb_work_buf >= buf_count) fb_work_buf = 0; @@ -67,7 +57,7 @@ static void pollux_video_flip(int buf_count) static void gp2x_video_flip_(void) { - pollux_video_flip(fb_buf_count); + pollux_video_flip(FB_BUF_COUNT); } /* doulblebuffered flip */ @@ -76,7 +66,7 @@ static void gp2x_video_flip2_(void) pollux_video_flip(2); } -static void gp2x_video_changemode_ll_(int bpp) +static void gp2x_video_changemode_ll_(int bpp, int is_pal) { static int prev_bpp = 0; int code = 0, bytes = 2; @@ -100,8 +90,9 @@ static void gp2x_video_changemode_ll_(int bpp) memregl[0x4000>>2] |= 1 << 3; /* the above ioctl resets LCD timings, so set them here */ - snprintf(buff, sizeof(buff), "POLLUX_LCD_TIMINGS_%s", last_pal_setting ? "PAL" : "NTSC"); - pollux_set_fromenv(buff); + snprintf(buff, sizeof(buff), "POLLUX_LCD_TIMINGS_%s", + is_pal ? "PAL" : "NTSC"); + pollux_set_fromenv(memregs, buff); switch (abs(bpp)) { @@ -121,12 +112,18 @@ static void gp2x_video_changemode_ll_(int bpp) return; } - memregl[0x405c>>2] = bytes; - memregl[0x4060>>2] = bytes * (bpp < 0 ? 240 : 320); + // program both MLCs so that TV-out works + memregl[0x405c>>2] = memregl[0x445c>>2] = bytes; + memregl[0x4060>>2] = memregl[0x4460>>2] = + bytes * (bpp < 0 ? 240 : 320); r = memregl[0x4058>>2]; r = (r & 0xffff) | (code << 16) | 0x10; memregl[0x4058>>2] = r; + + r = memregl[0x4458>>2]; + r = (r & 0xffff) | (code << 16) | 0x10; + memregl[0x4458>>2] = r; } static void gp2x_video_setpalette_(int *pal, int len) @@ -153,26 +150,6 @@ static void gp2x_video_wait_vsync_(void) memregl[0x308c>>2] |= 1 << 10; } -/* RAM timings */ -static void set_ram_timings_(void) -{ - pollux_set_fromenv("POLLUX_RAM_TIMINGS"); -} - -static void unset_ram_timings_(void) -{ - int i; - - memregs[0x14802>>1] = memtimex_old[0]; - memregs[0x14804>>1] = memtimex_old[1] | 0x8000; - - for (i = 0; i < 0x100000; i++) - if (!(memregs[0x14804>>1] & 0x8000)) - break; - - printf("RAM timings reset to startup values.\n"); -} - void vid_pollux_init(void) { struct fb_fix_screeninfo fbfix; @@ -193,17 +170,17 @@ void vid_pollux_init(void) printf("framebuffer: \"%s\" @ %08lx\n", fbfix.id, fbfix.smem_start); fb_paddr[0] = fbfix.smem_start; - gp2x_screens[0] = mmap(0, 320*240*2*fb_buf_count, PROT_READ|PROT_WRITE, + gp2x_screens[0] = mmap(0, FB_MEM_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, memdev, fb_paddr[0]); if (gp2x_screens[0] == MAP_FAILED) { perror("mmap(gp2x_screens) failed"); exit(1); } - memset(gp2x_screens[0], 0, 320*240*2*fb_buf_count); + memset(gp2x_screens[0], 0, FB_MEM_SIZE); printf(" %p -> %08x\n", gp2x_screens[0], fb_paddr[0]); - for (i = 1; i < fb_buf_count; i++) + for (i = 1; i < FB_BUF_COUNT; i++) { fb_paddr[i] = fb_paddr[i-1] + 320*240*2; gp2x_screens[i] = (char *)gp2x_screens[i-1] + 320*240*2; @@ -212,8 +189,6 @@ void vid_pollux_init(void) fb_work_buf = 0; g_screen_ptr = gp2x_screens[0]; - set_ram_timings_(); - gp2x_video_flip = gp2x_video_flip_; gp2x_video_flip2 = gp2x_video_flip2_; gp2x_video_changemode_ll = gp2x_video_changemode_ll_; @@ -224,9 +199,8 @@ void vid_pollux_init(void) void vid_pollux_finish(void) { - munmap(gp2x_screens[0], 320*240*2 * fb_buf_count); + memset(gp2x_screens[0], 0, FB_MEM_SIZE); + munmap(gp2x_screens[0], FB_MEM_SIZE); close(fbdev); fbdev = -1; - - unset_ram_timings_(); } diff --git a/platform/libpicofe b/platform/libpicofe index 1bc471e..3901448 160000 --- a/platform/libpicofe +++ b/platform/libpicofe @@ -1 +1 @@ -Subproject commit 1bc471ebf1c85cf78f1862f5596a76f051e7112d +Subproject commit 39014486f9e50110d23dece007ce4c0ed90d15b1