#include "input_pico.h"
#include "version.h"
-#include <pico/pico.h>
+#include <pico/pico_int.h>
#include <pico/patch.h>
#ifdef PANDORA
// -------------- key config --------------
-// PicoPad[] format: MXYZ SACB RLDU
+// PicoIn.pad[] format: MXYZ SACB RLDU
me_bind_action me_ctrl_actions[] =
{
{ "UP ", 0x0001 },
{ "Volume Down ", PEV_VOL_DOWN },
{ "Volume Up ", PEV_VOL_UP },
{ "Fast forward ", PEV_FF },
+ { "Reset Game ", PEV_RESET },
{ "Enter Menu ", PEV_MENU },
{ "Pico Next page ", PEV_PICO_PNEXT },
{ "Pico Prev page ", PEV_PICO_PPREV },
"most games don't need this";
static const char h_scfx[] = "Emulate scale/rotate ASIC chip for graphics effects\n"
"disable to improve performance";
-static const char h_bsync[] = "More accurate mode for CPUs (needed for some games)\n"
- "disable to improve performance";
static menu_entry e_menu_cd_options[] =
{
mee_onoff_h("CD LEDs", MA_CDOPT_LEDS, currentConfig.EmuOpt, EOPT_EN_CD_LEDS, h_cdleds),
- mee_onoff_h("CDDA audio", MA_CDOPT_CDDA, PicoOpt, POPT_EN_MCD_CDDA, h_cdda),
- mee_onoff_h("PCM audio", MA_CDOPT_PCM, PicoOpt, POPT_EN_MCD_PCM, h_cdpcm),
- mee_onoff_h("SaveRAM cart", MA_CDOPT_SAVERAM, PicoOpt, POPT_EN_MCD_RAMCART, h_srcart),
- mee_onoff_h("Scale/Rot. fx", MA_CDOPT_SCALEROT_CHIP, PicoOpt, POPT_EN_MCD_GFX, h_scfx),
+ mee_onoff_h("CDDA audio", MA_CDOPT_CDDA, PicoIn.opt, POPT_EN_MCD_CDDA, h_cdda),
+ mee_onoff_h("PCM audio", MA_CDOPT_PCM, PicoIn.opt, POPT_EN_MCD_PCM, h_cdpcm),
+ mee_onoff_h("SaveRAM cart", MA_CDOPT_SAVERAM, PicoIn.opt, POPT_EN_MCD_RAMCART, h_srcart),
+ mee_onoff_h("Scale/Rot. fx", MA_CDOPT_SCALEROT_CHIP, PicoIn.opt, POPT_EN_MCD_GFX, h_scfx),
mee_end,
};
static menu_entry e_menu_32x_options[] =
{
- mee_onoff_h ("32X enabled", MA_32XOPT_ENABLE_32X, PicoOpt, POPT_EN_32X, h_32x_enable),
+ mee_onoff_h ("32X enabled", MA_32XOPT_ENABLE_32X, PicoIn.opt, POPT_EN_32X, h_32x_enable),
mee_enum ("32X renderer", MA_32XOPT_RENDERER, currentConfig.renderer32x, renderer_names32x),
- mee_onoff_h ("PWM sound", MA_32XOPT_PWM, PicoOpt, POPT_EN_PWM, h_pwm),
+ mee_onoff_h ("PWM sound", MA_32XOPT_PWM, PicoIn.opt, POPT_EN_PWM, h_pwm),
mee_cust_h ("Master SH2 cycles", MA_32XOPT_MSH2_CYCLES, mh_opt_sh2cycles, mgn_opt_sh2cycles, h_sh2cycles),
mee_cust_h ("Slave SH2 cycles", MA_32XOPT_SSH2_CYCLES, mh_opt_sh2cycles, mgn_opt_sh2cycles, h_sh2cycles),
mee_end,
// ------------ adv options menu ------------
+static const char h_ovrclk[] = "Will break some games, keep at 0";
+
static menu_entry e_menu_adv_options[] =
{
mee_onoff ("SRAM/BRAM saves", MA_OPT_SRAM_STATES, currentConfig.EmuOpt, EOPT_EN_SRAM),
- mee_onoff ("Disable sprite limit", MA_OPT2_NO_SPRITE_LIM, PicoOpt, POPT_DIS_SPRITE_LIM),
- mee_onoff ("Emulate Z80", MA_OPT2_ENABLE_Z80, PicoOpt, POPT_EN_Z80),
- mee_onoff ("Emulate YM2612 (FM)", MA_OPT2_ENABLE_YM2612, PicoOpt, POPT_EN_FM),
- mee_onoff ("Emulate SN76496 (PSG)", MA_OPT2_ENABLE_SN76496,PicoOpt, POPT_EN_PSG),
+ mee_onoff ("Disable sprite limit", MA_OPT2_NO_SPRITE_LIM, PicoIn.opt, POPT_DIS_SPRITE_LIM),
+ mee_range_h ("Overclock M68k (%)", MA_OPT2_OVERCLOCK_M68K,currentConfig.overclock_68k, 0, 1000, h_ovrclk),
+ mee_onoff ("Emulate Z80", MA_OPT2_ENABLE_Z80, PicoIn.opt, POPT_EN_Z80),
+ mee_onoff ("Emulate YM2612 (FM)", MA_OPT2_ENABLE_YM2612, PicoIn.opt, POPT_EN_FM),
+ mee_onoff ("Emulate SN76496 (PSG)", MA_OPT2_ENABLE_SN76496,PicoIn.opt, POPT_EN_PSG),
mee_onoff ("gzip savestates", MA_OPT2_GZIP_STATES, currentConfig.EmuOpt, EOPT_GZIP_SAVES),
mee_onoff ("Don't save last used ROM", MA_OPT2_NO_LAST_ROM, currentConfig.EmuOpt, EOPT_NO_AUTOSVCFG),
- mee_onoff ("Disable idle loop patching",MA_OPT2_NO_IDLE_LOOPS,PicoOpt, POPT_DIS_IDLE_DET),
+ mee_onoff ("Disable idle loop patching",MA_OPT2_NO_IDLE_LOOPS,PicoIn.opt, POPT_DIS_IDLE_DET),
mee_onoff ("Disable frame limiter", MA_OPT2_NO_FRAME_LIMIT,currentConfig.EmuOpt, EOPT_NO_FRMLIMIT),
- mee_onoff ("Enable dynarecs", MA_OPT2_DYNARECS, PicoOpt, POPT_EN_DRC),
+ mee_onoff ("Enable dynarecs", MA_OPT2_DYNARECS, PicoIn.opt, POPT_EN_DRC),
mee_onoff ("Status line in main menu", MA_OPT2_STATUS_LINE, currentConfig.EmuOpt, EOPT_SHOW_RTC),
MENU_OPTIONS_ADV
mee_end,
static int menu_loop_adv_options(int id, int keys)
{
static int sel = 0;
+
me_loop(e_menu_adv_options, &sel);
+ PicoIn.overclockM68k = currentConfig.overclock_68k; // int vs short
+
return 0;
}
i += dir ? 1 : -1;
if (i > 4) {
- if (!(PicoOpt & POPT_EN_STEREO)) {
- PicoOpt |= POPT_EN_STEREO;
+ if (!(PicoIn.opt & POPT_EN_STEREO)) {
+ PicoIn.opt |= POPT_EN_STEREO;
return rates[0];
}
return rates[4];
}
if (i < 0) {
- if (PicoOpt & POPT_EN_STEREO) {
- PicoOpt &= ~POPT_EN_STEREO;
+ if (PicoIn.opt & POPT_EN_STEREO) {
+ PicoIn.opt &= ~POPT_EN_STEREO;
return rates[4];
}
return rates[0];
int i;
if (right) {
- if (!PicoRegionOverride) {
+ if (!PicoIn.regionOverride) {
for (i = 0; i < 6; i++)
- if (rgn_orders[i] == PicoAutoRgnOrder) break;
- if (i < 5) PicoAutoRgnOrder = rgn_orders[i+1];
- else PicoRegionOverride=1;
+ if (rgn_orders[i] == PicoIn.autoRgnOrder) break;
+ if (i < 5) PicoIn.autoRgnOrder = rgn_orders[i+1];
+ else PicoIn.regionOverride=1;
}
else
- PicoRegionOverride <<= 1;
- if (PicoRegionOverride > 8)
- PicoRegionOverride = 8;
+ PicoIn.regionOverride <<= 1;
+ if (PicoIn.regionOverride > 8)
+ PicoIn.regionOverride = 8;
} else {
- if (!PicoRegionOverride) {
+ if (!PicoIn.regionOverride) {
for (i = 0; i < 6; i++)
- if (rgn_orders[i] == PicoAutoRgnOrder) break;
- if (i > 0) PicoAutoRgnOrder = rgn_orders[i-1];
+ if (rgn_orders[i] == PicoIn.autoRgnOrder) break;
+ if (i > 0) PicoIn.autoRgnOrder = rgn_orders[i-1];
}
else
- PicoRegionOverride >>= 1;
+ PicoIn.regionOverride >>= 1;
}
}
{
switch (id) {
case MA_OPT_SOUND_QUALITY:
- PsndRate = sndrate_prevnext(PsndRate, keys & PBTN_RIGHT);
+ PicoIn.sndRate = sndrate_prevnext(PicoIn.sndRate, keys & PBTN_RIGHT);
break;
case MA_OPT_REGION:
region_prevnext(keys & PBTN_RIGHT);
{
const char *str2;
*offs = -8;
- str2 = (PicoOpt & POPT_EN_STEREO) ? "stereo" : "mono";
- sprintf(static_buff, "%5iHz %s", PsndRate, str2);
+ str2 = (PicoIn.opt & POPT_EN_STEREO) ? "stereo" : "mono";
+ sprintf(static_buff, "%5iHz %s", PicoIn.sndRate, str2);
return static_buff;
}
{
static const char *names[] = { "Auto", " Japan NTSC", " Japan PAL", " USA", " Europe" };
static const char *names_short[] = { "", " JP", " JP", " US", " EU" };
- int code = PicoRegionOverride;
+ int code = PicoIn.regionOverride;
int u, i = 0;
*offs = -6;
} else {
strcpy(static_buff, "Auto:");
for (u = 0; u < 3; u++) {
- code = (PicoAutoRgnOrder >> u*4) & 0xf;
+ code = (PicoIn.autoRgnOrder >> u*4) & 0xf;
for (i = 0; code; code >>= 1, i++)
;
strcat(static_buff, names_short[i]);
static void draw_frame_debug(void)
{
char layer_str[48] = "layers: ";
- if (PicoDrawMask & PDRAW_LAYERB_ON) memcpy(layer_str + 8, "B", 1);
- if (PicoDrawMask & PDRAW_LAYERA_ON) memcpy(layer_str + 10, "A", 1);
- if (PicoDrawMask & PDRAW_SPRITES_LOW_ON) memcpy(layer_str + 12, "spr_lo", 6);
- if (PicoDrawMask & PDRAW_SPRITES_HI_ON) memcpy(layer_str + 19, "spr_hi", 6);
- if (PicoDrawMask & PDRAW_32X_ON) memcpy(layer_str + 26, "32x", 4);
+ struct PicoVideo *pv = &Pico.video;
+
+ if (!(pv->debug_p & PVD_KILL_B)) memcpy(layer_str + 8, "B", 1);
+ if (!(pv->debug_p & PVD_KILL_A)) memcpy(layer_str + 10, "A", 1);
+ if (!(pv->debug_p & PVD_KILL_S_LO)) memcpy(layer_str + 12, "spr_lo", 6);
+ if (!(pv->debug_p & PVD_KILL_S_HI)) memcpy(layer_str + 19, "spr_hi", 6);
+ if (!(pv->debug_p & PVD_KILL_32X)) memcpy(layer_str + 26, "32x", 4);
pemu_forced_frame(1, 0);
make_bg(1);
static void debug_menu_loop(void)
{
+ struct PicoVideo *pv = &Pico.video;
int inp, mode = 0;
int spr_offs = 0, dumped = 0;
char *tmp;
}
break;
case 1:
- if (inp & PBTN_LEFT) PicoDrawMask ^= PDRAW_LAYERB_ON;
- if (inp & PBTN_RIGHT) PicoDrawMask ^= PDRAW_LAYERA_ON;
- if (inp & PBTN_DOWN) PicoDrawMask ^= PDRAW_SPRITES_LOW_ON;
- if (inp & PBTN_UP) PicoDrawMask ^= PDRAW_SPRITES_HI_ON;
- if (inp & PBTN_MA2) PicoDrawMask ^= PDRAW_32X_ON;
+ if (inp & PBTN_LEFT) pv->debug_p ^= PVD_KILL_B;
+ if (inp & PBTN_RIGHT) pv->debug_p ^= PVD_KILL_A;
+ if (inp & PBTN_DOWN) pv->debug_p ^= PVD_KILL_S_LO;
+ if (inp & PBTN_UP) pv->debug_p ^= PVD_KILL_S_HI;
+ if (inp & PBTN_MA2) pv->debug_p ^= PVD_KILL_32X;
if (inp & PBTN_MOK) {
- PsndOut = NULL; // just in case
- PicoSkipFrame = 1;
+ PicoIn.sndOut = NULL; // just in case
+ PicoIn.skipFrame = 1;
PicoFrame();
- PicoSkipFrame = 0;
+ PicoIn.skipFrame = 0;
while (inp & PBTN_MOK) inp = in_menu_wait_any(NULL, -1);
}
break;
}
break;
case MA_MAIN_CHANGE_CD:
- if (PicoAHW & PAHW_MCD) {
+ if (PicoIn.AHW & PAHW_MCD) {
// if cd is loaded, cdd_unload() triggers eject and
// returns 1, else we'll select and load new CD here
if (!cdd_unload())
me_enable(e_menu_main, MA_MAIN_SAVE_STATE, PicoGameLoaded);
me_enable(e_menu_main, MA_MAIN_LOAD_STATE, PicoGameLoaded);
me_enable(e_menu_main, MA_MAIN_RESET_GAME, PicoGameLoaded);
- me_enable(e_menu_main, MA_MAIN_CHANGE_CD, PicoAHW & PAHW_MCD);
+ me_enable(e_menu_main, MA_MAIN_CHANGE_CD, PicoIn.AHW & PAHW_MCD);
me_enable(e_menu_main, MA_MAIN_PATCHES, PicoPatches != NULL);
menu_enter(PicoGameLoaded);
/* hidden options for config engine only */
static menu_entry e_menu_hidden[] =
{
- mee_onoff("Accurate sprites", MA_OPT_ACC_SPRITES, PicoOpt, 0x080),
+ mee_onoff("Accurate sprites", MA_OPT_ACC_SPRITES, PicoIn.opt, 0x080),
mee_onoff("autoload savestates", MA_OPT_AUTOLOAD_SAVE, g_autostateld_opt, 1),
mee_end,
};