From: spth Date: Mon, 5 Jan 2009 16:12:39 +0000 (+0000) Subject: Fixed bug #2488074 X-Git-Url: https://git.gag.com/?p=fw%2Fsdcc;a=commitdiff_plain;h=b49b8f5a2e8ac5cea3beb6e503159dd3d09f6728 Fixed bug #2488074 git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@5334 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/ChangeLog b/ChangeLog index f42d5d89..6b506c30 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,11 @@ 2009-01-05 Philipp Klaus Krause - * /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 + + * device/lib/z80/mod.s, device/lib/z80/div.s, device/lib/z80/mulchar.s, device/lib/z80/mul.s, diff --git a/sim/ucsim/z80.src/inst_ed.cc b/sim/ucsim/z80.src/inst_ed.cc index a91524f8..06874605 100644 --- a/sim/ucsim/z80.src/inst_ed.cc +++ b/sim/ucsim/z80.src/inst_ed.cc @@ -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