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. --- .../Z80CpuDecodeED.cs | 29 +++++++++++++++------- 1 file changed, 20 insertions(+), 9 deletions(-) (limited to 'src/Noddybox.Emulation.EightBit.Z80/Z80CpuDecodeED.cs') diff --git a/src/Noddybox.Emulation.EightBit.Z80/Z80CpuDecodeED.cs b/src/Noddybox.Emulation.EightBit.Z80/Z80CpuDecodeED.cs index a6037f6..f9cc84e 100644 --- a/src/Noddybox.Emulation.EightBit.Z80/Z80CpuDecodeED.cs +++ b/src/Noddybox.Emulation.EightBit.Z80/Z80CpuDecodeED.cs @@ -36,7 +36,8 @@ namespace Noddybox.Emulation.EightBit.Z80 case 0x40: // IN B,(C) clock.Add(12); BC.high = device.Read(BC.reg); - F = Z80Flags.Carry | PSZtable[BC.high] | H35table[BC.high]; + F &= Z80Flags.Carry; + F |= PSZtable[BC.high] | H35table[BC.high]; break; case 0x41: // OUT (C),B @@ -82,7 +83,8 @@ namespace Noddybox.Emulation.EightBit.Z80 case 0x48: // IN C,(C) clock.Add(12); BC.low = device.Read(BC.reg); - F = Z80Flags.Carry | PSZtable[BC.low] | H35table[BC.low]; + F &= Z80Flags.Carry; + F |= PSZtable[BC.low] | H35table[BC.low]; break; case 0x49: // OUT (C),C @@ -128,7 +130,8 @@ namespace Noddybox.Emulation.EightBit.Z80 case 0x50: // IN D,(C) clock.Add(12); DE.high = device.Read(BC.reg); - F = Z80Flags.Carry | PSZtable[DE.high] | H35table[DE.high]; + F &= Z80Flags.Carry; + F |= PSZtable[DE.high] | H35table[DE.high]; break; case 0x51: // OUT (C),D @@ -169,12 +172,15 @@ namespace Noddybox.Emulation.EightBit.Z80 case 0x57: // LD A,I clock.Add(9); A = (byte)I; + F &= Z80Flags.Carry; + F |= H35table[A] | SZtable[A] | (IFF2 ? Z80Flags.PV : Z80Flags.None); break; case 0x58: // IN E,(C) clock.Add(12); DE.low = device.Read(BC.reg); - F = Z80Flags.Carry | PSZtable[BC.low] | H35table[BC.low]; + F &= Z80Flags.Carry; + F |= PSZtable[DE.low] | H35table[DE.low]; break; case 0x59: // OUT (C),E @@ -215,12 +221,15 @@ namespace Noddybox.Emulation.EightBit.Z80 case 0x5f: // LD A,R clock.Add(9); A = R; + F &= Z80Flags.Carry; + F |= H35table[A] | SZtable[A] | (IFF2 ? Z80Flags.PV : Z80Flags.None); break; case 0x60: // IN H,(C) clock.Add(12); HL.high = device.Read(BC.reg); - F = Z80Flags.Carry | PSZtable[DE.high] | H35table[DE.high]; + F &= Z80Flags.Carry; + F |= PSZtable[HL.high] | H35table[HL.high]; break; case 0x61: // OUT (C),H @@ -263,13 +272,15 @@ namespace Noddybox.Emulation.EightBit.Z80 b = memory.Read(HL.reg); memory.Write(HL.reg, (byte)((b >> 4)|(A << 4))); A = (byte)((A & 0xf0) | (b & 0x0f)); - F = Z80Flags.Carry | PSZtable[A] | H35table[A]; + F &= Z80Flags.Carry; + F |= PSZtable[A] | H35table[A]; break; case 0x68: // IN L,(C) clock.Add(12); HL.low = device.Read(BC.reg); - F = Z80Flags.Carry | PSZtable[BC.low] | H35table[BC.low]; + F &= Z80Flags.Carry; + F |= PSZtable[HL.low] | H35table[HL.low]; break; case 0x69: // OUT (C),L @@ -318,7 +329,8 @@ namespace Noddybox.Emulation.EightBit.Z80 case 0x70: // IN (C) clock.Add(12); b = device.Read(BC.reg); - F = Z80Flags.Carry | PSZtable[b] | H35table[b]; + F &= Z80Flags.Carry; + F |= PSZtable[b] | H35table[b]; break; case 0x71: // OUT (C) @@ -364,7 +376,6 @@ namespace Noddybox.Emulation.EightBit.Z80 case 0x78: // IN A,(C) clock.Add(12); A = device.Read(BC.reg); - F = Z80Flags.Carry | PSZtable[BC.low] | H35table[BC.low]; break; case 0x79: // OUT (C),A -- cgit v1.3