X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libpcsxcore%2Fplugins.c;h=4f0897e21b7ca9712a0b094869c5a5a417485ff3;hb=4b2392bb;hp=34f2481291c61c31da6f01ec5a5b0f46d670fa8e;hpb=73817437ddebaf6d53a401d723d4c8f6971829a7;p=pcsx_rearmed.git diff --git a/libpcsxcore/plugins.c b/libpcsxcore/plugins.c index 34f24812..4f0897e2 100644 --- a/libpcsxcore/plugins.c +++ b/libpcsxcore/plugins.c @@ -49,7 +49,6 @@ GPUmakeSnapshot GPU_makeSnapshot; GPUfreeze GPU_freeze; GPUgetScreenPic GPU_getScreenPic; GPUshowScreenPic GPU_showScreenPic; -GPUclearDynarec GPU_clearDynarec; GPUvBlank GPU_vBlank; CDRinit CDR_init; @@ -201,7 +200,6 @@ void CALLBACK GPU__makeSnapshot(void) {} 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__clearDynarec(void (CALLBACK *callback)(void)) {} void CALLBACK GPU__vBlank(int val) {} #define LoadGpuSym1(dest, name) \ @@ -241,7 +239,6 @@ static int LoadGPUplugin(const char *GPUdll) { LoadGpuSym1(freeze, "GPUfreeze"); LoadGpuSym0(getScreenPic, "GPUgetScreenPic"); LoadGpuSym0(showScreenPic, "GPUshowScreenPic"); - LoadGpuSym0(clearDynarec, "GPUclearDynarec"); LoadGpuSym0(vBlank, "GPUvBlank"); LoadGpuSym0(configure, "GPUconfigure"); LoadGpuSym0(test, "GPUtest"); @@ -371,8 +368,8 @@ extern int in_type[8]; void *hPAD1Driver = NULL; void *hPAD2Driver = NULL; -static int multitap1 = -1; -static int multitap2 = -1; +static int multitap1; +static int multitap2; //Pad information, keystate, mode, config mode, vibration static PadDataS pad[8]; @@ -650,7 +647,7 @@ void _PADstartPoll(PadDataS *pad) { memcpy(buf, stdpar, 8); respSize = 8; break; - case PSE_PAD_TYPE_GUNCON: // GUNCON - gun controller SLPH-00034 from Namco + case PSE_PAD_TYPE_GUNCON: // GUNCON - gun controller SLPH-00034 from Namco stdpar[0] = 0x63; stdpar[1] = 0x5a; stdpar[2] = pad->buttonStatus & 0xff; @@ -664,28 +661,17 @@ void _PADstartPoll(PadDataS *pad) { int absX = (pad->absoluteX / 64) + 512; int absY = (pad->absoluteY / 64) + 512; - //Keep within limits - if (absX > 1023) absX = 1023; - if (absX < 0) absX = 0; - if (absY > 1023) absY = 1023; - if (absY < 0) absY = 0; - - stdpar[4] = 0x5a - (xres - 256) / 3 + (((xres - 256) / 3 + 356) * absX >> 10); - stdpar[5] = (0x5a - (xres - 256) / 3 + (((xres - 256) / 3 + 356) * absX >> 10)) >> 8; - stdpar[6] = 0x20 + (yres * absY >> 10); - stdpar[7] = (0x20 + (yres * absY >> 10)) >> 8; - - //Offscreen - Point at the side of the screen so PSX thinks you are pointing offscreen - //Required as a mouse can't be offscreen - //Coordinates X=0001h, Y=000Ah indicates "no light" - //This will mean you cannot shoot the very each of the screen - //ToDo read offscreen range from settings if useful to change - int OffscreenRange = 2; - if (absX < (OffscreenRange) || absX > (1023 - OffscreenRange) || absY < (OffscreenRange) || absY > (1023 - OffscreenRange)) { - stdpar[4] = 0x01; - stdpar[5] = 0x00; - stdpar[6] = 0x0A; - stdpar[7] = 0x00; + if (absX == 65536 || absY == 65536) { + stdpar[4] = 0x01; + stdpar[5] = 0x00; + stdpar[6] = 0x0A; + stdpar[7] = 0x00; + } + else { + stdpar[4] = 0x5a - (xres - 256) / 3 + (((xres - 256) / 3 + 356) * absX >> 10); + stdpar[5] = (0x5a - (xres - 256) / 3 + (((xres - 256) / 3 + 356) * absX >> 10)) >> 8; + stdpar[6] = 0x20 + (yres * absY >> 10); + stdpar[7] = (0x20 + (yres * absY >> 10)) >> 8; } memcpy(buf, stdpar, 8); @@ -776,11 +762,8 @@ unsigned char _PADpoll(int port, unsigned char value) { } //if no new request the pad return 0xff, for signaling connected - if (reqPos >= respSize -#ifdef ICACHE_EMULATION - && writeok -#endif - ) return 0xff; + if (reqPos >= respSize) + return 0xff; switch(reqPos){ case 2: @@ -795,8 +778,7 @@ unsigned char _PADpoll(int port, unsigned char value) { //mem the vibration value for Large motor; pad[port].Vib[1] = value; - if (in_type[port] == PSE_PAD_TYPE_STANDARD && - in_type[port] == PSE_PAD_TYPE_NEGCON) + if (in_type[port] != PSE_PAD_TYPE_ANALOGPAD) break; //vibration @@ -820,12 +802,6 @@ unsigned char _PADpollMultitap(int port, unsigned char value) { unsigned char CALLBACK PAD1__startPoll(int pad) { reqPos = 0; // first call the pad provide if a multitap is connected between the psx and himself - if (multitap1 == -1) { - PadDataS padd; - padd.requestPadIndex = 0; - PAD1_readPort1(&padd); - multitap1 = padd.portMultitap; - } // just one pad is on port 1 : NO MULTITAP if (multitap1 == 0) { PadDataS padd; @@ -876,6 +852,7 @@ long CALLBACK PAD1__keypressed() { return 0; } if (PAD1_##dest == NULL) PAD1_##dest = (PAD##dest) PAD1__##dest; static int LoadPAD1plugin(const char *PAD1dll) { + PadDataS padd; void *drv; hPAD1Driver = SysLoadLibrary(PAD1dll); @@ -898,6 +875,10 @@ static int LoadPAD1plugin(const char *PAD1dll) { LoadPad1Sym0(poll, "PADpoll"); LoadPad1SymN(setSensitive, "PADsetSensitive"); + padd.requestPadIndex = 0; + PAD1_readPort1(&padd); + multitap1 = padd.portMultitap; + return 0; } @@ -913,14 +894,6 @@ unsigned char CALLBACK PAD2__startPoll(int pad) { pad_index = 0; } - //first call the pad provide if a multitap is connected between the psx and himself - if (multitap2 == -1) { - PadDataS padd; - padd.requestPadIndex = pad_index; - PAD2_readPort2(&padd); - multitap2 = padd.portMultitap; - } - // just one pad is on port 1 : NO MULTITAP if (multitap2 == 0) { PadDataS padd; @@ -969,6 +942,7 @@ long CALLBACK PAD2__keypressed() { return 0; } LoadSym(PAD2_##dest, PAD##dest, name, FALSE); static int LoadPAD2plugin(const char *PAD2dll) { + PadDataS padd; void *drv; hPAD2Driver = SysLoadLibrary(PAD2dll); @@ -991,6 +965,10 @@ static int LoadPAD2plugin(const char *PAD2dll) { LoadPad2Sym0(poll, "PADpoll"); LoadPad2SymN(setSensitive, "PADsetSensitive"); + padd.requestPadIndex = 0; + PAD2_readPort2(&padd); + multitap2 = padd.portMultitap; + return 0; } @@ -1139,10 +1117,6 @@ static int LoadSIO1plugin(const char *SIO1dll) { #endif -void CALLBACK clearDynarec(void) { - psxCpu->Reset(); -} - int LoadPlugins() { int ret; char Plugin[MAXPATHLEN * 2];