- if(!d) {
- // this is for a nasty situation where Z80 was enabled and disabled in the same 68k timeslice (Golden Axe III)
- if (Pico.m.z80Run) {
- int lineCycles;
- z80stopCycle = SekCyclesDone();
- if (Pico.m.z80Run&2)
- lineCycles=(488-SekCyclesLeft)&0x1ff;
- else lineCycles=z80stopCycle-z80startCycle; // z80 was started at current line
- if (lineCycles > 0 && lineCycles <= 488) {
- dprintf("zrun: %i/%i cycles", lineCycles, (lineCycles>>1)-(lineCycles>>5));
- lineCycles=(lineCycles>>1)-(lineCycles>>5);
- z80_run(lineCycles);
- }
- }
- } else {
- z80startCycle = SekCyclesDone();
+ if (d)
+ {
+ z80_cycle_cnt = cycles_68k_to_z80(SekCyclesDone());
+ }
+ else
+ {
+ z80stopCycle = SekCyclesDone();
+ if ((PicoOpt&POPT_EN_Z80) && !Pico.m.z80_reset)
+ PicoSyncZ80(z80stopCycle);
+ }
+ Pico.m.z80Run=d;
+ }
+}
+
+static void z80WriteReset(u32 d)
+{
+ d&=1; d^=1;
+ elprintf(EL_BUSREQ, "set_zreset: %i->%i [%i] @%06x", Pico.m.z80_reset, d, SekCyclesDone(), SekPc);
+ if (d ^ Pico.m.z80_reset)
+ {
+ if (d)
+ {
+ if ((PicoOpt&POPT_EN_Z80) && Pico.m.z80Run)
+ PicoSyncZ80(SekCyclesDone());
+ }
+ else
+ {
+ z80_cycle_cnt = cycles_68k_to_z80(SekCyclesDone());
+ z80_reset();