core z80, fix cycle counting in reset state
authorkub <derkub@gmail.com>
Fri, 12 Apr 2024 18:29:50 +0000 (20:29 +0200)
committerkub <derkub@gmail.com>
Fri, 12 Apr 2024 18:29:50 +0000 (20:29 +0200)
pico/debug.c
pico/pico.c
pico/pico_cmn.c
pico/pico_int.h
pico/sms.c

index e928d73..5a85a30 100644 (file)
@@ -389,7 +389,7 @@ void PDebugZ80Frame(void)
   else
     lines = 262;
 
-  z80_resetCycles();
+  z80_resetCycles(Pico.t.z80c_aim);
   PsndStartFrame();
 
   if (/*Pico.m.z80Run &&*/ !Pico.m.z80_reset && (PicoIn.opt&POPT_EN_Z80)) {
index 3402657..d913e08 100644 (file)
@@ -72,8 +72,6 @@ void PicoPower(void)
   memset(&Pico.m,0,sizeof(Pico.m));\r
   memset(&Pico.t,0,sizeof(Pico.t));\r
 \r
-  z80_reset();\r
-\r
   // my MD1 VA6 console has this in IO\r
   PicoMem.ioports[1] = PicoMem.ioports[2] = PicoMem.ioports[3] = 0xff;\r
 \r
@@ -169,6 +167,7 @@ int PicoReset(void)
 \r
   memset(&PicoIn.padInt, 0, sizeof(PicoIn.padInt));\r
 \r
+  z80_reset();\r
   if (PicoIn.AHW & PAHW_SMS) {\r
     PicoResetMS();\r
     return 0;\r
index c3b14ca..519aba3 100644 (file)
@@ -141,8 +141,8 @@ static int PicoFrameHints(void)
 
   skip = PicoIn.skipFrame;
 
+  z80_resetCycles(cycles_68k_to_z80(Pico.t.m68c_aim - Pico.t.m68c_frame_start));
   Pico.t.m68c_frame_start = Pico.t.m68c_aim;
-  z80_resetCycles();
   PsndStartFrame();
 
   hint = pv->hint_cnt;
index d39e980..c576ecb 100644 (file)
@@ -201,8 +201,8 @@ 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(aim) \\r
+  Pico.t.z80c_cnt -= (aim < Pico.t.z80c_cnt ? aim : Pico.t.z80c_cnt), Pico.t.z80c_aim = Pico.t.z80_scanline = 0\r
 \r
 #define z80_cyclesDone() \\r
   (Pico.t.z80c_aim - z80_cyclesLeft)\r
index 6b1425b..e954bc8 100644 (file)
@@ -846,7 +846,7 @@ void PicoFrameMS(void)
   int nmi;
   int y;
 
-  z80_resetCycles();
+  z80_resetCycles(Pico.t.z80c_aim);
   PsndStartFrame();
 
   // for SMS the pause button generates an NMI, for GG ths is not the case