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