adjust z80 timing a bit
[picodrive.git] / pico / memory.c
index 858ab65..436f545 100644 (file)
@@ -331,11 +331,10 @@ NOINLINE void io_ports_write(u32 a, u32 d)
   Pico.ioports[a] = d;\r
 }\r
 \r
-// lame..\r
 static int z80_cycles_from_68k(void)\r
 {\r
-  return z80_cycle_aim\r
-    + cycles_68k_to_z80(SekCyclesDone() - last_z80_sync);\r
+  int m68k_cnt = SekCyclesDone() - timing.m68c_frame_start;\r
+  return cycles_68k_to_z80(m68k_cnt);\r
 }\r
 \r
 void NOINLINE ctl_write_z80busreq(u32 d)\r
@@ -346,7 +345,7 @@ void NOINLINE ctl_write_z80busreq(u32 d)
   {\r
     if (d)\r
     {\r
-      z80_cycle_cnt = z80_cycles_from_68k();\r
+      timing.z80c_cnt = z80_cycles_from_68k() + 2;\r
     }\r
     else\r
     {\r
@@ -378,7 +377,7 @@ void NOINLINE ctl_write_z80reset(u32 d)
     }\r
     else\r
     {\r
-      z80_cycle_cnt = z80_cycles_from_68k();\r
+      timing.z80c_cnt = z80_cycles_from_68k() + 2;\r
       z80_reset();\r
     }\r
     Pico.m.z80_reset = d;\r
@@ -896,10 +895,11 @@ static void m68k_mem_setup(void)
 static int get_scanline(int is_from_z80)\r
 {\r
   if (is_from_z80) {\r
-    int cycles = z80_cyclesDone();\r
-    while (cycles - z80_scanline_cycles >= 228)\r
-      z80_scanline++, z80_scanline_cycles += 228;\r
-    return z80_scanline;\r
+    int mclk_z80 = z80_cyclesDone() * 15;\r
+    int mclk_line = timing.z80_scanline * 488 * 7;\r
+    while (mclk_z80 - mclk_line >= 488 * 7)\r
+      timing.z80_scanline++, mclk_line += 488 * 7;\r
+    return timing.z80_scanline;\r
   }\r
 \r
   return Pico.m.scanline;\r