int PicoPad[2]; // Joypads, format is MXYZ SACB RLDU\r
int PicoPadInt[2]; // internal copy\r
int PicoAHW; // active addon hardware: PAHW_*\r
+int PicoQuirks; // game-specific quirks\r
int PicoRegionOverride; // override the region detection 0: Auto, 1: Japan NTSC, 2: Japan PAL, 4: US, 8: Europe\r
int PicoAutoRgnOrder;\r
\r
int emustatus; // rapid_ym2612, multi_ym_updates\r
int scanlines_total;\r
\r
-int p32x_msh2_multiplier = MSH2_MULTI_DEFAULT;\r
-int p32x_ssh2_multiplier = SSH2_MULTI_DEFAULT;\r
-\r
void (*PicoWriteSound)(int len) = NULL; // called at the best time to send sound buffer (PsndOut) to hardware\r
void (*PicoResetHook)(void) = NULL;\r
void (*PicoLineHook)(void) = NULL;\r
\r
if (SRam.data)\r
free(SRam.data);\r
+ pevt_dump();\r
}\r
\r
void PicoPower(void)\r
Pico.video.pending_ints=0;\r
z80_reset();\r
\r
+ // my MD1 VA6 console has this in IO\r
+ Pico.ioports[1] = Pico.ioports[2] = Pico.ioports[3] = 0xff;\r
+\r
// default VDP register values (based on Fusion)\r
Pico.video.reg[0] = Pico.video.reg[1] = 0x04;\r
Pico.video.reg[0xc] = 0x81;\r
if (Pico.romsize <= 0)\r
return 1;\r
\r
+#if defined(CPU_CMP_R) || defined(CPU_CMP_W) || defined(DRC_CMP)\r
+ PicoOpt |= POPT_DIS_VDP_FIFO|POPT_DIS_IDLE_DET;\r
+#endif\r
+\r
/* must call now, so that banking is reset, and correct vectors get fetched */\r
if (PicoResetHook)\r
PicoResetHook();\r
SekReset();\r
// s68k doesn't have the TAS quirk, so we just globally set normal TAS handler in MCD mode (used by Batman games).\r
SekSetRealTAS(PicoAHW & PAHW_MCD);\r
- SekCycleCntT=0;\r
+ SekCycleCnt = SekCycleAim = 0;\r
\r
if (PicoAHW & PAHW_MCD)\r
// needed for MCD to reset properly, probably some bug hides behind this..\r
\r
Pico.m.dirtyPal = 1;\r
rendstatus_old = -1;\r
-\r
- if (PicoAHW & PAHW_32X)\r
- p32x_timers_recalc();\r
}\r
\r
\r
return burn;\r
}\r
\r
-static __inline void SekRunM68k(int cyc)\r
-{\r
- int cyc_do;\r
- pprof_start(m68k);\r
-\r
- SekCycleAim+=cyc;\r
- if ((cyc_do=SekCycleAim-SekCycleCnt) <= 0) return;\r
-#if defined(EMU_CORE_DEBUG)\r
- // this means we do run-compare\r
- SekCycleCnt+=CM_compareRun(cyc_do, 0);\r
-#elif defined(EMU_C68K)\r
- PicoCpuCM68k.cycles=cyc_do;\r
- CycloneRun(&PicoCpuCM68k);\r
- SekCycleCnt+=cyc_do-PicoCpuCM68k.cycles;\r
-#elif defined(EMU_M68K)\r
- SekCycleCnt+=m68k_execute(cyc_do);\r
-#elif defined(EMU_F68K)\r
- SekCycleCnt+=fm68k_emulate(cyc_do+1, 0, 0);\r
-#endif\r
-\r
- pprof_end(m68k);\r
-}\r
-\r
#include "pico_cmn.c"\r
\r
-int z80stopCycle;\r
-int z80_cycle_cnt; /* 'done' z80 cycles before z80_run() */\r
+unsigned int last_z80_sync; /* in 68k cycles */\r
+int z80_cycle_cnt;\r
int z80_cycle_aim;\r
int z80_scanline;\r
int z80_scanline_cycles; /* cycles done until z80_scanline */\r
\r
/* sync z80 to 68k */\r
-PICO_INTERNAL void PicoSyncZ80(int m68k_cycles_done)\r
+PICO_INTERNAL void PicoSyncZ80(unsigned int m68k_cycles_done)\r
{\r
int cnt;\r
- z80_cycle_aim = cycles_68k_to_z80(m68k_cycles_done);\r
+ z80_cycle_aim += cycles_68k_to_z80(m68k_cycles_done - last_z80_sync);\r
cnt = z80_cycle_aim - z80_cycle_cnt;\r
+ last_z80_sync = m68k_cycles_done;\r
\r
pprof_start(z80);\r
\r
- elprintf(EL_BUSREQ, "z80 sync %i (%i|%i -> %i|%i)", cnt, z80_cycle_cnt, z80_cycle_cnt / 228,\r
- z80_cycle_aim, z80_cycle_aim / 228);\r
+ elprintf(EL_BUSREQ, "z80 sync %i (%u|%u -> %u|%u)", cnt,\r
+ z80_cycle_cnt, z80_cycle_cnt / 288,\r
+ z80_cycle_aim, z80_cycle_aim / 288);\r
\r
if (cnt > 0)\r
z80_cycle_cnt += z80_run(cnt);\r