better mmuhack usage
[picodrive.git] / Pico / Pico.c
index d0845e1..104aef0 100644 (file)
@@ -149,7 +149,6 @@ int PicoReset(int hard)
 \r
   if (PicoMCD & 1) {\r
     PicoResetMCD(hard);\r
-    SRam.data = 0;\r
     return 0;\r
   }\r
 \r
@@ -195,6 +194,8 @@ int PicoReset(int hard)
     // Dino Dini's Soccer malfunctions if SRAM is not filled with 0xff\r
     if (strncmp((char *)Pico.rom+0x150, "IDOND NI'I", 10) == 0)\r
       memset(SRam.data, 0xff, sram_size);\r
+    dprintf("sram: det: %i; eeprom: %i; start: %06x; end: %06x\n",\r
+      (Pico.m.sram_reg>>4)&1, (Pico.m.sram_reg>>2)&1, SRam.start, SRam.end);\r
   }\r
 \r
   Pico.m.sram_reg = SRam.reg_back; // restore sram_reg\r
@@ -430,11 +431,18 @@ static int PicoFrameHints(void)
       getSamples(y);\r
 \r
     // Run scanline:\r
-    if(Pico.m.dma_bytes) SekCycleCnt+=CheckDMA();\r
+    if (Pico.m.dma_bytes) SekCycleCnt+=CheckDMA();\r
     SekRun(cycles_68k);\r
-    if((PicoOpt&4) && Pico.m.z80Run) {\r
-      Pico.m.z80Run|=2;\r
-      z80CycleAim+=cycles_z80;\r
+    if ((PicoOpt&4) && Pico.m.z80Run) {\r
+      if (Pico.m.z80Run & 2) z80CycleAim+=cycles_z80;\r
+      else {\r
+        int cnt = SekCyclesDone() - z80startCycle;\r
+        cnt = (cnt>>1)-(cnt>>5);\r
+        //if (cnt > cycles_z80) printf("FIXME: z80 cycles: %i\n", cnt);\r
+        if (cnt > cycles_z80) cnt = cycles_z80;\r
+        Pico.m.z80Run |= 2;\r
+        z80CycleAim+=cnt;\r
+      }\r
       total_z80+=z80_run(z80CycleAim-total_z80);\r
     }\r
   }\r