core z80, fix cycle counting if z80 in hold on frame change
authorkub <derkub@gmail.com>
Tue, 2 Jul 2024 20:43:26 +0000 (22:43 +0200)
committerkub <derkub@gmail.com>
Tue, 2 Jul 2024 20:43:26 +0000 (22:43 +0200)
pico/memory.c
pico/pico_int.h

index 34d0cf7..69ca8aa 100644 (file)
@@ -530,7 +530,8 @@ void NOINLINE ctl_write_z80busreq(u32 d)
   {\r
     if (d)\r
     {\r
-      Pico.t.z80c_aim = Pico.t.z80c_cnt = z80_cycles_from_68k() + (Pico.t.z80_busdelay >> 8) + 2;\r
+      Pico.t.z80c_aim = Pico.t.z80c_cnt = z80_cycles_from_68k() + 2;\r
+      Pico.t.z80c_cnt += Pico.t.z80_busdelay >> 8;\r
       Pico.t.z80_busdelay &= 0xff;\r
     }\r
     else\r
index c57c5f6..3d49573 100644 (file)
@@ -201,8 +201,10 @@ extern struct DrZ80 drZ80;
 \r
 #define Z80_STATE_SIZE 0x60\r
 \r
-#define z80_resetCycles() \\r
-  Pico.t.z80c_cnt -= Pico.t.z80c_aim, Pico.t.z80c_aim = Pico.t.z80_scanline = 0\r
+#define z80_resetCycles() { \\r
+  Pico.t.z80c_cnt -= Pico.t.z80c_aim, Pico.t.z80c_aim = Pico.t.z80_scanline = 0; \\r
+  if (!Pico.m.z80Run | Pico.m.z80_reset) Pico.t.z80c_cnt = 0; \\r
+}\r
 \r
 #define z80_cyclesDone() \\r
   (Pico.t.z80c_aim - z80_cyclesLeft)\r