attempt to improve guncon defaults
authornotaz <notasas@gmail.com>
Fri, 15 Sep 2023 23:41:06 +0000 (02:41 +0300)
committernotaz <notasas@gmail.com>
Mon, 18 Sep 2023 19:17:27 +0000 (22:17 +0300)
The previous change wrongly introduced resolution into the calculation
which is unneeded because input is not pixel coordinates.

frontend/libretro.c
frontend/plugin.c
frontend/plugin_lib.c
libpcsxcore/plugins.c
libpcsxcore/plugins.h
plugins/gpulib/gpu.c
plugins/gpulib/gpu.h

index 965f930..a26d466 100644 (file)
@@ -504,12 +504,6 @@ void pl_timing_prepare(int is_pal)
    is_pal_mode = is_pal;
 }
 
-void plat_get_psx_resolution(int *xres, int *yres)
-{
-   *xres = psx_w;
-   *yres = psx_h;
-}
-
 void plat_trigger_vibrate(int pad, int low, int high)
 {
    if (!rumble_cb)
index 3a0710a..3374141 100644 (file)
@@ -139,6 +139,7 @@ extern long GPUdmaChain(uint32_t *,uint32_t);
 extern void GPUupdateLace(void);
 extern long GPUfreeze(uint32_t, void *);
 extern void GPUvBlank(int, int);
+extern void GPUgetScreenInfo(int *y, int *base_hres);
 extern void GPUrearmedCallbacks(const struct rearmed_cbs *cbs);
 
 
@@ -222,6 +223,7 @@ static const struct {
        DIRECT_GPU(GPUdmaChain),
        DIRECT_GPU(GPUfreeze),
        DIRECT_GPU(GPUvBlank),
+       DIRECT_GPU(GPUgetScreenInfo),
        DIRECT_GPU(GPUrearmedCallbacks),
 
        DIRECT_GPU(GPUdisplayText),
index 0f02312..8a6b6ad 100644 (file)
@@ -633,12 +633,6 @@ void pl_gun_byte2(int port, unsigned char byte)
 {
 }
 
-void plat_get_psx_resolution(int *xres, int *yres)
-{
-       *xres = psx_w;
-       *yres = psx_h;
-}
-
 #define MAX_LAG_FRAMES 3
 
 #define tvdiff(tv, tv_old) \
index 93af3d0..2dacfd5 100644 (file)
@@ -49,6 +49,7 @@ GPUfreeze             GPU_freeze;
 GPUgetScreenPic       GPU_getScreenPic;
 GPUshowScreenPic      GPU_showScreenPic;
 GPUvBlank             GPU_vBlank;
+GPUgetScreenInfo      GPU_getScreenInfo;
 
 CDRinit               CDR_init;
 CDRshutdown           CDR_shutdown;
@@ -194,6 +195,7 @@ void CALLBACK GPU__keypressed(int key) {}
 long CALLBACK GPU__getScreenPic(unsigned char *pMem) { return -1; }
 long CALLBACK GPU__showScreenPic(unsigned char *pMem) { return -1; }
 void CALLBACK GPU__vBlank(int val) {}
+void CALLBACK GPU__getScreenInfo(int *y, int *base_hres) {}
 
 #define LoadGpuSym1(dest, name) \
        LoadSym(GPU_##dest, GPU##dest, name, TRUE);
@@ -233,6 +235,7 @@ static int LoadGPUplugin(const char *GPUdll) {
        LoadGpuSym0(getScreenPic, "GPUgetScreenPic");
        LoadGpuSym0(showScreenPic, "GPUshowScreenPic");
        LoadGpuSym0(vBlank, "GPUvBlank");
+       LoadGpuSym0(getScreenInfo, "GPUgetScreenInfo");
        LoadGpuSym0(configure, "GPUconfigure");
        LoadGpuSym0(test, "GPUtest");
        LoadGpuSym0(about, "GPUabout");
@@ -613,9 +616,8 @@ static void PADstartPoll_(PadDataS *pad) {
                        stdpar[2] = pad->buttonStatus & 0xff;
                        stdpar[3] = pad->buttonStatus >> 8;
 
-                       int absX = pad->absoluteX;
+                       int absX = pad->absoluteX; // 0-1023
                        int absY = pad->absoluteY;
-                       int xres = 256, yres = 240;
 
                        if (absX == 65536 || absY == 65536) {
                                stdpar[4] = 0x01;
@@ -624,9 +626,13 @@ static void PADstartPoll_(PadDataS *pad) {
                                stdpar[7] = 0x00;
                        }
                        else {
-                               plat_get_psx_resolution(&xres, &yres);
-                               int x = 0x5a - (xres - 256) / 3 + (((xres - 256) / 3 + 356) * absX >> 10);
-                               int y = 0x20 + (yres * absY >> 10);
+                               int y_ofs = 0, yres = 240;
+                               GPU_getScreenInfo(&y_ofs, &yres);
+                               int y_top = (Config.PsxType ? 0x30 : 0x19) + y_ofs;
+                               int w = Config.PsxType ? 385 : 378;
+                               int x = 0x40 + (w * absX >> 10);
+                               int y = y_top + (yres * absY >> 10);
+                               //printf("%3d %3d %4x %4x\n", absX, absY, x, y);
 
                                stdpar[4] = x;
                                stdpar[5] = x >> 8;
index b7af7c3..c563470 100644 (file)
@@ -76,6 +76,7 @@ typedef long (CALLBACK* GPUfreeze)(uint32_t, GPUFreeze_t *);
 typedef long (CALLBACK* GPUgetScreenPic)(unsigned char *);\r
 typedef long (CALLBACK* GPUshowScreenPic)(unsigned char *);\r
 typedef void (CALLBACK* GPUvBlank)(int, int);\r
+typedef void (CALLBACK* GPUgetScreenInfo)(int *, int *);\r
 \r
 // GPU function pointers\r
 extern GPUupdateLace    GPU_updateLace;\r
@@ -100,6 +101,7 @@ extern GPUfreeze        GPU_freeze;
 extern GPUgetScreenPic  GPU_getScreenPic;\r
 extern GPUshowScreenPic GPU_showScreenPic;\r
 extern GPUvBlank        GPU_vBlank;\r
+extern GPUgetScreenInfo GPU_getScreenInfo;\r
 \r
 // CD-ROM Functions\r
 typedef long (CALLBACK* CDRinit)(void);\r
index dfaff58..c844144 100644 (file)
@@ -879,6 +879,14 @@ void GPUvBlank(int is_vblank, int lcf)
   }
 }
 
+void GPUgetScreenInfo(int *y, int *base_hres)
+{
+  *y = gpu.screen.y;
+  *base_hres = gpu.screen.vres;
+  if (gpu.status & PSX_GPU_STATUS_DHEIGHT)
+    *base_hres >>= 1;
+}
+
 #include "../../frontend/plugin_lib.h"
 
 void GPUrearmedCallbacks(const struct rearmed_cbs *cbs)
index 1582ee1..dbca808 100644 (file)
@@ -150,6 +150,7 @@ void GPUupdateLace(void);
 long GPUopen(unsigned long *disp, char *cap, char *cfg);
 long GPUclose(void);
 void GPUvBlank(int is_vblank, int lcf);
+void GPUgetScreenInfo(int *y, int *base_hres);
 void GPUrearmedCallbacks(const struct rearmed_cbs *cbs_);
 
 #ifdef __cplusplus