return 0;
}
-static void vout_set_mode(int w, int h, int bpp)
+static void vout_set_mode(int w, int h, int raw_w, int raw_h, int bpp)
{
}
{
}
-void pl_update_gun(int *xn, int *xres, int *y, int *in)
+void pl_update_gun(int *xn, int *yn, int *xres, int *yres, int *in)
{
}
#include "../libpcsxcore/cheat.h"
#include "../libpcsxcore/psemu_plugin_defs.h"
#include "../libpcsxcore/new_dynarec/new_dynarec.h"
-#include "../plugins/dfinput/main.h"
+#include "../plugins/dfinput/externals.h"
#include "../plugins/gpulib/cspace.h"
#include "revision.h"
#include "plugin_lib.h"
#include "pl_gun_ts.h"
#include "menu.h"
-#include "../plugins/dfinput/main.h"
+#include "../plugins/dfinput/externals.h"
static int gun_x, gun_y, gun_in;
static int ts_multiplier_x, ts_multiplier_y, ts_offs_x, ts_offs_y;
return 0;
}
+/* returns x, y in range 0..1023 (normalized to visible layer) */
void pl_gun_ts_update(struct tsdev *ts, int *x, int *y, int *in)
{
pl_gun_ts_update_raw(ts, NULL, NULL, NULL);
#include "../libpcsxcore/new_dynarec/new_dynarec.h"
#include "../libpcsxcore/psemu_plugin_defs.h"
#include "../plugins/gpulib/cspace.h"
+#include "../plugins/dfinput/externals.h"
int in_type1, in_type2;
int in_a1[2] = { 127, 127 }, in_a2[2] = { 127, 127 };
return w <= 1024 && h <= 512;
}
-static void pl_vout_set_mode(int w, int h, int bpp)
+static void pl_vout_set_mode(int w, int h, int raw_w, int raw_h, int bpp)
{
int vout_w, vout_h, vout_bpp;
h = (h + 7) & ~7;
vsync_cnt_ms_prev = vsync_cnt;
- vout_w = psx_w = w;
- vout_h = psx_h = h;
+ psx_w = raw_w;
+ psx_h = raw_h;
+ vout_w = w;
+ vout_h = h;
vout_bpp = psx_bpp = bpp;
pl_vout_scale = 1;
pl_vout_buf = plat_gvideo_set_mode(&vout_w, &vout_h, &vout_bpp);
if (pl_vout_buf == NULL)
fprintf(stderr, "failed to set mode %dx%d@%d\n",
- psx_w, psx_h, psx_bpp);
+ vout_w, vout_h, psx_bpp);
else {
pl_vout_w = vout_w;
pl_vout_h = vout_h;
int dispmode_scale2x(void)
{
- if (psx_bpp != 16)
+ if (!resolution_ok(psx_w * 2, psx_h * 2) || psx_bpp != 16)
return 0;
dispmode_default();
int dispmode_eagle2x(void)
{
- if (psx_bpp != 16)
+ if (!resolution_ok(psx_w * 2, psx_h * 2) || psx_bpp != 16)
return 0;
dispmode_default();
* more square-like analogs in PSX */
static void update_analog_nub_adjust(int *x_, int *y_)
{
- const int d = 16;
+ #define d 16
static const int scale[] =
{ 0 - d*2, 0 - d*2, 0 - d*2, 12 - d*2,
30 - d*2, 60 - d*2, 75 - d*2, 60 - d*2, 60 - d*2 };
*x_ = x;
*y_ = y;
+ #undef d
}
static void update_analogs(void)
}
#endif
-void pl_update_gun(int *xn, int *xres, int *y, int *in)
+void pl_update_gun(int *xn, int *yn, int *xres, int *yres, int *in)
{
if (tsdev)
- pl_gun_ts_update(tsdev, xn, y, in);
+ pl_gun_ts_update(tsdev, xn, yn, in);
- *xres = pl_vout_w;
- *y = *y * pl_vout_h >> 10;
+ *xres = psx_w;
+ *yres = psx_h;
}
#define MAX_LAG_FRAMES 3
void pl_timing_prepare(int is_pal);
void pl_frame_limit(void);
-void pl_update_gun(int *xn, int *xres, int *y, int *in);
-
struct rearmed_cbs {
void (*pl_get_layer_pos)(int *x, int *y, int *w, int *h);
int (*pl_vout_open)(void);
- void (*pl_vout_set_mode)(int w, int h, int bpp);
+ void (*pl_vout_set_mode)(int w, int h, int raw_w, int raw_h, int bpp);
void (*pl_vout_flip)(const void *vram, int stride, int bgr24,
int w, int h);
void (*pl_vout_close)(void);
#include "plugin_lib.h"
#include "../libpcsxcore/misc.h"
#include "../libpcsxcore/new_dynarec/new_dynarec.h"
-#include "../plugins/dfinput/main.h"
+#include "../plugins/dfinput/externals.h"
#include "maemo_common.h"
int g_opts = OPT_SHOWFPS;
--- /dev/null
+
+void dfinput_activate(void);
+
+/* get gunstate from emu frontend,
+ * xn, yn - layer position normalized to 0..1023 */
+#define GUNIN_TRIGGER (1<<0)
+#define GUNIN_BTNA (1<<1)
+#define GUNIN_BTNB (1<<2)
+#define GUNIN_TRIGGER2 (1<<3) /* offscreen trigger */
+extern void pl_update_gun(int *xn, int *yn, int *xres, int *yres, int *in);
+
+/* vibration trigger to frontend */
+extern int in_enable_vibration;
+extern void plat_trigger_vibrate(int is_strong);
unsigned char PADstartPoll_guncon(int pad)
{
- int x, xn = 0, y = 0, in = 0, xres = 256;
+ int x, y, xn = 0, yn = 0, in = 0, xres = 256, yres = 240;
CurByte = 0;
buf[2] = buf[3] = 0xff;
- pl_update_gun(&xn, &xres, &y, &in);
+ pl_update_gun(&xn, &yn, &xres, &yres, &in);
// while y = const + line counter, what is x?
// for 256 mode, hw dumped offsets x, y: 0x5a, 0x20
//x = 0x5a + (356 * xn >> 10);
x = 0x5a - (xres - 256) / 3 + (((xres - 256) / 3 + 356) * xn >> 10);
- y = 0x20 + y;
+ y = 0x20 + (yres * yn >> 10);
if (in & GUNIN_TRIGGER)
buf[3] &= ~0x20;
#include "../../libpcsxcore/psemu_plugin_defs.h"
+#include "externals.h"
extern unsigned char CurPad, CurByte, CurCmd, CmdLen;
unsigned char PADstartPoll_guncon(int pad);
void guncon_init(void);
-void dfinput_activate(void);
-
/* get button state and pad type from main emu */
extern long (*PAD1_readPort1)(PadDataS *pad);
extern long (*PAD2_readPort2)(PadDataS *pad);
-
-/* get gunstate from emu frontend, x range 0-1023 */
-#define GUNIN_TRIGGER (1<<0)
-#define GUNIN_BTNA (1<<1)
-#define GUNIN_BTNB (1<<2)
-#define GUNIN_TRIGGER2 (1<<3) /* offscreen trigger */
-extern void pl_update_gun(int *xn, int *xres, int *y, int *in);
-
-/* vibration trigger to frontend */
-extern int in_enable_vibration;
-extern void plat_trigger_vibrate(int is_strong);
fbw = PreviousPSXDisplay.DisplayMode.x;
fbh = PreviousPSXDisplay.DisplayMode.y;
fb24bpp = PSXDisplay.RGB24;
- rcbs->pl_vout_set_mode(fbw, fbh, fb24bpp ? 24 : 16);
+ rcbs->pl_vout_set_mode(fbw, fbh, fbw, fbh, fb24bpp ? 24 : 16);
}
pcnt_start(PCNT_BLIT);
old_res_horz = w0;
old_res_vert = h1;
old_rgb24 = (s16)isRGB24;
- cbs->pl_vout_set_mode(w0, h1, isRGB24 ? 24 : 16);
+ cbs->pl_vout_set_mode(w0, h1, w0, h1, isRGB24 ? 24 : 16);
}
cbs->pl_vout_flip(base, 1024, isRGB24, w0, h1);
static int old_h;
int w = gpu.screen.hres;
int h = gpu.screen.h;
+ int w_out = w;
+ int h_out = h;
gpu.state.enhancement_active =
gpu.get_enhancement_bufer != NULL && gpu.state.enhancement_enable
&& w <= 512 && h <= 256 && !gpu.status.rgb24;
if (gpu.state.enhancement_active) {
- w *= 2;
- h *= 2;
+ w_out *= 2;
+ h_out *= 2;
}
// width|rgb24 change?
old_status = gpu.status.reg;
old_h = h;
- cbs->pl_vout_set_mode(w, h,
+ cbs->pl_vout_set_mode(w_out, h_out, w, h,
(gpu.status.rgb24 && !cbs->only_16bpp) ? 24 : 16);
}
}