// common code for Pico.c and cd/Pico.c
-// (c) Copyright 2007,2008 Grazvydas "notaz" Ignotas
+// (c) Copyright 2007-2009 Grazvydas "notaz" Ignotas
#define CYCLES_M68K_LINE 488 // suitable for both PAL/NTSC
#define CYCLES_M68K_VINT_LAG 68
}
// CPUS_RUN
+#ifndef RUN_SH2S
+#define RUN_SH2S
+#endif
+
#ifndef PICO_CD
#define CPUS_RUN(m68k_cycles,s68k_cycles) \
- SekRunM68k(m68k_cycles);
+{ \
+ SekRunM68k(m68k_cycles); \
+ RUN_SH2S \
+}
#else
#define CPUS_RUN(m68k_cycles,s68k_cycles) \
{ \
}
#endif
-// Accurate but slower frame which does hints
static int PicoFrameHints(void)
{
struct PicoVideo *pv=&Pico.video;
SekCyclesResetS68k();
#endif
PsndDacLine = 0;
+ emustatus &= ~1;
pv->status&=~0x88; // clear V-Int, come out of vblank
#ifdef PICO_CD
check_cd_dma();
#endif
+#ifdef PICO_32X
+ p32x_pwm_irq_check();
+#endif
// H-Interrupts:
if (--hint < 0) // y <= lines_vis: Comix Zone, Golden Axe
}
}
-#ifndef PICO_CD
// get samples from sound chips
- if (y == 32 && PsndOut)
- emustatus &= ~1;
- else if ((y == 224 || y == line_sample) && PsndOut)
+ if ((y == 224 || y == line_sample) && PsndOut)
{
if (Pico.m.z80Run && !Pico.m.z80_reset && (PicoOpt&POPT_EN_Z80))
PicoSyncZ80(SekCycleCnt);
if (ym2612.dacen && PsndDacLine <= y)
PsndDoDAC(y);
- getSamples(y);
+ PsndGetSamples(y);
}
-#endif
// Run scanline:
if (Pico.m.dma_xfers) SekCyclesBurn(CheckDMA());
#ifdef PICO_CD
check_cd_dma();
#endif
+#ifdef PICO_32X
+ p32x_pwm_irq_check();
+#endif
// Last H-Int:
if (--hint < 0)
pv->status|=0x08; // go into vblank
pv->pending_ints|=0x20;
+#ifdef PICO_32X
+ p32x_start_blank();
+#endif
+
// the following SekRun is there for several reasons:
// there must be a delay after vblank bit is set and irq is asserted (Mazin Saga)
// also delay between F bit (bit 7) is set in SR and IRQ happens (Ex-Mutants)
}
// get samples from sound chips
-#ifndef PICO_CD
- if (y == 224)
-#endif
- if (PsndOut)
- {
- if (ym2612.dacen && PsndDacLine <= y)
- PsndDoDAC(y);
- getSamples(y);
- }
+ if (y == 224 && PsndOut)
+ {
+ if (ym2612.dacen && PsndDacLine <= y)
+ PsndDoDAC(y);
+ PsndGetSamples(y);
+ }
// Run scanline:
if (Pico.m.dma_xfers) SekCyclesBurn(CheckDMA());
if (PicoLineHook) PicoLineHook();
#endif
- // PAL line count might actually be 313 according to Steve Snake, but that would complicate things.
- lines = Pico.m.pal ? 312 : 262;
- vcnt_wrap = Pico.m.pal ? 0x103 : 0xEB; // based on Gens
+ lines = scanlines_total;
+ vcnt_wrap = Pico.m.pal ? 0x103 : 0xEB; // based on Gens, TODO: verify
for (y++; y < lines; y++)
{
#ifdef PICO_CD
check_cd_dma();
#endif
+#ifdef PICO_32X
+ p32x_pwm_irq_check();
+#endif
// Run scanline:
if (Pico.m.dma_xfers) SekCyclesBurn(CheckDMA());