#include "plugin_lib.h"
#include "omap.h"
#include "pcnt.h"
+#include "arm_utils.h"
#include "common/plat.h"
#include "../libpcsxcore/misc.h"
#include "../libpcsxcore/cdrom.h"
// a bit of black magic here
static void draw_savestate_bg(int slot)
{
- extern void bgr555_to_rgb565(void *dst, void *src, int bytes);
static const int psx_widths[8] = { 256, 368, 320, 384, 512, 512, 640, 640 };
int x, y, w, h;
char fname[MAXPATHLEN];
{ "Prev Save Slot ", 1 << SACTION_PREV_SSLOT },
{ "Next Save Slot ", 1 << SACTION_NEXT_SSLOT },
{ "Toggle Frameskip ", 1 << SACTION_TOGGLE_FSKIP },
+ { "Take Screenshot ", 1 << SACTION_SCREENSHOT },
{ "Enter Menu ", 1 << SACTION_ENTER_MENU },
{ NULL, 0 }
};
*/
static const char h_restore_def[] = "Switches back to default / recommended\n"
"configuration";
+static const char h_frameskip[] = "Warning: frameskip sometimes causes glitches\n";
static menu_entry e_menu_options[] =
{
// mee_range ("Save slot", 0, state_slot, 0, 9),
// mee_enum_h ("Confirm savestate", 0, dummy, men_confirm_save, h_confirm_save),
- mee_onoff ("Frameskip", 0, UseFrameSkip, 1),
+ mee_onoff_h ("Frameskip", 0, UseFrameSkip, 1, h_frameskip),
mee_onoff ("Show FPS", 0, g_opts, OPT_SHOWFPS),
mee_enum ("Region", 0, region, men_region),
mee_range ("CPU clock", MA_OPT_CPU_CLOCKS, cpu_clock, 20, 5000),
// ------------ debug menu ------------
-static void draw_frame_debug(void)
+static void draw_frame_debug(GPUFreeze_t *gpuf)
{
+ int w = min(g_menuscreen_w, 1024);
+ int h = min(g_menuscreen_h, 512);
+ u16 *d = g_menuscreen_ptr;
+ u16 *s = (u16 *)gpuf->psxVRam;
+ char buff[64];
+ int ty = 1;
+
+ gpuf->ulFreezeVersion = 1;
+ if (GPU_freeze != NULL)
+ GPU_freeze(1, gpuf);
+
+ for (; h > 0; h--, d += g_menuscreen_w, s += 1024)
+ bgr555_to_rgb565(d, s, w * 2);
+
smalltext_out16(4, 1, "build: "__DATE__ " " __TIME__ " " REV, 0xe7fc);
+ snprintf(buff, sizeof(buff), "GPU sr: %08x", gpuf->ulStatus);
+ smalltext_out16(4, (ty += me_sfont_h), buff, 0xe7fc);
+ snprintf(buff, sizeof(buff), "PC/SP: %08x %08x", psxRegs.pc, psxRegs.GPR.n.sp);
+ smalltext_out16(4, (ty += me_sfont_h), buff, 0xe7fc);
}
static void debug_menu_loop(void)
{
+ GPUFreeze_t *gpuf;
int inp;
+ gpuf = malloc(sizeof(*gpuf));
+ if (gpuf == NULL)
+ return;
+
while (1)
{
- menu_draw_begin(1);
- draw_frame_debug();
+ menu_draw_begin(0);
+ draw_frame_debug(gpuf);
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)
- return;
+ break;
}
+
+ free(gpuf);
}
// ------------ main menu ------------
while (1)
{
- menu_draw_begin(1);
draw_menu_message(msg, NULL);
- menu_draw_end();
inp = in_menu_wait(PBTN_MOK|PBTN_MBACK, 70);
if (inp & (PBTN_MBACK|PBTN_MOK))