+ pc &= ~0xff000000;\r
+ elprintf(EL_IDLE, "idle: patch %06x %04x %04x #%i", pc, oldop, newop, idledet_count);\r
+ if (pc > Pico.romsize) {\r
+ if (++idledet_bads > 128) return 2; // remove detector\r
+ return 1; // don't patch\r
+ }\r
+\r
+ if (idledet_count >= 0x200 && (idledet_count & 0x1ff) == 0) {\r
+ void *tmp = realloc(idledet_addrs, (idledet_count+0x200)*4);\r
+ if (tmp == NULL) return 1;\r
+ idledet_addrs = tmp;\r
+ }\r
+\r
+ idledet_addrs[idledet_count++] = pc;\r
+ return 0;\r
+}\r
+\r
+void SekFinishIdleDet(void)\r
+{\r
+ int done_something = idledet_count > 0;\r
+#ifdef EMU_C68K\r
+ CycloneFinishIdle();\r
+#endif\r
+ while (idledet_count > 0)\r
+ {\r
+ unsigned short *op = (unsigned short *)&Pico.rom[idledet_addrs[--idledet_count]];\r
+ if ((*op & 0xfd00) == 0x7100)\r
+ *op &= 0xff, *op |= 0x6600;\r
+ else if ((*op & 0xfd00) == 0x7500)\r
+ *op &= 0xff, *op |= 0x6700;\r
+ else if ((*op & 0xfd00) == 0x7d00)\r
+ *op &= 0xff, *op |= 0x6000;\r
+ else\r
+ elprintf(EL_STATUS|EL_IDLE, "idle: don't know how to restore %04x", *op);\r
+ }\r
+\r
+ if (done_something)\r
+ {\r
+ int i;\r
+ for (i = 0; i < Pico.romsize; i++)\r
+ if (rom_verify[i] != Pico.rom[i])\r
+ printf("ROM corruption @ %06x!\n", i), exit(1);\r
+ }\r