From 5f9a0d16309e732ad09b4f5827422cf658bed8c2 Mon Sep 17 00:00:00 2001 From: notaz Date: Sun, 13 Jul 2008 14:44:14 +0000 Subject: [PATCH] SekStepM68k restored, pad read issues with D&D fixed git-svn-id: file:///home/notaz/opt/svn/PicoDrive@543 be3aeb3a-fb24-0410-a615-afba39da0efa --- Pico/Memory.c | 4 ++-- Pico/Pico.c | 3 +++ Pico/PicoFrameHints.c | 1 + Pico/PicoInt.h | 2 ++ Pico/Sek.c | 16 ++++++++++++++++ 5 files changed, 24 insertions(+), 2 deletions(-) diff --git a/Pico/Memory.c b/Pico/Memory.c index a6b4d63..bdcfaab 100644 --- a/Pico/Memory.c +++ b/Pico/Memory.c @@ -105,7 +105,7 @@ PICO_INTERNAL_ASM void PicoMemReset(void) int PadRead(int i) { int pad,value,data_reg; - pad=~PicoPad[i]; // Get inverse of pad MXYZ SACB RLDU + pad=~PicoPadInt[i]; // Get inverse of pad MXYZ SACB RLDU data_reg=Pico.ioports[i+1]; // orr the bits, which are set as output @@ -465,7 +465,7 @@ void PicoWrite16(u32 a,u16 d) static void PicoWrite32(u32 a,u32 d) { - elprintf(EL_IO, "w32: %06x, %08x", a&0xffffff, d); + elprintf(EL_IO, "w32: %06x, %08x @%06x", a&0xffffff, d, SekPc); #ifdef EMU_CORE_DEBUG lastwrite_cyc_d[lwp_cyc++&15] = d; #endif diff --git a/Pico/Pico.c b/Pico/Pico.c index db9d201..f1ee455 100644 --- a/Pico/Pico.c +++ b/Pico/Pico.c @@ -16,6 +16,7 @@ int PicoOpt = 0; int PicoSkipFrame = 0; // skip rendering frame? int emustatus = 0; // rapid_ym2612, multi_ym_updates int PicoPad[2]; // Joypads, format is SACB RLDU +int PicoPadInt[2]; // internal copy int PicoAHW = 0; // active addon hardware: scd_active, 32x_active, svp_active, pico_active int PicoRegionOverride = 0; // override the region detection 0: Auto, 1: Japan NTSC, 2: Japan PAL, 4: US, 8: Europe int PicoAutoRgnOrder = 0; @@ -31,6 +32,7 @@ void PicoInit(void) // Blank space for state: memset(&Pico,0,sizeof(Pico)); memset(&PicoPad,0,sizeof(PicoPad)); + memset(&PicoPadInt,0,sizeof(PicoPadInt)); // Init CPUs: SekInit(); @@ -145,6 +147,7 @@ int PicoReset(void) PicoMemReset(); SekReset(); + memset(&PicoPadInt,0,sizeof(PicoPadInt)); // s68k doesn't have the TAS quirk, so we just globally set normal TAS handler in MCD mode (used by Batman games). SekSetRealTAS(PicoAHW & PAHW_MCD); SekCycleCntT=0; diff --git a/Pico/PicoFrameHints.c b/Pico/PicoFrameHints.c index 84db382..cc77f5f 100644 --- a/Pico/PicoFrameHints.c +++ b/Pico/PicoFrameHints.c @@ -161,6 +161,7 @@ static int PicoFrameHints(void) pv->lwrite_cnt=0; Pico.video.status|=0x200; + memcpy(PicoPadInt, PicoPad, sizeof(PicoPadInt)); PAD_DELAY #ifdef PICO_CD check_cd_dma(); diff --git a/Pico/PicoInt.h b/Pico/PicoInt.h index 0daac2e..aa0e650 100644 --- a/Pico/PicoInt.h +++ b/Pico/PicoInt.h @@ -435,6 +435,7 @@ PICO_INTERNAL unsigned int ym2612_read_local_68k(void); // Pico.c extern struct Pico Pico; extern struct PicoSRAM SRam; +extern int PicoPadInt[2]; extern int emustatus; extern void (*PicoResetHook)(void); extern void (*PicoLineHook)(void); @@ -463,6 +464,7 @@ PICO_INTERNAL void SekInit(void); PICO_INTERNAL int SekReset(void); PICO_INTERNAL void SekState(int *data); PICO_INTERNAL void SekSetRealTAS(int use_real); +void SekStepM68k(void); void SekInitIdleDet(void); void SekFinishIdleDet(void); diff --git a/Pico/Sek.c b/Pico/Sek.c index d641e04..73b7b7c 100644 --- a/Pico/Sek.c +++ b/Pico/Sek.c @@ -163,6 +163,21 @@ PICO_INTERNAL int SekReset(void) return 0; } +void SekStepM68k(void) +{ + SekCycleAim=SekCycleCnt+1; +#if defined(EMU_CORE_DEBUG) + SekCycleCnt+=CM_compareRun(1, 0); +#elif defined(EMU_C68K) + PicoCpuCM68k.cycles=1; + CycloneRun(&PicoCpuCM68k); + SekCycleCnt+=1-PicoCpuCM68k.cycles; +#elif defined(EMU_M68K) + SekCycleCnt+=m68k_execute(1); +#elif defined(EMU_F68K) + SekCycleCnt+=fm68k_emulate(1, 0); +#endif +} PICO_INTERNAL void SekSetRealTAS(int use_real) { @@ -174,6 +189,7 @@ PICO_INTERNAL void SekSetRealTAS(int use_real) #endif } + /* idle loop detection, not to be used in CD mode */ #ifdef EMU_C68K #include "cpu/Cyclone/tools/idle.h" -- 2.39.2