#include "config.h"
#include "plugin.h"
#include "plugin_lib.h"
-#include "omap.h"
#include "plat.h"
#include "pcnt.h"
#include "common/plat.h"
MA_OPT_SAVECFG,
MA_OPT_SAVECFG_GAME,
MA_OPT_CPU_CLOCKS,
- MA_OPT_FILTERING,
MA_OPT_DISP_OPTS,
+ MA_OPT_SCALER,
+ MA_OPT_SCALER2,
+ MA_OPT_FILTERING,
+ MA_OPT_SCALER_C,
} menu_id;
enum {
static int psx_clock;
static int memcard1_sel, memcard2_sel;
int g_opts;
-int analog_deadzone; // for Caanoo
+int soft_scaling, analog_deadzone; // for Caanoo
#ifdef __ARM_ARCH_7A__
#define DEFAULT_PSX_CLOCK 57
volume_boost = 0;
frameskip = 0;
analog_deadzone = 50;
+ soft_scaling = 1;
psx_clock = DEFAULT_PSX_CLOCK;
region = 0;
CE_INTVAL_P(gpu_unai.no_light),
CE_INTVAL_P(gpu_unai.no_blend),
CE_INTVAL_P(gpu_neon.allow_interlace),
+ CE_INTVAL_P(gpu_peopsgl.bDrawDither),
+ CE_INTVAL_P(gpu_peopsgl.iFilterType),
+ CE_INTVAL_P(gpu_peopsgl.iFrameTexType),
+ CE_INTVAL_P(gpu_peopsgl.iUseMask),
+ CE_INTVAL_P(gpu_peopsgl.bOpaquePass),
+ CE_INTVAL_P(gpu_peopsgl.bAdvancedBlend),
+ CE_INTVAL_P(gpu_peopsgl.bUseFastMdec),
+ CE_INTVAL_P(gpu_peopsgl.iVRamSize),
+ CE_INTVAL_P(gpu_peopsgl.iTexGarbageCollection),
+ CE_INTVAL_P(gpu_peopsgl.dwActFixes),
CE_INTVAL_V(iUseReverb, 3),
CE_INTVAL_V(iXAPitch, 3),
CE_INTVAL_V(iUseInterpolation, 3),
menu_sync_config();
+ // caanoo old config compat hack
+ if (strcmp(Config.Gpu, "gpuPCSX4ALL.so") == 0)
+ strcpy(Config.Gpu, "gpu_unai.so");
+
// sync plugins
for (i = bios_sel = 0; bioses[i] != NULL; i++)
if (strcmp(Config.Bios, bioses[i]) == 0)
bgr888_to_rgb565(d, s, w * 3);
else
bgr555_to_rgb565(d, s, w * 2);
-#ifndef __ARM_ARCH_7A__
- // better darken this on small screens
- menu_darken_bg(d, d, w * 2, 0);
-#endif
+
+ // darken this so that menu text is visible
+ if (g_menuscreen_w - w < 320)
+ menu_darken_bg(d, d, w * 2, 0);
}
out:
scaling = SCALE_CUSTOM;
- omap_enable_layer(1);
+ plat_gvideo_open();
for (;;)
{
g_layer_w = 800 - g_layer_x;
if (g_layer_y + g_layer_h > 480)
g_layer_h = 480 - g_layer_y;
- omap_enable_layer(1);
+ // resize the layer
+ plat_gvideo_open();
}
}
- omap_enable_layer(0);
+ plat_gvideo_close();
return 0;
}
static menu_entry e_menu_gfx_options[] =
{
- mee_enum ("Scaler", 0, scaling, men_scaler),
+ mee_enum ("Scaler", MA_OPT_SCALER, scaling, men_scaler),
+ mee_onoff ("Software Scaling", MA_OPT_SCALER2, soft_scaling, 1),
mee_enum ("Filter", MA_OPT_FILTERING, filter, men_dummy),
// mee_onoff ("Vsync", 0, vsync, 1),
- mee_cust_h ("Setup custom scaler", 0, menu_loop_cscaler, NULL, h_cscaler),
+ mee_cust_h ("Setup custom scaler", MA_OPT_SCALER_C, menu_loop_cscaler, NULL, h_cscaler),
mee_end,
};
// ------------ adv options menu ------------
-static const char h_cfg_psxclk[] = "Over/under-clock the PSX, default is " DEFAULT_PSX_CLOCK_S "\n";
+static const char h_cfg_psxclk[] = "Over/under-clock the PSX, default is " DEFAULT_PSX_CLOCK_S "\n"
+ "(lower value - less work for the emu, may be faster)";
static const char h_cfg_nosmc[] = "Will cause crashes when loading, break memcards";
static const char h_cfg_gteunn[] = "May cause graphical glitches";
static const char h_cfg_gteflgs[] = "Will cause graphical glitches";
int i;
i = me_id2offset(e_menu_options, MA_OPT_CPU_CLOCKS);
- e_menu_options[i].enabled = cpu_clock != 0 ? 1 : 0;
+ e_menu_options[i].enabled = cpu_clock_st > 0 ? 1 : 0;
me_enable(e_menu_options, MA_OPT_SAVECFG_GAME, ready_to_go && CdromId[0]);
me_loop(e_menu_options, &sel);
// ------------ debug menu ------------
-static void draw_frame_debug(GPUFreeze_t *gpuf)
+static void draw_frame_debug(GPUFreeze_t *gpuf, int x, int y)
{
int w = min(g_menuscreen_w, 1024);
int h = min(g_menuscreen_h, 512);
u16 *d = g_menuscreen_ptr;
- u16 *s = (u16 *)gpuf->psxVRam;
+ u16 *s = (u16 *)gpuf->psxVRam + y * 1024 + x;
char buff[64];
int ty = 1;
static void debug_menu_loop(void)
{
+ int inp, df_x = 0, df_y = 0;
GPUFreeze_t *gpuf;
- int inp;
gpuf = malloc(sizeof(*gpuf));
if (gpuf == NULL)
while (1)
{
menu_draw_begin(0);
- draw_frame_debug(gpuf);
+ draw_frame_debug(gpuf, df_x, df_y);
menu_draw_end();
inp = in_menu_wait(PBTN_MOK|PBTN_MBACK|PBTN_MA2|PBTN_MA3|PBTN_L|PBTN_R |
- PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT, 70);
- if (inp & PBTN_MBACK)
- break;
+ PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT, 10);
+ if (inp & PBTN_MBACK) break;
+ else if (inp & PBTN_UP) { if (df_y > 0) df_y--; }
+ else if (inp & PBTN_DOWN) { if (df_y < 512 - g_menuscreen_h) df_y++; }
+ else if (inp & PBTN_LEFT) { if (df_x > 0) df_x--; }
+ else if (inp & PBTN_RIGHT) { if (df_x < 1024 - g_menuscreen_w) df_x++; }
}
free(gpuf);
"The file is usually named SCPH1001.BIN,\n"
"but other not compressed files can be\n"
"used too.\n\n"
- "Press (B) or (X) to continue";
+ "Press %s or %s to continue";
+ char tmp_msg[sizeof(msg) + 64];
+ snprintf(tmp_msg, sizeof(tmp_msg), msg,
+ in_get_key_name(-1, -PBTN_MOK), in_get_key_name(-1, -PBTN_MBACK));
while (1)
{
- draw_menu_message(msg, NULL);
+ draw_menu_message(tmp_msg, NULL);
inp = in_menu_wait(PBTN_MOK|PBTN_MBACK, 70);
if (inp & (PBTN_MBACK|PBTN_MOK))
{
struct tm *tmp;
time_t ltime;
+ int capacity;
char ltime_s[16];
char buff[64];
+ char *out;
if (CdromId[0] != 0) {
snprintf(buff, sizeof(buff), "%.32s/%.9s (running as %s, with %s)",
}
if (ready_to_go) {
+ capacity = plat_get_bat_capacity();
ltime = time(NULL);
tmp = localtime(<ime);
strftime(ltime_s, sizeof(ltime_s), "%H:%M", tmp);
- snprintf(buff, sizeof(buff), "%s %3d%%", ltime_s, plat_get_bat_capacity());
- smalltext_out16(4, 1 + me_sfont_h, buff, 0x105f);
+ if (capacity >= 0) {
+ snprintf(buff, sizeof(buff), "%s %3d%%", ltime_s, capacity);
+ out = buff;
+ }
+ else
+ out = ltime_s;
+ smalltext_out16(4, 1 + me_sfont_h, out, 0x105f);
}
}
last_psx_bpp = 16;
g_menubg_src_ptr = calloc(g_menuscreen_w * g_menuscreen_h * 2, 1);
- if (g_menubg_src_ptr == NULL)
+ g_menubg_ptr = calloc(g_menuscreen_w * g_menuscreen_h * 2, 1);
+ if (g_menubg_src_ptr == NULL || g_menubg_ptr == NULL) {
+ fprintf(stderr, "OOM\n");
exit(1);
+ }
+
emu_make_path(buff, "skin/background.png", sizeof(buff));
readpng(g_menubg_src_ptr, buff, READPNG_BG, g_menuscreen_w, g_menuscreen_h);
#ifndef __ARM_ARCH_7A__ /* XXX */
- me_enable(e_menu_options, MA_OPT_DISP_OPTS, 0);
+ me_enable(e_menu_gfx_options, MA_OPT_SCALER, 0);
+ me_enable(e_menu_gfx_options, MA_OPT_FILTERING, 0);
+ me_enable(e_menu_gfx_options, MA_OPT_SCALER_C, 0);
me_enable(e_menu_keyconfig, MA_CTRL_NUBS_BTNS, 0);
#else
+ me_enable(e_menu_gfx_options, MA_OPT_SCALER2, 0);
me_enable(e_menu_keyconfig, MA_CTRL_VIBRATION, 0);
me_enable(e_menu_keyconfig, MA_CTRL_DEADZONE, 0);
#endif
last_psx_h = h;
last_psx_bpp = bpp;
+ // XXX: should really menu code cotrol the layer size?
switch (scaling) {
case SCALE_1_1:
g_layer_w = w; g_layer_h = h;
plat_video_menu_enter(ready_to_go);
memcpy(g_menubg_ptr, g_menubg_src_ptr, g_menuscreen_w * g_menuscreen_h * 2);
- if (pl_vout_buf != NULL && ready_to_go && last_psx_bpp == 16) {
+ if (pl_vout_buf != NULL && ready_to_go) {
int x = max(0, g_menuscreen_w - last_psx_w);
int y = max(0, g_menuscreen_h / 2 - last_psx_h / 2);
int w = min(g_menuscreen_w, last_psx_w);
int h = min(g_menuscreen_h, last_psx_h);
u16 *d = (u16 *)g_menubg_ptr + g_menuscreen_w * y + x;
- u16 *s = pl_vout_buf;
+ char *s = pl_vout_buf;
- for (; h > 0; h--, d += g_menuscreen_w, s += last_psx_w)
- menu_darken_bg(d, s, w, 0);
+ if (last_psx_bpp == 16) {
+ for (; h > 0; h--, d += g_menuscreen_w, s += last_psx_w * 2)
+ menu_darken_bg(d, s, w, 0);
+ }
+ else {
+ for (; h > 0; h--, d += g_menuscreen_w, s += last_psx_w * 3) {
+ bgr888_to_rgb565(d, s, w * 3);
+ menu_darken_bg(d, d, w, 0);
+ }
+ }
}
if (ready_to_go)
menu_sync_config();
apply_lcdrate(Config.PsxType);
apply_filter(filter);
- plat_cpu_clock_apply(cpu_clock);
+ if (cpu_clock > 0)
+ plat_cpu_clock_apply(cpu_clock);
// push config to GPU plugin
plugin_call_rearmed_cbs();