menu: add reset hotkey
[picodrive.git] / pico / sek.c
index 86a351f..5176528 100644 (file)
@@ -60,6 +60,8 @@ static int SekUnrecognizedOpcode()
     PicoCpuCM68k.state_flags |= 1;\r
     return 1;\r
   }\r
+  // happened once - may happen again\r
+  SekFinishIdleDet();\r
 #ifdef EMU_M68K // debugging cyclone\r
   {\r
     extern int have_illegal;\r
@@ -300,7 +302,8 @@ void SekRegisterIdleHit(unsigned int pc)
 \r
 void SekInitIdleDet(void)\r
 {\r
-  unsigned short **tmp = realloc(idledet_ptrs, 0x200*4);\r
+  unsigned short **tmp;\r
+  tmp = realloc(idledet_ptrs, 0x200 * sizeof(tmp[0]));\r
   if (tmp == NULL) {\r
     free(idledet_ptrs);\r
     idledet_ptrs = NULL;\r
@@ -408,7 +411,8 @@ int SekRegisterIdlePatch(unsigned int pc, int oldop, int newop, void *ctx)
   }\r
 \r
   if (idledet_count >= 0x200 && (idledet_count & 0x1ff) == 0) {\r
-    unsigned short **tmp = realloc(idledet_ptrs, (idledet_count+0x200)*4);\r
+    unsigned short **tmp;\r
+    tmp = realloc(idledet_ptrs, (idledet_count+0x200) * sizeof(tmp[0]));\r
     if (tmp == NULL)\r
       return 1;\r
     idledet_ptrs = tmp;\r
@@ -421,6 +425,8 @@ int SekRegisterIdlePatch(unsigned int pc, int oldop, int newop, void *ctx)
 \r
 void SekFinishIdleDet(void)\r
 {\r
+  if (idledet_count < 0)\r
+    return;\r
 #ifdef EMU_C68K\r
   CycloneFinishIdle();\r
 #endif\r
@@ -439,6 +445,7 @@ void SekFinishIdleDet(void)
     else\r
       elprintf(EL_STATUS|EL_IDLE, "idle: don't know how to restore %04x", *op);\r
   }\r
+  idledet_count = -1;\r
 }\r
 \r
 \r
@@ -549,6 +556,7 @@ breakloop:
                        printf("D%d: %08x  A%d: %08x\n", i, x68k->dar[i],\r
         i, x68k->dar[i + 8]);\r
                printf("PC: %08x, %08x\n", x68k->pc, x68k->pc_prev);\r
+               printf("SR: %04x\n", x68k->sr);\r
 \r
     PDebugDumpMem();\r
     exit(1);\r