From 8822f8b13ece6d070070aa5eef6d93d0340509a0 Mon Sep 17 00:00:00 2001 From: negativeExponent Date: Fri, 30 Oct 2020 19:33:23 +0800 Subject: Fix input not responding Pad mode set was missing that cause a few games which queries for an analog-type controller to fail or causes no inputs at all. This also change the "standard" input type to behave like one, which means it does not have rumble or analog inputs. A required input type is necessary to set the desired input effects. Probably needs some cleanup but it works for now. Fixes https://github.com/libretro/pcsx_rearmed/issues/161 and probably other input related issues. --- libpcsxcore/plugins.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/libpcsxcore/plugins.c b/libpcsxcore/plugins.c index 67fe835..8015232 100644 --- a/libpcsxcore/plugins.c +++ b/libpcsxcore/plugins.c @@ -366,6 +366,8 @@ static int LoadSPUplugin(const char *SPUdll) { return 0; } +extern int in_type[8]; + void *hPAD1Driver = NULL; void *hPAD2Driver = NULL; @@ -376,6 +378,7 @@ static PadDataS pad[8]; static int reqPos, respSize, req; static int ledStateReq44[8]; +static int PadMode[8]; /* 0 : digital 1: analog */ static unsigned char buf[256]; static unsigned char bufMulti[34] = { 0x80, 0x5a, @@ -529,6 +532,7 @@ void initBufForRequest(int padIndex, char value){ break; case CMD_QUERY_MODEL_AND_MODE : memcpy(buf, resp45, 8); + buf[4] = PadMode[padIndex]; break; case CMD_QUERY_ACT : memcpy(buf, resp46_00, 8); @@ -584,6 +588,7 @@ void reqIndex2Treatment(int padIndex, char value){ //0x01 analog ON //0x00 analog OFF ledStateReq44[padIndex] = value; + PadMode[padIndex] = value; break; case CMD_QUERY_ACT : //0x46 @@ -741,8 +746,16 @@ unsigned char _PADpoll(int port, unsigned char value) { if (reqPos == 0) { //mem the request number req = value; - //copy the default value of request response in buffer instead of the keystate - initBufForRequest(port, value); + + // Don't enable Analog/Vibration for a standard pad + if (in_type[port] == PSE_PAD_TYPE_STANDARD) { + ; // Pad keystate already in buffer + } + else + { + //copy the default value of request response in buffer instead of the keystate + initBufForRequest(port, value); + } } //if no new request the pad return 0xff, for signaling connected @@ -761,7 +774,8 @@ unsigned char _PADpoll(int port, unsigned char value) { //mem the vibration value for Large motor; pad[port].Vib[1] = value; //vibration - vibrate(port); + if (in_type[port] != PSE_PAD_TYPE_STANDARD) + vibrate(port); break; } break; -- cgit v1.2.3 From 1b9445750e5b5485a82073fe04a39338b9f2ad73 Mon Sep 17 00:00:00 2001 From: negativeExponent Date: Fri, 30 Oct 2020 19:40:55 +0800 Subject: libpscore/plugins.c: Trim trailing whitespace --- libpcsxcore/plugins.c | 78 +++++++++++++++++++++++++-------------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/libpcsxcore/plugins.c b/libpcsxcore/plugins.c index 8015232..82e653c 100644 --- a/libpcsxcore/plugins.c +++ b/libpcsxcore/plugins.c @@ -30,7 +30,7 @@ static s64 cdOpenCaseTime = 0; GPUupdateLace GPU_updateLace; GPUinit GPU_init; -GPUshutdown GPU_shutdown; +GPUshutdown GPU_shutdown; GPUconfigure GPU_configure; GPUtest GPU_test; GPUabout GPU_about; @@ -39,7 +39,7 @@ GPUclose GPU_close; GPUreadStatus GPU_readStatus; GPUreadData GPU_readData; GPUreadDataMem GPU_readDataMem; -GPUwriteStatus GPU_writeStatus; +GPUwriteStatus GPU_writeStatus; GPUwriteData GPU_writeData; GPUwriteDataMem GPU_writeDataMem; GPUdmaChain GPU_dmaChain; @@ -55,7 +55,7 @@ GPUvBlank GPU_vBlank; CDRinit CDR_init; CDRshutdown CDR_shutdown; CDRopen CDR_open; -CDRclose CDR_close; +CDRclose CDR_close; CDRtest CDR_test; CDRgetTN CDR_getTN; CDRgetTD CDR_getTD; @@ -124,7 +124,7 @@ PADsetSensitive PAD2_setSensitive; NETinit NET_init; NETshutdown NET_shutdown; NETopen NET_open; -NETclose NET_close; +NETclose NET_close; NETtest NET_test; NETconfigure NET_configure; NETabout NET_about; @@ -143,7 +143,7 @@ NETkeypressed NET_keypressed; SIO1init SIO1_init; SIO1shutdown SIO1_shutdown; SIO1open SIO1_open; -SIO1close SIO1_close; +SIO1close SIO1_close; SIO1test SIO1_test; SIO1configure SIO1_configure; SIO1about SIO1_about; @@ -218,9 +218,9 @@ static int LoadGPUplugin(const char *GPUdll) { void *drv; hGPUDriver = SysLoadLibrary(GPUdll); - if (hGPUDriver == NULL) { + if (hGPUDriver == NULL) { GPU_configure = NULL; - SysMessage (_("Could not load GPU plugin %s!"), GPUdll); return -1; + SysMessage (_("Could not load GPU plugin %s!"), GPUdll); return -1; } drv = hGPUDriver; LoadGpuSym1(init, "GPUinit"); @@ -351,7 +351,7 @@ static int LoadSPUplugin(const char *SPUdll) { LoadSpuSym0(about, "SPUabout"); LoadSpuSym0(test, "SPUtest"); LoadSpuSym1(writeRegister, "SPUwriteRegister"); - LoadSpuSym1(readRegister, "SPUreadRegister"); + LoadSpuSym1(readRegister, "SPUreadRegister"); LoadSpuSym1(writeDMA, "SPUwriteDMA"); LoadSpuSym1(readDMA, "SPUreadDMA"); LoadSpuSym1(writeDMAMem, "SPUwriteDMAMem"); @@ -381,19 +381,19 @@ static int ledStateReq44[8]; static int PadMode[8]; /* 0 : digital 1: analog */ static unsigned char buf[256]; -static unsigned char bufMulti[34] = { 0x80, 0x5a, +static unsigned char bufMulti[34] = { 0x80, 0x5a, 0x41, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x41, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x41, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x41, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - + unsigned char stdpar[8] = { 0x41, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; -unsigned char multitappar[34] = { 0x80, 0x5a, +unsigned char multitappar[34] = { 0x80, 0x5a, 0x41, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x41, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x41, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x41, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - + //response for request 44, 45, 46, 47, 4C, 4D static unsigned char resp45[8] = {0xF3, 0x5A, 0x01, 0x02, 0x00, 0x02, 0x01, 0x00}; static unsigned char resp46_00[8] = {0xF3, 0x5A, 0x00, 0x00, 0x01, 0x02, 0x00, 0x0A}; @@ -426,26 +426,26 @@ enum { // AA rumble large motor speed 0x00 -> 0xFF // RESPONSE // header 3 Bytes - // 0x00 - // PadId -> 0x41 for digital pas, 0x73 for analog pad + // 0x00 + // PadId -> 0x41 for digital pas, 0x73 for analog pad // 0x5A mode has not change (no press on analog button on the center of pad), 0x00 the analog button have been pressed and the mode switch // 6 Bytes for keystates CMD_READ_DATA_AND_VIBRATE = 0x42, - + // REQUEST // Header // 0x0N, 0x43, 0x00, XX, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // XX = 00 -> Normal mode : Seconde bytes of response = padId // XX = 01 -> Configuration mode : Seconde bytes of response = 0xF3 // RESPONSE - // enter in config mode example : + // enter in config mode example : // req : 01 43 00 01 00 00 00 00 00 00 // res : 00 41 5A buttons state, analog states - // exit config mode : + // exit config mode : // req : 01 43 00 00 00 00 00 00 00 00 // res : 00 F3 5A buttons state, analog states CMD_CONFIG_MODE = 0x43, - + // Set led State // REQUEST // 0x0N, 0x44, 0x00, VAL, SEL, 0x00, 0x00, 0x00, 0x00 @@ -455,7 +455,7 @@ enum { // RESPONSE // 0x00, 0xF3, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 CMD_SET_MODE_AND_LOCK = 0x44, - + // Get Analog Led state // REQUEST // 0x0N, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 @@ -464,7 +464,7 @@ enum { // VAL = 00 Led OFF // VAL = 01 Led ON CMD_QUERY_MODEL_AND_MODE = 0x45, - + //Get Variable A // REQUEST // 0x0N, 0x46, 0x00, 0xXX, 0x00, 0x00, 0x00, 0x00, 0x00 @@ -474,13 +474,13 @@ enum { // XX=01 // 0x00, 0xF3, 0x5A, 0x00, 0x00, 0x01, 0x01, 0x01, 0x14 CMD_QUERY_ACT = 0x46, - + // REQUEST // 0x0N, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // RESPONSE // 0x00, 0xF3, 0x5A, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00 CMD_QUERY_COMB = 0x47, - + // REQUEST // 0x0N, 0x4C, 0x00, 0xXX, 0x00, 0x00, 0x00, 0x00, 0x00 // RESPONSE @@ -489,7 +489,7 @@ enum { // XX = 1 // 0x00, 0xF3, 0x5A, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00 CMD_QUERY_MODE = 0x4C, - + // REQUEST // 0x0N, 0x4D, 0x00, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF // RESPONSE @@ -611,7 +611,7 @@ void reqIndex2Treatment(int padIndex, char value){ break; } } - + void vibrate(int padIndex){ if (pad[padIndex].Vib[0] != pad[padIndex].VibF[0] || pad[padIndex].Vib[1] != pad[padIndex].VibF[1]) { //value is different update Value and call libretro for vibration @@ -653,26 +653,26 @@ void _PADstartPoll(PadDataS *pad) { stdpar[1] = 0x5a; stdpar[2] = pad->buttonStatus & 0xff; stdpar[3] = pad->buttonStatus >> 8; - + //This code assumes an X resolution of 256 and a Y resolution of 240 int xres = 256; int yres = 240; - - //The code wants an input range for x and y of 0-1023 we passed in -32767 -> 32767 + + //The code wants an input range for x and y of 0-1023 we passed in -32767 -> 32767 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[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" @@ -684,9 +684,9 @@ void _PADstartPoll(PadDataS *pad) { stdpar[4] = 0x01; stdpar[5] = 0x00; stdpar[6] = 0x0A; - stdpar[7] = 0x00; + stdpar[7] = 0x00; } - + memcpy(buf, stdpar, 8); respSize = 8; break; @@ -746,7 +746,7 @@ unsigned char _PADpoll(int port, unsigned char value) { if (reqPos == 0) { //mem the request number req = value; - + // Don't enable Analog/Vibration for a standard pad if (in_type[port] == PSE_PAD_TYPE_STANDARD) { ; // Pad keystate already in buffer @@ -757,10 +757,10 @@ unsigned char _PADpoll(int port, unsigned char value) { initBufForRequest(port, value); } } - + //if no new request the pad return 0xff, for signaling connected if (reqPos >= respSize) return 0xff; - + switch(reqPos){ case 2: reqIndex2Treatment(port, value); @@ -830,7 +830,7 @@ unsigned char CALLBACK PAD1__poll(unsigned char value) { } //printf("%2x:%2x, ",value,tmp); return tmp; - + } @@ -895,7 +895,7 @@ unsigned char CALLBACK PAD2__startPoll(int pad) { PAD2_readPort2(&padd); multitap2 = padd.portMultitap; } - + // just one pad is on port 1 : NO MULTITAP if (multitap2 == 0) { PadDataS padd; @@ -1195,7 +1195,7 @@ void ReleasePlugins() { if (hPAD1Driver != NULL) PAD1_shutdown(); if (hPAD2Driver != NULL) PAD2_shutdown(); - if (Config.UseNet && hNETDriver != NULL) NET_shutdown(); + if (Config.UseNet && hNETDriver != NULL) NET_shutdown(); if (hCDRDriver != NULL) { SysCloseLibrary(hCDRDriver); hCDRDriver = NULL; } if (hGPUDriver != NULL) { SysCloseLibrary(hGPUDriver); hGPUDriver = NULL; } -- cgit v1.2.3 From b17ff6dfd1c32ae18bbcd81be47befd0f16f26b7 Mon Sep 17 00:00:00 2001 From: negativeExponent Date: Fri, 30 Oct 2020 19:43:11 +0800 Subject: Change indents to tabs and alignment --- libpcsxcore/plugins.c | 299 +++++++++++++++++++++++++------------------------- 1 file changed, 149 insertions(+), 150 deletions(-) diff --git a/libpcsxcore/plugins.c b/libpcsxcore/plugins.c index 82e653c..19de72c 100644 --- a/libpcsxcore/plugins.c +++ b/libpcsxcore/plugins.c @@ -242,7 +242,7 @@ static int LoadGPUplugin(const char *GPUdll) { LoadGpuSym0(getScreenPic, "GPUgetScreenPic"); LoadGpuSym0(showScreenPic, "GPUshowScreenPic"); LoadGpuSym0(clearDynarec, "GPUclearDynarec"); - LoadGpuSym0(vBlank, "GPUvBlank"); + LoadGpuSym0(vBlank, "GPUvBlank"); LoadGpuSym0(configure, "GPUconfigure"); LoadGpuSym0(test, "GPUtest"); LoadGpuSym0(about, "GPUabout"); @@ -627,118 +627,117 @@ void vibrate(int padIndex){ //Build response for 0x42 request Pad in port void _PADstartPoll(PadDataS *pad) { - switch (pad->controllerType) { - case PSE_PAD_TYPE_MOUSE: + switch (pad->controllerType) { + case PSE_PAD_TYPE_MOUSE: stdpar[0] = 0x12; - stdpar[2] = pad->buttonStatus & 0xff; - stdpar[3] = pad->buttonStatus >> 8; - stdpar[4] = pad->moveX; - stdpar[5] = pad->moveY; - memcpy(buf, stdpar, 6); - respSize = 6; - break; - case PSE_PAD_TYPE_NEGCON: // npc101/npc104(slph00001/slph00069) - stdpar[0] = 0x23; - stdpar[2] = pad->buttonStatus & 0xff; - stdpar[3] = pad->buttonStatus >> 8; - stdpar[4] = pad->rightJoyX; - stdpar[5] = pad->rightJoyY; - stdpar[6] = pad->leftJoyX; - stdpar[7] = pad->leftJoyY; - memcpy(buf, stdpar, 8); - respSize = 8; - break; + stdpar[2] = pad->buttonStatus & 0xff; + stdpar[3] = pad->buttonStatus >> 8; + stdpar[4] = pad->moveX; + stdpar[5] = pad->moveY; + memcpy(buf, stdpar, 6); + respSize = 6; + break; + case PSE_PAD_TYPE_NEGCON: // npc101/npc104(slph00001/slph00069) + stdpar[0] = 0x23; + stdpar[2] = pad->buttonStatus & 0xff; + stdpar[3] = pad->buttonStatus >> 8; + stdpar[4] = pad->rightJoyX; + stdpar[5] = pad->rightJoyY; + stdpar[6] = pad->leftJoyX; + stdpar[7] = pad->leftJoyY; + memcpy(buf, stdpar, 8); + respSize = 8; + break; case PSE_PAD_TYPE_GUNCON: // GUNCON - gun controller SLPH-00034 from Namco - stdpar[0] = 0x63; - stdpar[1] = 0x5a; - stdpar[2] = pad->buttonStatus & 0xff; - stdpar[3] = pad->buttonStatus >> 8; - - //This code assumes an X resolution of 256 and a Y resolution of 240 - int xres = 256; - int yres = 240; - - //The code wants an input range for x and y of 0-1023 we passed in -32767 -> 32767 - 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; - } - - memcpy(buf, stdpar, 8); - respSize = 8; - break; - case PSE_PAD_TYPE_ANALOGPAD: // scph1150 - stdpar[0] = 0x73; - stdpar[2] = pad->buttonStatus & 0xff; - stdpar[3] = pad->buttonStatus >> 8; - stdpar[4] = pad->rightJoyX; - stdpar[5] = pad->rightJoyY; - stdpar[6] = pad->leftJoyX; - stdpar[7] = pad->leftJoyY; - memcpy(buf, stdpar, 8); - respSize = 8; - break; - case PSE_PAD_TYPE_ANALOGJOY: // scph1110 - stdpar[0] = 0x53; - stdpar[2] = pad->buttonStatus & 0xff; - stdpar[3] = pad->buttonStatus >> 8; - stdpar[4] = pad->rightJoyX; - stdpar[5] = pad->rightJoyY; - stdpar[6] = pad->leftJoyX; - stdpar[7] = pad->leftJoyY; - memcpy(buf, stdpar, 8); - respSize = 8; - break; - case PSE_PAD_TYPE_STANDARD: - default: - stdpar[0] = 0x41; - stdpar[2] = pad->buttonStatus & 0xff; - stdpar[3] = pad->buttonStatus >> 8; - //avoid analog value in multitap mode if change pad type in game. - stdpar[4] = 0xff; - stdpar[5] = 0xff; - stdpar[6] = 0xff; - stdpar[7] = 0xff; - memcpy(buf, stdpar, 8); - respSize = 8; - } + stdpar[0] = 0x63; + stdpar[1] = 0x5a; + stdpar[2] = pad->buttonStatus & 0xff; + stdpar[3] = pad->buttonStatus >> 8; + + //This code assumes an X resolution of 256 and a Y resolution of 240 + int xres = 256; + int yres = 240; + + //The code wants an input range for x and y of 0-1023 we passed in -32767 -> 32767 + 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; + } + + memcpy(buf, stdpar, 8); + respSize = 8; + break; + case PSE_PAD_TYPE_ANALOGPAD: // scph1150 + stdpar[0] = 0x73; + stdpar[2] = pad->buttonStatus & 0xff; + stdpar[3] = pad->buttonStatus >> 8; + stdpar[4] = pad->rightJoyX; + stdpar[5] = pad->rightJoyY; + stdpar[6] = pad->leftJoyX; + stdpar[7] = pad->leftJoyY; + memcpy(buf, stdpar, 8); + respSize = 8; + break; + case PSE_PAD_TYPE_ANALOGJOY: // scph1110 + stdpar[0] = 0x53; + stdpar[2] = pad->buttonStatus & 0xff; + stdpar[3] = pad->buttonStatus >> 8; + stdpar[4] = pad->rightJoyX; + stdpar[5] = pad->rightJoyY; + stdpar[6] = pad->leftJoyX; + stdpar[7] = pad->leftJoyY; + memcpy(buf, stdpar, 8); + respSize = 8; + break; + case PSE_PAD_TYPE_STANDARD: + default: + stdpar[0] = 0x41; + stdpar[2] = pad->buttonStatus & 0xff; + stdpar[3] = pad->buttonStatus >> 8; + //avoid analog value in multitap mode if change pad type in game. + stdpar[4] = 0xff; + stdpar[5] = 0xff; + stdpar[6] = 0xff; + stdpar[7] = 0xff; + memcpy(buf, stdpar, 8); + respSize = 8; + } } //Build response for 0x42 request Multitap in port //Response header for multitap : 0x80, 0x5A, (Pad information port 1-2A), (Pad information port 1-2B), (Pad information port 1-2C), (Pad information port 1-2D) void _PADstartPollMultitap(PadDataS* padd) { - int i, offset; - for(i = 0; i < 4; i++) { - offset = 2 + (i * 8); + int i, offset; + for(i = 0; i < 4; i++) { + offset = 2 + (i * 8); _PADstartPoll(&padd[i]); memcpy(multitappar+offset, stdpar, 8); - } - memcpy(bufMulti, multitappar, 34); - respSize = 34; + } + memcpy(bufMulti, multitappar, 34); + respSize = 34; } @@ -1054,62 +1053,62 @@ unsigned long CALLBACK SIO1__readBaud32(void) { return 0; } void CALLBACK SIO1__registerCallback(void (CALLBACK *callback)(void)) {}; void CALLBACK SIO1irq(void) { - psxHu32ref(0x1070) |= SWAPu32(0x100); + psxHu32ref(0x1070) |= SWAPu32(0x100); } #define LoadSio1Sym1(dest, name) \ - LoadSym(SIO1_##dest, SIO1##dest, name, TRUE); + LoadSym(SIO1_##dest, SIO1##dest, name, TRUE); #define LoadSio1SymN(dest, name) \ - LoadSym(SIO1_##dest, SIO1##dest, name, FALSE); + LoadSym(SIO1_##dest, SIO1##dest, name, FALSE); #define LoadSio1Sym0(dest, name) \ - LoadSym(SIO1_##dest, SIO1##dest, name, FALSE); \ - if (SIO1_##dest == NULL) SIO1_##dest = (SIO1##dest) SIO1__##dest; + LoadSym(SIO1_##dest, SIO1##dest, name, FALSE); \ + if (SIO1_##dest == NULL) SIO1_##dest = (SIO1##dest) SIO1__##dest; static int LoadSIO1plugin(const char *SIO1dll) { - void *drv; - - hSIO1Driver = SysLoadLibrary(SIO1dll); - if (hSIO1Driver == NULL) { - SysMessage (_("Could not load SIO1 plugin %s!"), SIO1dll); return -1; - } - drv = hSIO1Driver; - - LoadSio1Sym0(init, "SIO1init"); - LoadSio1Sym0(shutdown, "SIO1shutdown"); - LoadSio1Sym0(open, "SIO1open"); - LoadSio1Sym0(close, "SIO1close"); - LoadSio1Sym0(pause, "SIO1pause"); - LoadSio1Sym0(resume, "SIO1resume"); - LoadSio1Sym0(keypressed, "SIO1keypressed"); - LoadSio1Sym0(configure, "SIO1configure"); - LoadSio1Sym0(test, "SIO1test"); - LoadSio1Sym0(about, "SIO1about"); - LoadSio1Sym0(writeData8, "SIO1writeData8"); - LoadSio1Sym0(writeData16, "SIO1writeData16"); - LoadSio1Sym0(writeData32, "SIO1writeData32"); - LoadSio1Sym0(writeStat16, "SIO1writeStat16"); - LoadSio1Sym0(writeStat32, "SIO1writeStat32"); - LoadSio1Sym0(writeMode16, "SIO1writeMode16"); - LoadSio1Sym0(writeMode32, "SIO1writeMode32"); - LoadSio1Sym0(writeCtrl16, "SIO1writeCtrl16"); - LoadSio1Sym0(writeCtrl32, "SIO1writeCtrl32"); - LoadSio1Sym0(writeBaud16, "SIO1writeBaud16"); - LoadSio1Sym0(writeBaud32, "SIO1writeBaud32"); - LoadSio1Sym0(readData16, "SIO1readData16"); - LoadSio1Sym0(readData32, "SIO1readData32"); - LoadSio1Sym0(readStat16, "SIO1readStat16"); - LoadSio1Sym0(readStat32, "SIO1readStat32"); - LoadSio1Sym0(readMode16, "SIO1readMode16"); - LoadSio1Sym0(readMode32, "SIO1readMode32"); - LoadSio1Sym0(readCtrl16, "SIO1readCtrl16"); - LoadSio1Sym0(readCtrl32, "SIO1readCtrl32"); - LoadSio1Sym0(readBaud16, "SIO1readBaud16"); - LoadSio1Sym0(readBaud32, "SIO1readBaud32"); - LoadSio1Sym0(registerCallback, "SIO1registerCallback"); - - return 0; + void *drv; + + hSIO1Driver = SysLoadLibrary(SIO1dll); + if (hSIO1Driver == NULL) { + SysMessage (_("Could not load SIO1 plugin %s!"), SIO1dll); return -1; + } + drv = hSIO1Driver; + + LoadSio1Sym0(init, "SIO1init"); + LoadSio1Sym0(shutdown, "SIO1shutdown"); + LoadSio1Sym0(open, "SIO1open"); + LoadSio1Sym0(close, "SIO1close"); + LoadSio1Sym0(pause, "SIO1pause"); + LoadSio1Sym0(resume, "SIO1resume"); + LoadSio1Sym0(keypressed, "SIO1keypressed"); + LoadSio1Sym0(configure, "SIO1configure"); + LoadSio1Sym0(test, "SIO1test"); + LoadSio1Sym0(about, "SIO1about"); + LoadSio1Sym0(writeData8, "SIO1writeData8"); + LoadSio1Sym0(writeData16, "SIO1writeData16"); + LoadSio1Sym0(writeData32, "SIO1writeData32"); + LoadSio1Sym0(writeStat16, "SIO1writeStat16"); + LoadSio1Sym0(writeStat32, "SIO1writeStat32"); + LoadSio1Sym0(writeMode16, "SIO1writeMode16"); + LoadSio1Sym0(writeMode32, "SIO1writeMode32"); + LoadSio1Sym0(writeCtrl16, "SIO1writeCtrl16"); + LoadSio1Sym0(writeCtrl32, "SIO1writeCtrl32"); + LoadSio1Sym0(writeBaud16, "SIO1writeBaud16"); + LoadSio1Sym0(writeBaud32, "SIO1writeBaud32"); + LoadSio1Sym0(readData16, "SIO1readData16"); + LoadSio1Sym0(readData32, "SIO1readData32"); + LoadSio1Sym0(readStat16, "SIO1readStat16"); + LoadSio1Sym0(readStat32, "SIO1readStat32"); + LoadSio1Sym0(readMode16, "SIO1readMode16"); + LoadSio1Sym0(readMode32, "SIO1readMode32"); + LoadSio1Sym0(readCtrl16, "SIO1readCtrl16"); + LoadSio1Sym0(readCtrl32, "SIO1readCtrl32"); + LoadSio1Sym0(readBaud16, "SIO1readBaud16"); + LoadSio1Sym0(readBaud32, "SIO1readBaud32"); + LoadSio1Sym0(registerCallback, "SIO1registerCallback"); + + return 0; } #endif -- cgit v1.2.3