+#ifdef PICODRIVE_HACK\r
+ if (!dualcore)\r
+#endif\r
+ return cycles - m68kcontext.io_cycle_counter;\r
+\r
+#ifdef PICODRIVE_HACK\r
+dualcore_mode:\r
+\r
+ {\r
+ extern int SekCycleAim, SekCycleCnt, SekCycleAimS68k, SekCycleCntS68k;\r
+ #define PS_STEP_M68K ((488<<16)/20) // ~24\r
+ if (dualcore == 1)\r
+ {\r
+ dualcore = (488<<16); // ~ cycn in Pico.c\r
+ // adjust for first iteration\r
+ g_m68kcontext = &PicoCpuFS68k;\r
+ cycles = m68kcontext.io_cycle_counter = 0;\r
+ }\r
+ if (g_m68kcontext == &PicoCpuFS68k)\r
+ {\r
+ SekCycleCntS68k += cycles - m68kcontext.io_cycle_counter;\r
+ // end?\r
+ dualcore -= PS_STEP_M68K;\r
+ if (dualcore < 0) return 0;\r
+ // become main 68k\r
+ g_m68kcontext = &PicoCpuFM68k;\r
+ if ((cycles = SekCycleAim-SekCycleCnt-(dualcore>>16)) > 0)\r
+ {\r
+ if ((m68kcontext.execinfo & FM68K_HALTED) && m68kcontext.interrupts[0] <= (M68K_PPL))\r
+ SekCycleCnt += cycles; // halted\r
+ else goto famec_restart;\r
+ //else { printf("go main %i\n", cycles); goto famec_restart; }\r
+ }\r
+ cycles = m68kcontext.io_cycle_counter = 0;\r
+ }\r
+ if (g_m68kcontext == &PicoCpuFM68k)\r
+ {\r
+ int cycn_s68k = (dualcore + dualcore/2 + dualcore/8) >> 16;\r
+ SekCycleCnt += cycles - m68kcontext.io_cycle_counter;\r
+ // become sub 68k\r
+ g_m68kcontext = &PicoCpuFS68k;\r
+ if ((cycles = SekCycleAimS68k-SekCycleCntS68k-cycn_s68k) > 0)\r
+ {\r
+ if ((m68kcontext.execinfo & FM68K_HALTED) && m68kcontext.interrupts[0] <= (M68K_PPL))\r
+ SekCycleCntS68k += cycles; // halted\r
+ else goto famec_restart;\r
+ }\r
+ cycles = m68kcontext.io_cycle_counter = 0;\r
+ }\r
+ goto dualcore_mode;\r
+ }\r
+#endif\r
+\r
+\r