diff options
author | notaz | 2011-10-09 22:15:00 +0300 |
---|---|---|
committer | notaz | 2011-10-10 00:25:59 +0300 |
commit | 9e0630ab54cbf6b6e3ec525f1088aa54e163c938 (patch) | |
tree | fc457c1fa4fe78a154ff912feadf764a67418298 | |
parent | 554a2220f2413cc29d7912ad3f7d91c9e64284cf (diff) | |
download | pcsx_rearmed-9e0630ab54cbf6b6e3ec525f1088aa54e163c938.tar.gz pcsx_rearmed-9e0630ab54cbf6b6e3ec525f1088aa54e163c938.tar.bz2 pcsx_rearmed-9e0630ab54cbf6b6e3ec525f1088aa54e163c938.zip |
add caanoo frontend files, move pandora files
-rw-r--r-- | Makefile | 6 | ||||
-rw-r--r-- | Makefile.caanoo | 22 | ||||
-rwxr-xr-x | frontend/320240/caanoo.gpe | 8 | ||||
-rw-r--r-- | frontend/320240/pcsx26.png | bin | 0 -> 4763 bytes | |||
-rw-r--r-- | frontend/320240/pcsx_rearmed.ini | 5 | ||||
-rw-r--r-- | frontend/320240/pollux_set.c | 389 | ||||
-rw-r--r-- | frontend/320240/skin/background.png | bin | 0 -> 36069 bytes | |||
-rw-r--r-- | frontend/320240/skin/font.png | bin | 0 -> 3185 bytes | |||
-rw-r--r-- | frontend/320240/skin/readme.txt (renamed from pandora/skin/readme.txt) | 0 | ||||
-rw-r--r-- | frontend/320240/skin/selector.png | bin | 0 -> 261 bytes | |||
-rw-r--r-- | frontend/320240/skin/skin.txt (renamed from pandora/skin/skin.txt) | 0 | ||||
-rw-r--r-- | frontend/pandora/pcsx.png (renamed from pandora/pcsx.png) | bin | 7981 -> 7981 bytes | |||
-rw-r--r-- | frontend/pandora/pcsx.pxml.templ (renamed from pandora/pcsx.pxml.templ) | 0 | ||||
-rwxr-xr-x | frontend/pandora/pcsx.sh (renamed from pandora/pcsx.sh) | 0 | ||||
-rw-r--r-- | frontend/pandora/picorestore.c (renamed from pandora/picorestore.c) | 0 | ||||
-rw-r--r-- | frontend/pandora/skin/background.png (renamed from pandora/skin/background.png) | bin | 183772 -> 183772 bytes | |||
-rw-r--r-- | frontend/pandora/skin/font.png (renamed from pandora/skin/font.png) | bin | 11264 -> 11264 bytes | |||
-rw-r--r-- | frontend/pandora/skin/readme.txt | 8 | ||||
-rw-r--r-- | frontend/pandora/skin/selector.png (renamed from pandora/skin/selector.png) | bin | 386 -> 386 bytes | |||
-rw-r--r-- | frontend/pandora/skin/skin.txt | 4 | ||||
-rw-r--r-- | readme.txt (renamed from pandora/readme.txt) | 0 |
21 files changed, 439 insertions, 3 deletions
@@ -192,8 +192,8 @@ PND_MAKE ?= $(HOME)/dev/pnd/src/pandora-libraries/testdata/scripts/pnd_make.sh VER ?= $(shell git describe master) rel: pcsx $(PLUGINS) \ - pandora/pcsx.sh pandora/pcsx.pxml.templ pandora/pcsx.png \ - pandora/picorestore pandora/readme.txt pandora/skin COPYING + frontend/pandora/pcsx.sh frontend/pandora/pcsx.pxml.templ frontend/pandora/pcsx.png \ + frontend/pandora/picorestore frontend/pandora/skin readme.txt COPYING rm -rf out mkdir -p out/plugins cp -r $^ out/ @@ -201,4 +201,4 @@ rel: pcsx $(PLUGINS) \ rm out/pcsx.pxml.templ mv out/*.so out/plugins/ mv out/plugins/gpu_neon.so out/plugins/gpuPEOPS2.so - $(PND_MAKE) -p pcsx_rearmed_$(VER).pnd -d out -x out/pcsx.pxml -i pandora/pcsx.png -c + $(PND_MAKE) -p pcsx_rearmed_$(VER).pnd -d out -x out/pcsx.pxml -i frontend/pandora/pcsx.png -c diff --git a/Makefile.caanoo b/Makefile.caanoo index 54e478c..e9228f5 100644 --- a/Makefile.caanoo +++ b/Makefile.caanoo @@ -3,3 +3,25 @@ export ARM_CORTEXA8=0 PLATFORM=caanoo include Makefile + +PLUGINS = plugins/spunull/spunull.so plugins/gpu_unai/gpuPCSX4ALL.so \ + plugins/gpu_neon/gpu_neon.so + +# ----------- release ----------- + +rel_caanoo: pcsx $(PLUGINS) \ + frontend/320240/caanoo.gpe frontend/320240/pcsx26.png \ + frontend/320240/skin \ + frontend/warm/bin/warm_2.6.24.ko frontend/320240/pollux_set \ + frontend/320240/pcsx_rearmed.ini readme.txt COPYING + rm -rf out + mkdir -p out/pcsx_rearmed/plugins + cp -r $^ out/pcsx_rearmed/ + mv out/pcsx_rearmed/*.so out/pcsx_rearmed/plugins/ + mv out/pcsx_rearmed/plugins/gpu_neon.so out/pcsx_rearmed/plugins/gpuPEOPS2.so + mv out/pcsx_rearmed/caanoo.gpe out/pcsx_rearmed/pcsx.gpe + mv out/pcsx_rearmed/pcsx_rearmed.ini out/ + mkdir out/pcsx_rearmed/lib/ + cp ./lib/libbz2.so.1 out/pcsx_rearmed/lib/ + cd out && zip -9 -r ../pcsx_rearmed_$(VER)_caanoo.zip * + diff --git a/frontend/320240/caanoo.gpe b/frontend/320240/caanoo.gpe new file mode 100755 index 0000000..f6e72e5 --- /dev/null +++ b/frontend/320240/caanoo.gpe @@ -0,0 +1,8 @@ +#!/bin/sh + +./pollux_set "ram_timings=3,9,4,1,1,1,1" + +./pcsx "$@" + +cd /usr/gp2x +exec ./gp2xmenu diff --git a/frontend/320240/pcsx26.png b/frontend/320240/pcsx26.png Binary files differnew file mode 100644 index 0000000..ed220a0 --- /dev/null +++ b/frontend/320240/pcsx26.png diff --git a/frontend/320240/pcsx_rearmed.ini b/frontend/320240/pcsx_rearmed.ini new file mode 100644 index 0000000..aeba53d --- /dev/null +++ b/frontend/320240/pcsx_rearmed.ini @@ -0,0 +1,5 @@ +[info] +name="PCSX ReARMed" +icon="/pcsx_rearmed/pcsx26.png" +path="/pcsx_rearmed/pcsx.gpe" +group="GAMES" diff --git a/frontend/320240/pollux_set.c b/frontend/320240/pollux_set.c new file mode 100644 index 0000000..f49e777 --- /dev/null +++ b/frontend/320240/pollux_set.c @@ -0,0 +1,389 @@ +/* + * quick tool to set various timings for Wiz + * + * Copyright (c) GraÅžvydas "notaz" Ignotas, 2009 + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the organization nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * HTOTAL: X VTOTAL: 341 + * HSWIDTH: 1 VSWIDTH: 0 + * HASTART: 37 VASTART: 17 + * HAEND: 277 VAEND: 337 + * + * 120Hz + * pcd 8, 447: + 594us + * pcd 9, 397: + 36us + * pcd 10, 357: - 523us + * pcd 11, 325: +1153us + * + * 'lcd_timings=397,1,37,277,341,0,17,337;dpc_clkdiv0=9' + * 'ram_timings=2,9,4,1,1,1,1' + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +//#include "pollux_set.h" +#define BINARY + +/* parse stuff */ +static int parse_lcd_timings(const char *str, void *data) +{ + int *lcd_timings = data; + const char *p = str; + int ret, c; + ret = sscanf(str, "%d,%d,%d,%d,%d,%d,%d,%d", + &lcd_timings[0], &lcd_timings[1], &lcd_timings[2], &lcd_timings[3], + &lcd_timings[4], &lcd_timings[5], &lcd_timings[6], &lcd_timings[7]); + if (ret != 8) + return -1; + /* skip seven commas */ + for (c = 0; c < 7 && *p != 0; p++) + if (*p == ',') + c++; + if (c != 7) + return -1; + /* skip last number */ + while ('0' <= *p && *p <= '9') + p++; + + return p - str; +} + +static int parse_ram_timings(const char *str, void *data) +{ + int *ram_timings = data; + const char *p = str; + int ret, c; + float cas; + + ret = sscanf(p, "%f,%d,%d,%d,%d,%d,%d", + &cas, &ram_timings[1], &ram_timings[2], &ram_timings[3], + &ram_timings[4], &ram_timings[5], &ram_timings[6]); + if (ret != 7) + return -1; + if (cas == 2) + ram_timings[0] = 1; + else if (cas == 2.5) + ram_timings[0] = 2; + else if (cas == 3) + ram_timings[0] = 3; + else + return -1; + for (c = 0; c < 6 && *p != 0; p++) + if (*p == ',') + c++; + if (c != 6) + return -1; + while ('0' <= *p && *p <= '9') + p++; + + return p - str; +} + +static int parse_decimal(const char *str, void *data) +{ + char *ep; + + *(int *)data = strtoul(str, &ep, 10); + if (ep == str) + return -1; + + return ep - str; +} + +/* validate and apply stuff */ +static int apply_lcd_timings(volatile unsigned short *memregs, void *data) +{ + int *lcd_timings = data; + int i; + + for (i = 0; i < 8; i++) { + if (lcd_timings[i] & ~0xffff) { + fprintf(stderr, "pollux_set: invalid lcd timing %d: %d\n", i, lcd_timings[i]); + return -1; + } + } + + for (i = 0; i < 8; i++) + memregs[(0x307c>>1) + i] = lcd_timings[i]; + + return 0; +} + +static const struct { + signed char adj; /* how to adjust value passed by user */ + signed short min; /* range of */ + signed short max; /* allowed values (inclusive) */ +} +ram_ranges[] = { + { 0, 1, 3 }, /* cas (cl) */ + { -2, 0, 15 }, /* trc */ + { -2, 0, 15 }, /* tras */ + { 0, 0, 15 }, /* twr */ + { 0, 0, 15 }, /* tmrd */ + { 0, 0, 15 }, /* trp */ + { 0, 0, 15 }, /* trcd */ +}; + +static int apply_ram_timings(volatile unsigned short *memregs, void *data) +{ + int *ram_timings = data; + int i, val; + + for (i = 0; i < 7; i++) + { + ram_timings[i] += ram_ranges[i].adj; + if (ram_timings[i] < ram_ranges[i].min || ram_timings[i] > ram_ranges[i].max) { + fprintf(stderr, "pollux_set: invalid RAM timing %d\n", i); + return -1; + } + } + + val = memregs[0x14802>>1] & 0x0f00; + val |= (ram_timings[4] << 12) | (ram_timings[5] << 4) | ram_timings[6]; + memregs[0x14802>>1] = val; + + val = memregs[0x14804>>1] & 0x4000; + val |= (ram_timings[0] << 12) | (ram_timings[1] << 8) | + (ram_timings[2] << 4) | ram_timings[3]; + val |= 0x8000; + memregs[0x14804>>1] = val; + + for (i = 0; i < 0x100000 && (memregs[0x14804>>1] & 0x8000); i++) + ; + + return 0; +} + +static int apply_dpc_clkdiv0(volatile unsigned short *memregs, void *data) +{ + int pcd = *(int *)data; + int tmp; + + if ((pcd - 1) & ~0x3f) { + fprintf(stderr, "pollux_set: invalid lcd clkdiv0: %d\n", pcd); + return -1; + } + + pcd = (pcd - 1) & 0x3f; + tmp = memregs[0x31c4>>1]; + memregs[0x31c4>>1] = (tmp & ~0x3f0) | (pcd << 4); + + return 0; +} + +static int apply_cpuclk(volatile unsigned short *memregs, void *data) +{ + volatile unsigned int *memregl = (volatile void *)memregs; + int mhz = *(int *)data; + int adiv, mdiv, pdiv, sdiv = 0; + int i, vf000, vf004; + + // m = MDIV, p = PDIV, s = SDIV + #define SYS_CLK_FREQ 27 + pdiv = 9; + mdiv = (mhz * pdiv) / SYS_CLK_FREQ; + if (mdiv & ~0x3ff) + return -1; + vf004 = (pdiv<<18) | (mdiv<<8) | sdiv; + + // attempt to keep AHB the divider close to 250, but not higher + for (adiv = 1; mhz / adiv > 250; adiv++) + ; + + vf000 = memregl[0xf000>>2]; + vf000 = (vf000 & ~0x3c0) | ((adiv - 1) << 6); + memregl[0xf000>>2] = vf000; + memregl[0xf004>>2] = vf004; + memregl[0xf07c>>2] |= 0x8000; + for (i = 0; (memregl[0xf07c>>2] & 0x8000) && i < 0x100000; i++) + ; + + printf("clock set to %dMHz, AHB set to %dMHz\n", mhz, mhz / adiv); + return 0; +} + +static int lcd_timings[8]; +static int ram_timings[7]; +static int dpc_clkdiv0; +static int cpuclk; + +static const char lcd_t_help[] = "htotal,hswidth,hastart,haend,vtotal,vswidth,vastart,vaend"; +static const char ram_t_help[] = "CAS,tRC,tRAS,tWR,tMRD,tRP,tRCD"; + +static const struct { + const char *name; + const char *help; + int (*parse)(const char *str, void *data); + int (*apply)(volatile unsigned short *memregs, void *data); + void *data; +} +all_params[] = { + { "lcd_timings", lcd_t_help, parse_lcd_timings, apply_lcd_timings, lcd_timings }, + { "ram_timings", ram_t_help, parse_ram_timings, apply_ram_timings, ram_timings }, + { "dpc_clkdiv0", "divider", parse_decimal, apply_dpc_clkdiv0, &dpc_clkdiv0 }, + { "clkdiv0", "divider", parse_decimal, apply_dpc_clkdiv0, &dpc_clkdiv0 }, /* alias */ + { "cpuclk", "MHZ", parse_decimal, apply_cpuclk, &cpuclk }, +}; +#define ALL_PARAM_COUNT (sizeof(all_params) / sizeof(all_params[0])) + +/* + * set timings based on preformated string + * returns 0 on success. + */ +int pollux_set(volatile unsigned short *memregs, const char *str) +{ + int parsed_params[ALL_PARAM_COUNT]; + int applied_params[ALL_PARAM_COUNT]; + int applied_something = 0; + const char *p, *po; + int i, ret; + + if (str == NULL) + return -1; + + memset(parsed_params, 0, sizeof(parsed_params)); + memset(applied_params, 0, sizeof(applied_params)); + + p = str; + while (1) + { +again: + while (*p == ';' || *p == ' ') + p++; + if (*p == 0) + break; + + for (i = 0; i < ALL_PARAM_COUNT; i++) + { + int param_len = strlen(all_params[i].name); + if (strncmp(p, all_params[i].name, param_len) == 0 && p[param_len] == '=') + { + p += param_len + 1; + ret = all_params[i].parse(p, all_params[i].data); + if (ret < 0) { + fprintf(stderr, "pollux_set parser: error at %-10s\n", p); + fprintf(stderr, " valid format is: <%s>\n", all_params[i].help); + return -1; + } + parsed_params[i] = 1; + p += ret; + goto again; + } + } + + /* Unknown param. Attempt to be forward compatible and ignore it. */ + for (po = p; *p != 0 && *p != ';'; p++) + ; + + fprintf(stderr, "unhandled param: "); + fwrite(po, 1, p - po, stderr); + fprintf(stderr, "\n"); + } + + /* validate and apply */ + for (i = 0; i < ALL_PARAM_COUNT; i++) + { + if (!parsed_params[i]) + continue; + + ret = all_params[i].apply(memregs, all_params[i].data); + if (ret < 0) { + fprintf(stderr, "pollux_set: failed to apply %s (bad value?)\n", + all_params[i].name); + continue; + } + + applied_something = 1; + applied_params[i] = 1; + } + + if (applied_something) + { + int c; + printf("applied: "); + for (i = c = 0; i < ALL_PARAM_COUNT; i++) + { + if (!applied_params[i]) + continue; + if (c != 0) + printf(", "); + printf("%s", all_params[i].name); + c++; + } + printf("\n"); + } + + return 0; +} + +#ifdef BINARY +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <sys/mman.h> +#include <unistd.h> + +static void usage(const char *binary) +{ + int i; + printf("usage:\n%s <set_str[;set_str[;...]]>\n" + "set_str:\n", binary); + for (i = 0; i < ALL_PARAM_COUNT; i++) + printf(" %s=<%s>\n", all_params[i].name, all_params[i].help); +} + +int main(int argc, char *argv[]) +{ + volatile unsigned short *memregs; + int ret, memdev; + + if (argc != 2) { + usage(argv[0]); + return 1; + } + + memdev = open("/dev/mem", O_RDWR); + if (memdev == -1) + { + perror("open(/dev/mem) failed"); + return 1; + } + + memregs = mmap(0, 0x20000, PROT_READ|PROT_WRITE, MAP_SHARED, memdev, 0xc0000000); + if (memregs == MAP_FAILED) + { + perror("mmap(memregs) failed"); + close(memdev); + return 1; + } + + ret = pollux_set(memregs, argv[1]); + + munmap((void *)memregs, 0x20000); + close(memdev); + + return ret; +} +#endif diff --git a/frontend/320240/skin/background.png b/frontend/320240/skin/background.png Binary files differnew file mode 100644 index 0000000..0efdd18 --- /dev/null +++ b/frontend/320240/skin/background.png diff --git a/frontend/320240/skin/font.png b/frontend/320240/skin/font.png Binary files differnew file mode 100644 index 0000000..c526a08 --- /dev/null +++ b/frontend/320240/skin/font.png diff --git a/pandora/skin/readme.txt b/frontend/320240/skin/readme.txt index dd83963..dd83963 100644 --- a/pandora/skin/readme.txt +++ b/frontend/320240/skin/readme.txt diff --git a/frontend/320240/skin/selector.png b/frontend/320240/skin/selector.png Binary files differnew file mode 100644 index 0000000..5062cc2 --- /dev/null +++ b/frontend/320240/skin/selector.png diff --git a/pandora/skin/skin.txt b/frontend/320240/skin/skin.txt index 1d6979f..1d6979f 100644 --- a/pandora/skin/skin.txt +++ b/frontend/320240/skin/skin.txt diff --git a/pandora/pcsx.png b/frontend/pandora/pcsx.png Binary files differindex 71f36d0..71f36d0 100644 --- a/pandora/pcsx.png +++ b/frontend/pandora/pcsx.png diff --git a/pandora/pcsx.pxml.templ b/frontend/pandora/pcsx.pxml.templ index 5c53f24..5c53f24 100644 --- a/pandora/pcsx.pxml.templ +++ b/frontend/pandora/pcsx.pxml.templ diff --git a/pandora/pcsx.sh b/frontend/pandora/pcsx.sh index 2077a29..2077a29 100755 --- a/pandora/pcsx.sh +++ b/frontend/pandora/pcsx.sh diff --git a/pandora/picorestore.c b/frontend/pandora/picorestore.c index 77f5720..77f5720 100644 --- a/pandora/picorestore.c +++ b/frontend/pandora/picorestore.c diff --git a/pandora/skin/background.png b/frontend/pandora/skin/background.png Binary files differindex f4b4523..f4b4523 100644 --- a/pandora/skin/background.png +++ b/frontend/pandora/skin/background.png diff --git a/pandora/skin/font.png b/frontend/pandora/skin/font.png Binary files differindex 707a5b4..707a5b4 100644 --- a/pandora/skin/font.png +++ b/frontend/pandora/skin/font.png diff --git a/frontend/pandora/skin/readme.txt b/frontend/pandora/skin/readme.txt new file mode 100644 index 0000000..dd83963 --- /dev/null +++ b/frontend/pandora/skin/readme.txt @@ -0,0 +1,8 @@ +The skin images can be customized, but there are several limitations:
+
+background.png - must be 320x240 image with 24bit RGB colors.
+font.png - must be 128x160 8bit grayscale image.
+selector.png - must be 8x10 8bit grayscale image.
+
+Font and selector colors can be changed by editing skin.txt.
+
diff --git a/pandora/skin/selector.png b/frontend/pandora/skin/selector.png Binary files differindex a439169..a439169 100644 --- a/pandora/skin/selector.png +++ b/frontend/pandora/skin/selector.png diff --git a/frontend/pandora/skin/skin.txt b/frontend/pandora/skin/skin.txt new file mode 100644 index 0000000..1d6979f --- /dev/null +++ b/frontend/pandora/skin/skin.txt @@ -0,0 +1,4 @@ +// html-style hex color codes, ex. ff0000 is red, 0000ff is blue, etc.
+text_color=ffffc0
+selection_color=808010
+
diff --git a/pandora/readme.txt b/readme.txt index d9dc903..d9dc903 100644 --- a/pandora/readme.txt +++ b/readme.txt |