general timing hacks
authornotaz <notasas@gmail.com>
Tue, 3 Sep 2013 23:31:27 +0000 (02:31 +0300)
committernotaz <notasas@gmail.com>
Thu, 5 Sep 2013 23:40:37 +0000 (02:40 +0300)
pico/pico.c
pico/pico_cmn.c
pico/pico_int.h

index 696743f..af74dd0 100644 (file)
@@ -231,19 +231,20 @@ void PicoLoopPrepare(void)
 // same for Outrunners (92-121, when active is set to 24)\r
 // 96 is VR hack\r
 static const int dma_timings[] = {\r
-  96,  167, 166,  83, // vblank: 32cell: dma2vram dma2[vs|c]ram vram_fill vram_copy\r
+  167, 167, 166,  83, // vblank: 32cell: dma2vram dma2[vs|c]ram vram_fill vram_copy\r
   102, 205, 204, 102, // vblank: 40cell:\r
   16,   16,  15,   8, // active: 32cell:\r
   24,   18,  17,   9  // ...\r
 };\r
 \r
 static const int dma_bsycles[] = {\r
-  (488<<8)/96,  (488<<8)/167, (488<<8)/166, (488<<8)/83,\r
-  (488<<8)/102, (488<<8)/205, (488<<8)/204, (488<<8)/102,\r
+  (488<<8)/167, (488<<8)/167, (488<<8)/166, (488<<8)/83,\r
+  (488<<8)/102, (488<<8)/233, (488<<8)/204, (488<<8)/102,\r
   (488<<8)/16,  (488<<8)/16,  (488<<8)/15,  (488<<8)/8,\r
   (488<<8)/24,  (488<<8)/18,  (488<<8)/17,  (488<<8)/9\r
 };\r
 \r
+// grossly inaccurate.. FIXME FIXXXMEE\r
 PICO_INTERNAL int CheckDMA(void)\r
 {\r
   int burn = 0, xfers_can, dma_op = Pico.video.reg[0x17]>>6; // see gens for 00 and 01 modes\r
index 5ce13aa..e2ec0e1 100644 (file)
@@ -203,6 +203,7 @@ static int PicoFrameHints(void)
   // also delay between F bit (bit 7) is set in SR and IRQ happens (Ex-Mutants)
   // also delay between last H-int and V-int (Golden Axe 3)
   line_base_cycles = SekCyclesDone();
+  if (Pico.m.dma_xfers) SekCyclesBurn(CheckDMA());
   CPUS_RUN(CYCLES_M68K_VINT_LAG);
 
   if (pv->reg[1]&0x20) {
@@ -234,7 +235,6 @@ static int PicoFrameHints(void)
   }
 
   // Run scanline:
-  if (Pico.m.dma_xfers) SekCyclesBurn(CheckDMA());
   CPUS_RUN(CYCLES_M68K_LINE - CYCLES_M68K_VINT_LAG - CYCLES_M68K_ASD);
 
   if (PicoLineHook) PicoLineHook();
index 84661c4..6096e13 100644 (file)
@@ -134,8 +134,6 @@ extern unsigned int SekCycleAim;
 #define SekCyclesBurn(c)    SekCycleCnt += c\r
 #define SekCyclesBurnRun(c) { \\r
   SekCyclesLeft -= c; \\r
-  if (SekCyclesLeft < 0) \\r
-    SekCyclesLeft = 0; \\r
 }\r
 \r
 // note: sometimes may extend timeslice to delay an irq\r