summaryrefslogtreecommitdiff
path: root/src/Noddybox.Emulation.EightBit.Z80/Z80CpuDecodeED.cs
diff options
context:
space:
mode:
authorIan C <ianc@noddybox.co.uk>2012-03-09 23:01:13 +0000
committerIan C <ianc@noddybox.co.uk>2012-03-09 23:01:13 +0000
commit998b64d14c9d055562d8c1611813d40af4cb030b (patch)
treeecb3402a5c7302d86c5a364308b6d0b173e00e5c /src/Noddybox.Emulation.EightBit.Z80/Z80CpuDecodeED.cs
parent31203bc854656ff92844364903de9abee9daea8b (diff)
Further bug fixes to Z80. Now starts the Spectrum ROM OK.
Diffstat (limited to 'src/Noddybox.Emulation.EightBit.Z80/Z80CpuDecodeED.cs')
-rw-r--r--src/Noddybox.Emulation.EightBit.Z80/Z80CpuDecodeED.cs29
1 files changed, 20 insertions, 9 deletions
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