#include <fcntl.h>
#include <unistd.h>
#include <pthread.h>
+#include <assert.h>
#include "libpicofe/fonts.h"
#include "libpicofe/input.h"
#include "psemu_plugin_defs.h"
#include "../libpcsxcore/new_dynarec/new_dynarec.h"
#include "../libpcsxcore/psxmem_map.h"
-#include "../plugins/dfinput/externals.h"
#define HUD_HEIGHT 10
int in_adev[2] = { -1, -1 }, in_adev_axis[2][2] = {{ 0, 1 }, { 0, 1 }};
int in_adev_is_nublike[2];
unsigned short in_keystate[8];
+int in_mouse[8][2];
int in_state_gun;
int in_enable_vibration;
void *tsdev;
pl_rearmed_cbs.vsps_cur);
}
-static void print_cpu_usage(int w, int h, int border)
+static void print_cpu_usage(int x, int h)
{
- hud_printf(pl_vout_buf, pl_vout_w, pl_vout_w - border - 28,
+ hud_printf(pl_vout_buf, pl_vout_w, x - 28,
h - HUD_HEIGHT, "%3d", pl_rearmed_cbs.cpu_usage);
}
}
}
-static void print_hud(int w, int h, int xborder)
+static void print_hud(int x, int w, int h)
{
- if (h < 16)
+ if (h < 192)
return;
- if (w < pl_vout_w)
- xborder += (pl_vout_w - w) / 2;
if (h > pl_vout_h)
h = pl_vout_h;
draw_active_chans(w, h);
if (hud_msg[0] != 0)
- print_msg(h, xborder);
+ print_msg(h, x);
else if (g_opts & OPT_SHOWFPS)
- print_fps(h, xborder);
+ print_fps(h, x);
if (g_opts & OPT_SHOWCPU)
- print_cpu_usage(w, h, xborder);
+ print_cpu_usage(x + w, h);
}
/* update scaler target size according to user settings */
if (pl_rearmed_cbs.only_16bpp)
vout_bpp = 16;
- // don't use very low heights
- if (vout_h < 192) {
- buf_yoffset = (192 - vout_h) / 2;
- vout_h = 192;
- }
+ assert(vout_h >= 192);
pl_vout_scale_w = pl_vout_scale_h = 1;
#ifdef __ARM_NEON__
menu_notify_mode_change(pl_vout_w, pl_vout_h, pl_vout_bpp);
}
-static void pl_vout_flip(const void *vram, int stride, int bgr24, int w, int h)
+static void pl_vout_flip(const void *vram, int stride, int bgr24,
+ int x, int y, int w, int h, int dims_changed)
{
- static int doffs_old, clear_counter;
+ static int clear_counter;
unsigned char *dest = pl_vout_buf;
const unsigned short *src = vram;
int dstride = pl_vout_w, h1 = h;
- int doffs;
+ int h_full = pl_vout_h - pl_vout_yoffset;
+ int xoffs = 0, doffs;
pcnt_start(PCNT_BLIT);
pl_plat_clear();
else
memset(pl_vout_buf, 0,
- dstride * pl_vout_h * pl_vout_bpp / 8);
+ dstride * h_full * pl_vout_bpp / 8);
goto out_hud;
}
- // borders
- doffs = (dstride - w * pl_vout_scale_w) / 2 & ~1;
+ assert(x + w <= pl_vout_w);
+ assert(y + h <= pl_vout_h);
+
+ // offset
+ xoffs = x * pl_vout_scale_w;
+ doffs = xoffs + y * dstride;
- if (doffs > doffs_old)
+ if (dims_changed)
clear_counter = 2;
- doffs_old = doffs;
if (clear_counter > 0) {
if (pl_plat_clear)
pl_plat_clear();
else
memset(pl_vout_buf, 0,
- dstride * pl_vout_h * pl_vout_bpp / 8);
+ dstride * h_full * pl_vout_bpp / 8);
clear_counter--;
}
}
out_hud:
- print_hud(w * pl_vout_scale_w, h * pl_vout_scale_h, 0);
+ print_hud(xoffs, w * pl_vout_scale_w, (y + h) * pl_vout_scale_h);
out:
pcnt_end(PCNT_BLIT);
return 1;
}
-#ifdef __ARM_NEON__
+#ifdef BUILTIN_GPU_NEON
static int dispmode_doubleres(void)
{
if (!(pl_rearmed_cbs.gpu_caps & GPU_CAP_SUPPORTS_2X)
snprintf(hud_msg, sizeof(hud_msg), "double resolution");
return 1;
}
+#endif
+#ifdef __ARM_NEON__
static int dispmode_scale2x(void)
{
if (!resolution_ok(psx_w * 2, psx_h * 2) || psx_bpp != 16)
static int (*dispmode_switchers[])(void) = {
dispmode_default,
-#ifdef __ARM_NEON__
+#ifdef BUILTIN_GPU_NEON
dispmode_doubleres,
+#endif
+#ifdef __ARM_NEON__
dispmode_scale2x,
dispmode_eagle2x,
#endif
}
}
- //printf("%4d %4d %4d %4d\n", in_a1[0], in_a1[1], in_a2[0], in_a2[1]);
}
static void update_input(void)
emu_set_action(emu_act);
in_keystate[0] = actions[IN_BINDTYPE_PLAYER12];
+
+ // fixme
+ //if (in_type[0] == PSE_PAD_TYPE_GUNCON && tsdev)
+ // pl_gun_ts_update(tsdev, xn, yn, in);
+ // in_analog_left[0][0] = xn
}
#else /* MAEMO */
extern void update_input(void);
#endif
-void pl_update_gun(int *xn, int *yn, int *xres, int *yres, int *in)
+void pl_gun_byte2(int port, unsigned char byte)
{
- if (tsdev)
- pl_gun_ts_update(tsdev, xn, yn, in);
-
- *xres = psx_w;
- *yres = psx_h;
}
#define MAX_LAG_FRAMES 3
hud_msg[0] = 0;
}
tv_old = now;
+ //new_dynarec_print_stats();
}
#ifdef PCNT
static int ya_vsync_count;