From 9e0630ab54cbf6b6e3ec525f1088aa54e163c938 Mon Sep 17 00:00:00 2001 From: notaz <notasas@gmail.com> Date: Sun, 9 Oct 2011 22:15:00 +0300 Subject: [PATCH] add caanoo frontend files, move pandora files --- Makefile | 6 +- Makefile.caanoo | 22 + frontend/320240/caanoo.gpe | 8 + frontend/320240/pcsx26.png | Bin 0 -> 4763 bytes frontend/320240/pcsx_rearmed.ini | 5 + frontend/320240/pollux_set.c | 389 ++++++++++++++++++ frontend/320240/skin/background.png | Bin 0 -> 36069 bytes frontend/320240/skin/font.png | Bin 0 -> 3185 bytes {pandora => frontend/320240}/skin/readme.txt | 0 frontend/320240/skin/selector.png | Bin 0 -> 261 bytes {pandora => frontend/320240}/skin/skin.txt | 0 {pandora => frontend/pandora}/pcsx.png | Bin {pandora => frontend/pandora}/pcsx.pxml.templ | 0 {pandora => frontend/pandora}/pcsx.sh | 0 {pandora => frontend/pandora}/picorestore.c | 0 .../pandora}/skin/background.png | Bin {pandora => frontend/pandora}/skin/font.png | Bin frontend/pandora/skin/readme.txt | 8 + .../pandora}/skin/selector.png | Bin frontend/pandora/skin/skin.txt | 4 + pandora/readme.txt => readme.txt | 0 21 files changed, 439 insertions(+), 3 deletions(-) create mode 100755 frontend/320240/caanoo.gpe create mode 100644 frontend/320240/pcsx26.png create mode 100644 frontend/320240/pcsx_rearmed.ini create mode 100644 frontend/320240/pollux_set.c create mode 100644 frontend/320240/skin/background.png create mode 100644 frontend/320240/skin/font.png rename {pandora => frontend/320240}/skin/readme.txt (100%) create mode 100644 frontend/320240/skin/selector.png rename {pandora => frontend/320240}/skin/skin.txt (100%) rename {pandora => frontend/pandora}/pcsx.png (100%) rename {pandora => frontend/pandora}/pcsx.pxml.templ (100%) rename {pandora => frontend/pandora}/pcsx.sh (100%) rename {pandora => frontend/pandora}/picorestore.c (100%) rename {pandora => frontend/pandora}/skin/background.png (100%) rename {pandora => frontend/pandora}/skin/font.png (100%) create mode 100644 frontend/pandora/skin/readme.txt rename {pandora => frontend/pandora}/skin/selector.png (100%) create mode 100644 frontend/pandora/skin/skin.txt rename pandora/readme.txt => readme.txt (100%) diff --git a/Makefile b/Makefile index fdf3724c..4fc970d1 100644 --- a/Makefile +++ b/Makefile @@ -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 54e478c5..e9228f51 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 00000000..f6e72e5a --- /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 new file mode 100644 index 0000000000000000000000000000000000000000..ed220a0f8b22a72bf2ce1c2b76106d74f8398ae6 GIT binary patch literal 4763 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 literal 0 HcmV?d00001 diff --git a/frontend/320240/pcsx_rearmed.ini b/frontend/320240/pcsx_rearmed.ini new file mode 100644 index 00000000..aeba53dc --- /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 00000000..f49e7775 --- /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 new file mode 100644 index 0000000000000000000000000000000000000000..0efdd183e85e85e96994d1324686ecc8f3777c61 GIT binary patch literal 36069 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 Zqi8+fAM6*%8krnmm>OCd)MMOY{{_{+-G%@F literal 0 HcmV?d00001 diff --git a/frontend/320240/skin/font.png b/frontend/320240/skin/font.png new file mode 100644 index 0000000000000000000000000000000000000000..c526a086ddb3e2ac97f4966004884071552bbc41 GIT binary patch literal 3185 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 XqVG$syRXKc00000NkvXXu0mjfg_gw( literal 0 HcmV?d00001 diff --git a/pandora/skin/readme.txt b/frontend/320240/skin/readme.txt similarity index 100% rename from pandora/skin/readme.txt rename to frontend/320240/skin/readme.txt diff --git a/frontend/320240/skin/selector.png b/frontend/320240/skin/selector.png new file mode 100644 index 0000000000000000000000000000000000000000..5062cc23b08bd35ebbe7c5dca0c10ae479103c56 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^96-zkA{f@Jafks@+9j?LCC){ui6xo&c?uz!xv31^ zB??By3PI@w3PuJ7<_d-;Rt6SUMrI1y20;F2g|&S^ZR{nUzOL-oImEd+jkE=q{{RYc z7I;J!Gca%qfiUBxyLEqnf-LEdzK#qG8~eHcB(ehev7RoDAr-fh{~RxP%DLW-pZWCr zo!jgFC7ivOXlD2K_3`iDpYNF=YFG3B+uQT$vD5tH>;L@w{QSMX+Eab|`oF)<E;~Er z!2jRh=l^G|>G{8J%^uZPiw_?7(a*><V}S`X!~JfpXL?~fKptiAboFyt=akR{0REw1 AZU6uP literal 0 HcmV?d00001 diff --git a/pandora/skin/skin.txt b/frontend/320240/skin/skin.txt similarity index 100% rename from pandora/skin/skin.txt rename to frontend/320240/skin/skin.txt diff --git a/pandora/pcsx.png b/frontend/pandora/pcsx.png similarity index 100% rename from pandora/pcsx.png rename to frontend/pandora/pcsx.png diff --git a/pandora/pcsx.pxml.templ b/frontend/pandora/pcsx.pxml.templ similarity index 100% rename from pandora/pcsx.pxml.templ rename to frontend/pandora/pcsx.pxml.templ diff --git a/pandora/pcsx.sh b/frontend/pandora/pcsx.sh similarity index 100% rename from pandora/pcsx.sh rename to frontend/pandora/pcsx.sh diff --git a/pandora/picorestore.c b/frontend/pandora/picorestore.c similarity index 100% rename from pandora/picorestore.c rename to frontend/pandora/picorestore.c diff --git a/pandora/skin/background.png b/frontend/pandora/skin/background.png similarity index 100% rename from pandora/skin/background.png rename to frontend/pandora/skin/background.png diff --git a/pandora/skin/font.png b/frontend/pandora/skin/font.png similarity index 100% rename from pandora/skin/font.png rename to frontend/pandora/skin/font.png diff --git a/frontend/pandora/skin/readme.txt b/frontend/pandora/skin/readme.txt new file mode 100644 index 00000000..dd839639 --- /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 similarity index 100% rename from pandora/skin/selector.png rename to frontend/pandora/skin/selector.png diff --git a/frontend/pandora/skin/skin.txt b/frontend/pandora/skin/skin.txt new file mode 100644 index 00000000..1d6979f8 --- /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 similarity index 100% rename from pandora/readme.txt rename to readme.txt -- 2.39.5