SekStepM68k restored, pad read issues with D&D fixed
authornotaz <notasas@gmail.com>
Sun, 13 Jul 2008 14:44:14 +0000 (14:44 +0000)
committernotaz <notasas@gmail.com>
Sun, 13 Jul 2008 14:44:14 +0000 (14:44 +0000)
git-svn-id: file:///home/notaz/opt/svn/PicoDrive@543 be3aeb3a-fb24-0410-a615-afba39da0efa

Pico/Memory.c
Pico/Pico.c
Pico/PicoFrameHints.c
Pico/PicoInt.h
Pico/Sek.c

index a6b4d63..bdcfaab 100644 (file)
@@ -105,7 +105,7 @@ PICO_INTERNAL_ASM void PicoMemReset(void)
 int PadRead(int i)\r
 {\r
   int pad,value,data_reg;\r
-  pad=~PicoPad[i]; // Get inverse of pad MXYZ SACB RLDU\r
+  pad=~PicoPadInt[i]; // Get inverse of pad MXYZ SACB RLDU\r
   data_reg=Pico.ioports[i+1];\r
 \r
   // orr the bits, which are set as output\r
@@ -465,7 +465,7 @@ void PicoWrite16(u32 a,u16 d)
 \r
 static void PicoWrite32(u32 a,u32 d)\r
 {\r
-  elprintf(EL_IO, "w32: %06x, %08x", a&0xffffff, d);\r
+  elprintf(EL_IO, "w32: %06x, %08x @%06x", a&0xffffff, d, SekPc);\r
 #ifdef EMU_CORE_DEBUG\r
   lastwrite_cyc_d[lwp_cyc++&15] = d;\r
 #endif\r
index db9d201..f1ee455 100644 (file)
@@ -16,6 +16,7 @@ int PicoOpt = 0;
 int PicoSkipFrame = 0; // skip rendering frame?\r
 int emustatus = 0;     // rapid_ym2612, multi_ym_updates\r
 int PicoPad[2];        // Joypads, format is SACB RLDU\r
+int PicoPadInt[2];     // internal copy\r
 int PicoAHW = 0;       // active addon hardware: scd_active, 32x_active, svp_active, pico_active\r
 int PicoRegionOverride = 0; // override the region detection 0: Auto, 1: Japan NTSC, 2: Japan PAL, 4: US, 8: Europe\r
 int PicoAutoRgnOrder = 0;\r
@@ -31,6 +32,7 @@ void PicoInit(void)
   // Blank space for state:\r
   memset(&Pico,0,sizeof(Pico));\r
   memset(&PicoPad,0,sizeof(PicoPad));\r
+  memset(&PicoPadInt,0,sizeof(PicoPadInt));\r
 \r
   // Init CPUs:\r
   SekInit();\r
@@ -145,6 +147,7 @@ int PicoReset(void)
 \r
   PicoMemReset();\r
   SekReset();\r
+  memset(&PicoPadInt,0,sizeof(PicoPadInt));\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
index 84db382..cc77f5f 100644 (file)
@@ -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();
index 0daac2e..aa0e650 100644 (file)
@@ -435,6 +435,7 @@ PICO_INTERNAL unsigned int ym2612_read_local_68k(void);
 // Pico.c\r
 extern struct Pico Pico;\r
 extern struct PicoSRAM SRam;\r
+extern int PicoPadInt[2];\r
 extern int emustatus;\r
 extern void (*PicoResetHook)(void);\r
 extern void (*PicoLineHook)(void);\r
@@ -463,6 +464,7 @@ PICO_INTERNAL void SekInit(void);
 PICO_INTERNAL int  SekReset(void);\r
 PICO_INTERNAL void SekState(int *data);\r
 PICO_INTERNAL void SekSetRealTAS(int use_real);\r
+void SekStepM68k(void);\r
 void SekInitIdleDet(void);\r
 void SekFinishIdleDet(void);\r
 \r
index d641e04..73b7b7c 100644 (file)
@@ -163,6 +163,21 @@ PICO_INTERNAL int SekReset(void)
   return 0;\r
 }\r
 \r
+void SekStepM68k(void)\r
+{\r
+  SekCycleAim=SekCycleCnt+1;\r
+#if defined(EMU_CORE_DEBUG)\r
+  SekCycleCnt+=CM_compareRun(1, 0);\r
+#elif defined(EMU_C68K)\r
+  PicoCpuCM68k.cycles=1;\r
+  CycloneRun(&PicoCpuCM68k);\r
+  SekCycleCnt+=1-PicoCpuCM68k.cycles;\r
+#elif defined(EMU_M68K)\r
+  SekCycleCnt+=m68k_execute(1);\r
+#elif defined(EMU_F68K)\r
+  SekCycleCnt+=fm68k_emulate(1, 0);\r
+#endif\r
+}\r
 \r
 PICO_INTERNAL void SekSetRealTAS(int use_real)\r
 {\r
@@ -174,6 +189,7 @@ PICO_INTERNAL void SekSetRealTAS(int use_real)
 #endif\r
 }\r
 \r
+\r
 /* idle loop detection, not to be used in CD mode */\r
 #ifdef EMU_C68K\r
 #include "cpu/Cyclone/tools/idle.h"\r