+// sync m68k to SekCycleAim
+static void SekSyncM68k(void)
+{
+ int cyc_do;
+ pprof_start(m68k);
+ pevt_log_m68k_o(EVT_RUN_START);
+
+ while ((cyc_do = SekCycleAim - SekCycleCnt) > 0) {
+ SekCycleCnt += cyc_do;
+
+#if defined(EMU_C68K)
+ PicoCpuCM68k.cycles = cyc_do;
+ CycloneRun(&PicoCpuCM68k);
+ SekCycleCnt -= PicoCpuCM68k.cycles;
+#elif defined(EMU_M68K)
+ SekCycleCnt += m68k_execute(cyc_do) - cyc_do;
+#elif defined(EMU_F68K)
+ SekCycleCnt += fm68k_emulate(cyc_do, 0) - cyc_do;
+#endif
+ }
+
+ SekCyclesLeft = 0;
+
+ SekTrace(0);
+ pevt_log_m68k_o(EVT_RUN_END);
+ pprof_end(m68k);
+}
+
+static inline void SekRunM68k(int cyc)
+{
+ SekCycleAim += cyc;
+ cyc = SekCycleAim - SekCycleCnt;
+ if (cyc <= 0)
+ return;
+ SekCycleCnt += cyc >> 6; // refresh slowdowns
+ SekSyncM68k();
+}
+
+static void do_hint(struct PicoVideo *pv)
+{
+ pv->pending_ints |= 0x10;
+ if (pv->reg[0] & 0x10) {
+ elprintf(EL_INTS, "hint: @ %06x [%u]", SekPc, SekCyclesDone());
+ SekInterrupt(4);
+ }
+}
+
+static void do_timing_hacks_as(struct PicoVideo *pv, int vdp_slots)
+{
+ pv->lwrite_cnt += vdp_slots - Pico.m.dma_xfers * 2; // wrong *2
+ if (pv->lwrite_cnt > vdp_slots)
+ pv->lwrite_cnt = vdp_slots;
+ else if (pv->lwrite_cnt < 0)
+ pv->lwrite_cnt = 0;
+ if (Pico.m.dma_xfers)
+ SekCyclesBurn(CheckDMA());
+}
+
+static void do_timing_hacks_vb(void)
+{
+ if (Pico.m.dma_xfers)
+ SekCyclesBurn(CheckDMA());
+}
+