// 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(x)
+#endif
+
#ifndef PICO_CD
#define CPUS_RUN(m68k_cycles,s68k_cycles) \
- SekRunM68k(m68k_cycles);
+{ \
+ SekRunM68k(m68k_cycles); \
+ RUN_SH2S(m68k_cycles); \
+}
#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;
#ifdef PICO_CD
check_cd_dma();
#endif
+#ifdef PICO_32X
+ p32x_pwm_irq_check(1);
+#endif
// H-Interrupts:
if (--hint < 0) // y <= lines_vis: Comix Zone, Golden Axe
#ifdef PICO_CD
check_cd_dma();
#endif
+#ifdef PICO_32X
+ p32x_pwm_irq_check(1);
+#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)
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(1);
+#endif
// Run scanline:
if (Pico.m.dma_xfers) SekCyclesBurn(CheckDMA());