32x: implement VDP fill, improve PWM, division unit and scheduling
[picodrive.git] / pico / pico_cmn.c
index 407309a..56658e7 100644 (file)
@@ -1,5 +1,5 @@
 // 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) \
 { \
@@ -93,6 +100,9 @@ static int PicoFrameHints(void)
 #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
@@ -162,6 +172,9 @@ static int PicoFrameHints(void)
 #ifdef PICO_CD
   check_cd_dma();
 #endif
+#ifdef PICO_32X
+  p32x_pwm_irq_check(1);
+#endif
 
   // Last H-Int:
   if (--hint < 0)
@@ -214,9 +227,8 @@ static int PicoFrameHints(void)
   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++)
   {
@@ -231,6 +243,9 @@ static int PicoFrameHints(void)
 #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());