#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"
+#include "../libpcsxcore/gpu.h"
#define HUD_HEIGHT 10
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 const unsigned short colors[2] = { 0x1fe3, 0x0700 };
unsigned short *dest = (unsigned short *)pl_vout_buf +
- vout_w * (vout_h - HUD_HEIGHT) + vout_w / 2 - 192/2;
+ pl_vout_w * (vout_h - HUD_HEIGHT) + pl_vout_w / 2 - 192/2;
unsigned short *d, p;
int c, x, y;
- if (dest == NULL || pl_vout_bpp != 16)
+ if (pl_vout_buf == NULL || pl_vout_bpp != 16)
return;
spu_get_debug_info(&live_chans, &run_chans, &fmod_chans, &noise_chans);
(fmod_chans & (1<<c)) ? 0xf000 :
(noise_chans & (1<<c)) ? 0x001f :
colors[c & 1];
- for (y = 0; y < 8; y++, d += vout_w)
+ for (y = 0; y < 8; y++, d += pl_vout_w)
for (x = 0; x < 8; x++)
d[x] = p;
}
}
-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 int flip_clear_counter;
+
+void pl_force_clear(void)
+{
+ flip_clear_counter = 2;
+}
+
+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;
unsigned char *dest = pl_vout_buf;
const unsigned short *src = vram;
int dstride = pl_vout_w, h1 = h;
int h_full = pl_vout_h - pl_vout_yoffset;
- int doffs;
+ int xoffs = 0, doffs;
pcnt_start(PCNT_BLIT);
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)
- clear_counter = 2;
- doffs_old = doffs;
+ if (dims_changed)
+ flip_clear_counter = 2;
- if (clear_counter > 0) {
+ if (flip_clear_counter > 0) {
if (pl_plat_clear)
pl_plat_clear();
else
memset(pl_vout_buf, 0,
dstride * h_full * pl_vout_bpp / 8);
- clear_counter--;
+ flip_clear_counter--;
}
if (pl_plat_blit)
}
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);
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
.mmap = pl_mmap,
.munmap = pl_munmap,
.pl_set_gpu_caps = pl_set_gpu_caps,
+ .gpu_state_change = gpu_state_change,
};
/* watchdog */