removed z80 cycle code in nonacc mode as it was only causing trouble
authornotaz <notasas@gmail.com>
Sun, 2 Sep 2007 16:41:02 +0000 (16:41 +0000)
committernotaz <notasas@gmail.com>
Sun, 2 Sep 2007 16:41:02 +0000 (16:41 +0000)
git-svn-id: file:///home/notaz/opt/svn/PicoDrive@238 be3aeb3a-fb24-0410-a615-afba39da0efa

Pico/MemoryCmn.c
Pico/Pico.c

index b93ac69..2bce627 100644 (file)
@@ -52,7 +52,7 @@ static
 u32 z80ReadBusReq(void)
 {
   u32 d=Pico.m.z80Run&1;
-  if (!d) {
+  if (!d && Pico.m.scanline != -1) {
     // needed by buggy Terminator (Sega CD)
     int stop_before = SekCyclesDone() - z80stopCycle;
     dprintf("stop before: %i", stop_before);
@@ -69,23 +69,25 @@ static
 void z80WriteBusReq(u32 d)
 {
   d&=1; d^=1;
-  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);
+  if(Pico.m.scanline != -1)
+  {
+    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();
     }
-  } else {
-    z80startCycle = SekCyclesDone();
-    //if(Pico.m.scanline != -1)
   }
   dprintf("set_zrun: %02x [%i|%i] @%06x", d, Pico.m.scanline, SekCyclesDone(), /*mz80GetRegisterValue(NULL, 0),*/ SekPc);
   Pico.m.z80Run=(u8)d;
@@ -110,7 +112,7 @@ u32 OtherRead16(u32 a, int realsize)
     goto end;
   }
 
-  // |=0x80 for Shadow of the Beast & Super Offroad; rotate fakes next fetched instruction for Time Killers
+  // rotate fakes next fetched instruction for Time Killers
   if (a==0xa11100) { // z80 busreq
     d=(z80ReadBusReq()<<8)|Pico.m.rotate++;
     dprintf("get_zrun: %04x [%i|%i] @%06x", d, Pico.m.scanline, SekCyclesDone(), SekPc);
@@ -183,6 +185,7 @@ void OtherWrite8(u32 a,u32 d)
   }
 #endif
   if ((a&0xe700e0)==0xc00000) {
+    d&=0xff;
     PicoVideoWrite(a,(u16)(d|(d<<8))); // Byte access gets mirrored
     return;
   }
index 7b70797..259dc18 100644 (file)
@@ -458,19 +458,9 @@ static void PicoRunZ80Simple(int line_from, int line_to)
 {\r
   int line_from_r=line_from, line_to_r=line_to, line = line_from;\r
   int line_sample = Pico.m.pal ? 68 : 93;\r
-  extern const unsigned short vcounts[];\r
 \r
   if(!(PicoOpt&4) || Pico.m.z80Run == 0) { line_from_r = line_to_r; line_to_r = 0; }\r
 \r
-  if(z80startCycle != 0x01000000) {\r
-    line_from_r = vcounts[z80startCycle>>8]+1;\r
-    z80startCycle = 0x01000000;\r
-  }\r
-  if(z80stopCycle != 0x01000000) {\r
-    line_to_r = vcounts[z80stopCycle>>8]+1;\r
-    z80stopCycle = 0x01000000;\r
-  }\r
-\r
   if(PicoOpt&1) {\r
     // we have ym2612 enabled, so we have to run Z80 in lines, so we could update DAC and timers\r
     for(; line < line_to; line++) {\r