summaryrefslogtreecommitdiff
path: root/src/Noddybox.Emulation.EightBit.Z80
diff options
context:
space:
mode:
authorIan C <ianc@noddybox.co.uk>2012-03-07 22:48:11 +0000
committerIan C <ianc@noddybox.co.uk>2012-03-07 22:48:11 +0000
commit31203bc854656ff92844364903de9abee9daea8b (patch)
tree540312afe7573eefde86bcd4c587a82d7bcf3ba4 /src/Noddybox.Emulation.EightBit.Z80
parent7a79ba9eb1e7cbee6386d8c8e019fdc4738228a4 (diff)
Safe-keeping commit. Currently debugging emulation using FUSE tests.
Diffstat (limited to 'src/Noddybox.Emulation.EightBit.Z80')
-rw-r--r--src/Noddybox.Emulation.EightBit.Z80/Z80Cpu.cs12
-rw-r--r--src/Noddybox.Emulation.EightBit.Z80/Z80CpuBaseOpcodes.cs10
-rw-r--r--src/Noddybox.Emulation.EightBit.Z80/Z80CpuDecodeByte.cs7
3 files changed, 22 insertions, 7 deletions
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