Fixed bug #2488074
authorspth <spth@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Mon, 5 Jan 2009 16:12:39 +0000 (16:12 +0000)
committerspth <spth@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Mon, 5 Jan 2009 16:12:39 +0000 (16:12 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@5334 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
sim/ucsim/z80.src/inst_ed.cc

index f42d5d890d4b02fd0e075ee99d0d6e2055f0dc74..6b506c30d20c0d5a36697a7760dfce1d39a8d3db 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,11 @@
 2009-01-05 Philipp Klaus Krause <pkk AT spth.de>
 
-       * /device/lib/z80/mod.s,
+       * sim/ucsim/z80.src/inst_ed.cc:
+          Fixed bug #2488074, which made regression tests fail.
+
+2009-01-05 Philipp Klaus Krause <pkk AT spth.de>
+
+       * device/lib/z80/mod.s,
          device/lib/z80/div.s,
          device/lib/z80/mulchar.s,
          device/lib/z80/mul.s,
index a91524f8b0a10e4dd7855279277d56ce63122207..06874605c9feb91338decd055526c7c865c34a5b 100644 (file)
@@ -271,18 +271,24 @@ cl_z80::inst_ed(void)
     return(resGO);
 
     case 0xB1: // CPIR
-/* fixme: checkme, compare to other emul. */
       // compare acc with mem(HL), if ACC=0 set Z flag.  Incr HL, decr BC.
-      regs.F &= ~(BIT_ALL);  /* clear these */
-      regs.F |= BIT_N | BIT_P;
+      regs.F &= ~(BIT_P | BIT_A | BIT_Z | BIT_S);  /* clear these */
+      regs.F |= BIT_N;
       do {
-        if ((regs.A - get1(regs.HL)) == 0) {
-          regs.F |= (BIT_Z | BIT_P);
-          return(resGO);
-        }
+        if((regs.A - get1(regs.HL)) == 0)
+          regs.F |= BIT_Z;
+        else
+          regs.F &= ~BIT_Z;
+        if((regs.A - get1(regs.HL)) & 0x80)
+          regs.F |= BIT_S;
+        else
+          regs.F &= ~BIT_S;
+/* fixme: set BIT_A correctly. */
         ++regs.HL;
         --regs.BC;
-      } while (regs.BC != 0);
+      } while (regs.BC != 0 && (regs.F & BIT_Z) == 0);
+      if(regs.BC != 0)
+        regs.F |= BIT_P;
 
     return(resGO);
 #if 0