memcpy(psxMemWLUT + 0x8000, psxMemWLUT, 0x80 * sizeof(void *));
memcpy(psxMemWLUT + 0xa000, psxMemWLUT, 0x80 * sizeof(void *));
- psxMemWLUT[0x1f00] = (u8 *)psxP;
+ // Don't allow writes to PIO Expansion region (psxP) to take effect.
+ // NOTE: Not sure if this is needed to fix any games but seems wise,
+ // seeing as some games do read from PIO as part of copy-protection
+ // check. (See fix in psxMemReset() regarding psxP region reads).
+ psxMemWLUT[0x1f00] = NULL;
psxMemWLUT[0x1f80] = (u8 *)psxH;
return 0;
char bios[1024];
memset(psxM, 0, 0x00200000);
- memset(psxP, 0, 0x00010000);
+ memset(psxP, 0xff, 0x00010000);
if (strcmp(Config.Bios, "HLE") != 0) {
sprintf(bios, "%s/%s", Config.BiosDir, Config.Bios);
#ifdef PSXMEM_LOG
PSXMEM_LOG("err lb %8.8lx\n", mem);
#endif
- return 0;
+ return 0xFF;
}
}
}
#ifdef PSXMEM_LOG
PSXMEM_LOG("err lh %8.8lx\n", mem);
#endif
- return 0;
+ return 0xFFFF;
}
}
}
#ifdef PSXMEM_LOG
if (writeok) { PSXMEM_LOG("err lw %8.8lx\n", mem); }
#endif
- return 0;
+ return 0xFFFFFFFF;
}
}
}
if (Config.Debug)
DebugCheckBP((mem & 0xffffff) | 0x80000000, W1);
*(u8 *)(p + (mem & 0xffff)) = value;
-#ifdef PSXREC
+#ifndef DRC_DISABLE
psxCpu->Clear((mem & (~3)), 1);
#endif
} else {
if (Config.Debug)
DebugCheckBP((mem & 0xffffff) | 0x80000000, W2);
*(u16 *)(p + (mem & 0xffff)) = SWAPu16(value);
-#ifdef PSXREC
+#ifndef DRC_DISABLE
psxCpu->Clear((mem & (~3)), 1);
#endif
} else {
if (Config.Debug)
DebugCheckBP((mem & 0xffffff) | 0x80000000, W4);
*(u32 *)(p + (mem & 0xffff)) = SWAPu32(value);
-#ifdef PSXREC
+#ifndef DRC_DISABLE
psxCpu->Clear(mem, 1);
#endif
} else {
if (mem != 0xfffe0130) {
-#ifdef PSXREC
+#ifndef DRC_DISABLE
if (!writeok)
psxCpu->Clear(mem, 1);
#endif