From 31203bc854656ff92844364903de9abee9daea8b Mon Sep 17 00:00:00 2001 From: Ian C Date: Wed, 7 Mar 2012 22:48:11 +0000 Subject: Safe-keeping commit. Currently debugging emulation using FUSE tests. --- src/Noddybox.Emulation.EightBit.Z80/Z80Cpu.cs | 12 +++++++++++- src/Noddybox.Emulation.EightBit.Z80/Z80CpuBaseOpcodes.cs | 10 +++++++--- src/Noddybox.Emulation.EightBit.Z80/Z80CpuDecodeByte.cs | 7 ++++--- 3 files changed, 22 insertions(+), 7 deletions(-) (limited to 'src/Noddybox.Emulation.EightBit.Z80') diff --git a/src/Noddybox.Emulation.EightBit.Z80/Z80Cpu.cs b/src/Noddybox.Emulation.EightBit.Z80/Z80Cpu.cs index a2e6fed..2da155e 100644 --- a/src/Noddybox.Emulation.EightBit.Z80/Z80Cpu.cs +++ b/src/Noddybox.Emulation.EightBit.Z80/Z80Cpu.cs @@ -242,7 +242,7 @@ namespace Noddybox.Emulation.EightBit.Z80 } } - if ((parity & 1) == 1) + if ((parity & 1) == 0) { p = Z80Flags.PV; } @@ -523,5 +523,15 @@ namespace Noddybox.Emulation.EightBit.Z80 } #endregion + + #region Object overrides + + public override string ToString() + { + return String.Format("A={0:x2} BC={1:x4} DE={2:x4} HL={3:x4} F={4}\nPC={5:x4} SP={6:x4} IX={7:x4} IY={8:x4} AF'={9:x4} BC'={10:x4} DE'={11:x4} HL'={12:x4}\nI={13:x2} R={14:x2} IFF1={15} IFF2={16} IM={17} HALT={18}", + A, BC.reg, DE.reg, HL.reg, F, PC, SP, IX.reg, IY.reg, AF_.reg, BC_.reg, DE_.reg, HL_.reg, I, R, IFF1, IFF2, IM, HALT); + } + + #endregion } } diff --git a/src/Noddybox.Emulation.EightBit.Z80/Z80CpuBaseOpcodes.cs b/src/Noddybox.Emulation.EightBit.Z80/Z80CpuBaseOpcodes.cs index bc09ce2..e0cc4e4 100644 --- a/src/Noddybox.Emulation.EightBit.Z80/Z80CpuBaseOpcodes.cs +++ b/src/Noddybox.Emulation.EightBit.Z80/Z80CpuBaseOpcodes.cs @@ -441,9 +441,13 @@ namespace Noddybox.Emulation.EightBit.Z80 F = PSZtable[A] | carry - | nf | - ((Z80Flags)(acc ^ A) & Z80Flags.HalfCarry) + | nf | H35table[A]; + + if (((A ^ acc) & 0x10) == 0x10) + { + F |= Z80Flags.HalfCarry; + } } #endregion @@ -517,7 +521,7 @@ namespace Noddybox.Emulation.EightBit.Z80 byte carry = (byte)(F & Z80Flags.Carry); F = (F & (Z80Flags.PV | Z80Flags.Sign | Z80Flags.Zero)) | (Z80Flags)Binary.ShiftRight(A, 7); - A = (byte)(Binary.ShiftRight(A, 1) | carry); + A = (byte)(Binary.ShiftLeft(A, 1) | carry); F |= H35table[A]; } diff --git a/src/Noddybox.Emulation.EightBit.Z80/Z80CpuDecodeByte.cs b/src/Noddybox.Emulation.EightBit.Z80/Z80CpuDecodeByte.cs index f0256ba..22a6c98 100644 --- a/src/Noddybox.Emulation.EightBit.Z80/Z80CpuDecodeByte.cs +++ b/src/Noddybox.Emulation.EightBit.Z80/Z80CpuDecodeByte.cs @@ -141,7 +141,7 @@ namespace Noddybox.Emulation.EightBit.Z80 break; case 0x10: // DJNZ - if (--BC.high == 0) + if (--BC.high != 0) { clock.Add(13); JR(); @@ -279,7 +279,7 @@ namespace Noddybox.Emulation.EightBit.Z80 break; case 0x2a: // LD HL,(nnnnn) - clock.Add(7); + clock.Add(16); addr = FetchWord(); hl.low = memory.Read(addr); hl.high = memory.Read((ushort)(addr + 1)); @@ -410,6 +410,7 @@ namespace Noddybox.Emulation.EightBit.Z80 F ^= Z80Flags.Carry; ClearFlag(Z80Flags.Hidden); + ClearFlag(Z80Flags.Neg); SetFlag(H35table[A]); break; @@ -734,7 +735,7 @@ namespace Noddybox.Emulation.EightBit.Z80 case 0x7e: // LD A,(HL) clock.Add(7); addr = (ushort)(hl.reg + Offset()); - HL.low = memory.Read(addr); + A = memory.Read(addr); break; case 0x7f: // LD A,A -- cgit v1.3