- if (mem != 0xfffe0130) {
-#ifdef PSXREC
- if (!writeok)
- psxCpu->Clear(mem, 1);
-#endif
-
-#ifdef PSXMEM_LOG
- if (writeok) { PSXMEM_LOG("err sw %8.8lx\n", mem); }
-#endif
- } else {
- int i;
-
- switch (value) {
- case 0x800: case 0x804:
- if (writeok == FALSE) break;
- writeok = FALSE;
- memset(psxMemWLUT + 0x0000, 0, 0x80 * sizeof(void *));
- memset(psxMemWLUT + 0x8000, 0, 0x80 * sizeof(void *));
- memset(psxMemWLUT + 0xa000, 0, 0x80 * sizeof(void *));
-#ifdef ICACHE_EMULATION
- /* Cache is now isolated, pending cache-flush sequence:
- * Backup lower 64KB of PS1 RAM, adjust psxMemRLUT[].
- */
- memcpy((void*)mem_bak, (void*)psxM, sizeof(mem_bak));
- psxMemRLUT[0x0000] = psxMemRLUT[0x0020] = psxMemRLUT[0x0040] = psxMemRLUT[0x0060] = (u8 *)mem_bak;
- psxMemRLUT[0x8000] = psxMemRLUT[0x8020] = psxMemRLUT[0x8040] = psxMemRLUT[0x8060] = (u8 *)mem_bak;
- psxMemRLUT[0xa000] = psxMemRLUT[0xa020] = psxMemRLUT[0xa040] = psxMemRLUT[0xa060] = (u8 *)mem_bak;
- psxCpu->Notify(R3000ACPU_NOTIFY_CACHE_ISOLATED, NULL);
-#endif
- break;
- case 0x00: case 0x1e988:
- if (writeok == TRUE) break;
- writeok = TRUE;
- for (i = 0; i < 0x80; i++) psxMemWLUT[i + 0x0000] = (void *)&psxM[(i & 0x1f) << 16];
- memcpy(psxMemWLUT + 0x8000, psxMemWLUT, 0x80 * sizeof(void *));
- memcpy(psxMemWLUT + 0xa000, psxMemWLUT, 0x80 * sizeof(void *));
-#ifdef ICACHE_EMULATION
- /* Cache is now unisolated:
- * Restore lower 64KB RAM contents and psxMemRLUT[].
- */
- memcpy((void*)psxM, (void*)mem_bak, sizeof(mem_bak));
- psxMemRLUT[0x0000] = psxMemRLUT[0x0020] = psxMemRLUT[0x0040] = psxMemRLUT[0x0060] = (u8 *)psxM;
- psxMemRLUT[0x8000] = psxMemRLUT[0x8020] = psxMemRLUT[0x8040] = psxMemRLUT[0x8060] = (u8 *)psxM;
- psxMemRLUT[0xa000] = psxMemRLUT[0xa020] = psxMemRLUT[0xa040] = psxMemRLUT[0xa060] = (u8 *)psxM;
- /* Dynarecs might take this opportunity to flush their code cache */
- psxCpu->Notify(R3000ACPU_NOTIFY_CACHE_UNISOLATED, NULL);
-#endif
- break;
- default: