sio: only do IRQ if it's bit has been cleared
authornotaz <notasas@gmail.com>
Tue, 26 Jul 2011 16:45:03 +0000 (19:45 +0300)
committernotaz <notasas@gmail.com>
Tue, 26 Jul 2011 16:45:03 +0000 (19:45 +0300)
tested on the real thing.

libpcsxcore/sio.c

index 4a0a73c..81fe0ea 100644 (file)
@@ -386,8 +386,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) {