psxbios: Add checks to PAD_init
authorgameblabla <gameblabla@openmailbox.org>
Wed, 17 Jul 2019 23:10:33 +0000 (01:10 +0200)
committergameblabla <gameblabla@openmailbox.org>
Wed, 17 Jul 2019 23:10:33 +0000 (01:10 +0200)
Nocash documentation says that function fails if type is not 0x20000000
or 0x20000001. In case of failure, it should return 0.
If not, then it should return 2.

This fixes input in Digimon World.

libpcsxcore/psxbios.c

index 4624bf4..42926c2 100644 (file)
@@ -1613,10 +1613,17 @@ void psxBios_PAD_init() { // 15
 #ifdef PSXBIOS_LOG
        PSXBIOS_LOG("psxBios_%s\n", biosB0n[0x15]);
 #endif
+       if (!(a0 == 0x20000000 || a0 == 0x20000001))
+       {
+               v0 = 0;
+               pc0 = ra;
+               return;
+       }
        psxHwWrite16(0x1f801074, (u16)(psxHwRead16(0x1f801074) | 0x1));
        pad_buf = (int *)Ra1;
        *pad_buf = -1;
        psxRegs.CP0.n.Status |= 0x401;
+       v0 = 2;
        pc0 = ra;
 }