static void do_timing_hacks_vb(void)
{
- if (Pico.m.dma_xfers)
+ if (unlikely(Pico.m.dma_xfers))
SekCyclesBurn(CheckDMA());
}
z80_resetCycles();
PsndStartFrame();
- // Load H-Int counter
- hint = (pv->status & PVS_ACTIVE) ? pv->hint_cnt : pv->reg[10];
-
+ hint = pv->hint_cnt;
pv->status |= PVS_ACTIVE;
for (y = 0; ; y++)
}
// get samples from sound chips
- if ((y == 224 || y == line_sample) && PsndOut)
+ if ((y == 224 || y == line_sample) && PicoIn.sndOut)
{
cycles = SekCyclesDone();
#endif
// get samples from sound chips
- if (y == 224 && PsndOut)
+ if (y == 224 && PicoIn.sndOut)
PsndGetSamples(y);
// Run scanline:
PAD_DELAY();
- if ((pv->status & PVS_ACTIVE) && --hint < 0)
+ if (unlikely(pv->status & PVS_ACTIVE) && --hint < 0)
{
hint = pv->reg[10]; // Reload H-Int counter
do_hint(pv);
pevt_log_m68k_o(EVT_NEXT_LINE);
}
+ if (unlikely(PicoIn.overclockM68k)) {
+ unsigned int l = PicoIn.overclockM68k * lines / 100;
+ while (l-- > 0) {
+ Pico.t.m68c_cnt -= CYCLES_M68K_LINE;
+ do_timing_hacks_vb();
+ SekSyncM68k();
+ }
+ }
+
pv->status &= ~(SR_VB | PVS_VB2);
pv->status |= ((pv->reg[1] >> 3) ^ SR_VB) & SR_VB; // forced blanking
PAD_DELAY();
- if ((pv->status & PVS_ACTIVE) && --hint < 0)
- {
- hint = pv->reg[10]; // Reload H-Int counter
- do_hint(pv);
+ if (unlikely(pv->status & PVS_ACTIVE)) {
+ if (--hint < 0) {
+ hint = pv->reg[10]; // Reload H-Int counter
+ do_hint(pv);
+ }
}
+ else
+ hint = pv->reg[10];
// Run scanline:
Pico.t.m68c_line_start = Pico.t.m68c_aim;
cycles = SekCyclesDone();
if (Pico.m.z80Run && !Pico.m.z80_reset && (PicoIn.opt&POPT_EN_Z80))
PicoSyncZ80(cycles);
- if (PsndOut && ym2612.dacen && PsndDacLine < lines)
+ if (PicoIn.sndOut && ym2612.dacen && Pico.snd.dac_line < lines)
PsndDoDAC(lines - 1);
- if (PsndOut && PsndPsgLine < lines)
+ if (PicoIn.sndOut && Pico.snd.psg_line < lines)
PsndDoPSG(lines - 1);
#ifdef PICO_CD