From 998b64d14c9d055562d8c1611813d40af4cb030b Mon Sep 17 00:00:00 2001 From: Ian C Date: Fri, 9 Mar 2012 23:01:13 +0000 Subject: Further bug fixes to Z80. Now starts the Spectrum ROM OK. --- .../Z80CpuDecodeByte.cs | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'src/Noddybox.Emulation.EightBit.Z80/Z80CpuDecodeByte.cs') diff --git a/src/Noddybox.Emulation.EightBit.Z80/Z80CpuDecodeByte.cs b/src/Noddybox.Emulation.EightBit.Z80/Z80CpuDecodeByte.cs index 22a6c98..63ccc15 100644 --- a/src/Noddybox.Emulation.EightBit.Z80/Z80CpuDecodeByte.cs +++ b/src/Noddybox.Emulation.EightBit.Z80/Z80CpuDecodeByte.cs @@ -349,7 +349,14 @@ namespace Noddybox.Emulation.EightBit.Z80 break; case 0x36: // LD (HL),n - clock.Add(10); + if (shift == 0xdd || shift == 0xfd) + { + clock.Add(7); + } + else + { + clock.Add(10); + } addr = (ushort)(hl.reg + Offset()); memory.Write(addr, memory.Read(PC++)); break; @@ -1093,7 +1100,7 @@ namespace Noddybox.Emulation.EightBit.Z80 break; case 0xc5: // PUSH BC - clock.Add(10); + clock.Add(11); PUSH(BC.reg); break; @@ -1112,7 +1119,7 @@ namespace Noddybox.Emulation.EightBit.Z80 case 0xc9: // RET clock.Add(10); - SP = POP(); + PC = POP(); break; case 0xca: // JP Z,nnnn @@ -1120,8 +1127,6 @@ namespace Noddybox.Emulation.EightBit.Z80 break; case 0xcb: // CB shift - AddR(1); - // Check for IX/IY shift // if (shift != 0) @@ -1139,6 +1144,7 @@ namespace Noddybox.Emulation.EightBit.Z80 } else { + AddR(1); DecodeCB(memory.Read(PC++)); } break; @@ -1186,7 +1192,7 @@ namespace Noddybox.Emulation.EightBit.Z80 break; case 0xd5: // PUSH DE - clock.Add(10); + clock.Add(11); PUSH(DE.reg); break; @@ -1266,7 +1272,7 @@ namespace Noddybox.Emulation.EightBit.Z80 break; case 0xe5: // PUSH HL - clock.Add(10); + clock.Add(11); PUSH(hl.reg); break; @@ -1341,7 +1347,7 @@ namespace Noddybox.Emulation.EightBit.Z80 break; case 0xf5: // PUSH AF - clock.Add(10); + clock.Add(11); PUSH((ushort)((A << 8) | (int)(F))); break; -- cgit v1.3