Fix input not responding
[pcsx_rearmed.git] / libpcsxcore / sio.c
index 4a0a73c..c2390bf 100644 (file)
@@ -117,6 +117,20 @@ void sioWrite8(unsigned char value) {
                                                        break;
                                        }
                                }
+                               // NegCon - Wipeout 3
+                               if( buf[parp] == 0x23 ) {
+                                       switch (value) {
+                                               // enter config mode
+                                               case 0x43:
+                                                       buf[1] = 0x79;
+                                                       break;
+
+                                               // get status
+                                               case 0x45:
+                                                       buf[1] = 0xf3;
+                                                       break;
+                                       }
+                               }
                        }
                        else padst = 0;
                        return;
@@ -386,8 +400,10 @@ void sioInterrupt() {
        PAD_LOG("Sio Interrupt (CP0.Status = %x)\n", psxRegs.CP0.n.Status);
 #endif
 //     SysPrintf("Sio Interrupt\n");
-       StatReg |= IRQ;
-       psxHu32ref(0x1070) |= SWAPu32(0x80);
+       if (!(StatReg & IRQ)) {
+               StatReg |= IRQ;
+               psxHu32ref(0x1070) |= SWAPu32(0x80);
+       }
 }
 
 void LoadMcd(int mcd, char *str) {
@@ -407,10 +423,19 @@ void LoadMcd(int mcd, char *str) {
        }
 
        McdDisable[mcd - 1] = 0;
-       if (str == NULL || *str == 0) {
+#ifdef HAVE_LIBRETRO
+       // memcard1 is handled by libretro
+       if (mcd == 1)
+               return;
+#endif
+
+       if (str == NULL || strcmp(str, "none") == 0) {
                McdDisable[mcd - 1] = 1;
                return;
        }
+       if (*str == 0)
+               return;
+
        f = fopen(str, "rb");
        if (f == NULL) {
                SysPrintf(_("The memory card %s doesn't exist - creating it\n"), str);
@@ -453,6 +478,9 @@ void LoadMcds(char *mcd1, char *mcd2) {
 void SaveMcd(char *mcd, char *data, uint32_t adr, int size) {
        FILE *f;
 
+       if (mcd == NULL || *mcd == 0 || strcmp(mcd, "none") == 0)
+               return;
+
        f = fopen(mcd, "r+b");
        if (f != NULL) {
                struct stat buf;
@@ -804,7 +832,7 @@ void GetMcdBlockInfo(int mcd, int block, McdBlock *Info) {
        strncpy(Info->Name, ptr, 16);
 }
 
-int sioFreeze(gzFile f, int Mode) {
+int sioFreeze(void *f, int Mode) {
        gzfreeze(buf, sizeof(buf));
        gzfreeze(&StatReg, sizeof(StatReg));
        gzfreeze(&ModeReg, sizeof(ModeReg));