-#else
-#define CPUS_RUN(m68k_cycles,s68k_cycles) \
-{ \
- if ((PicoOpt&POPT_EN_MCD_PSYNC) && (Pico_mcd->m.busreq&3) == 1) { \
- SekRunPS(m68k_cycles, s68k_cycles); /* "better/perfect sync" */ \
- } else { \
- SekRunM68k(m68k_cycles); \
- if ((Pico_mcd->m.busreq&3) == 1) /* no busreq/no reset */ \
- SekRunS68k(s68k_cycles); \
- } \
+
+static inline void SekRunM68k(int cyc)
+{
+ Pico.t.m68c_aim += cyc;
+ cyc = Pico.t.m68c_aim - Pico.t.m68c_cnt;
+ if (cyc <= 0)
+ return;
+ Pico.t.m68c_cnt += 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());