public void BranchingMustSetThePCAndAbsAddressRegistersToJumpToRelativeAddressIfTheRequiredFlagIsSet( string methodName, NESCpuFlags desiredStatusRegister ) { ushort initialProgramCounter = 0x20; ushort initialRelAddress = 0x40; ushort expectedAddress = 0x60; _mockCpu .SetupProperty(cpu => cpu.StatusRegister, desiredStatusRegister); _mockCpu .SetupProperty(cpu => cpu.AbsoluteAddress, (ushort)0x54); // Junk data that will be replaced _mockCpu .SetupProperty(cpu => cpu.RelativeAddress, initialRelAddress); _mockCpu .SetupProperty(cpu => cpu.ProgramCounter, initialProgramCounter); var extraCycles = InvokeSubjectMethod(methodName); Check.That(extraCycles).IsEqualTo(1); Check.That(_mockCpu.Object.StatusRegister).IsEqualTo(desiredStatusRegister); Check.That(_mockCpu.Object.AbsoluteAddress).IsEqualTo(expectedAddress); Check.That(_mockCpu.Object.ProgramCounter).IsEqualTo(expectedAddress); }
private void SetStatusFlag(NESCpuFlags flag, bool value) { if (value) { StatusRegister |= flag; } else { StatusRegister &= ~flag; } }
public void BranchingMustSimplyReturnZeroIfTheRequiredFlagIsntSet( string methodName, NESCpuFlags desiredStatusRegister ) { _mockCpu .SetupProperty(cpu => cpu.StatusRegister, desiredStatusRegister); var extraCycles = InvokeSubjectMethod(methodName); Check.That(extraCycles).IsEqualTo(0); Check.That(_mockCpu.Object.StatusRegister).IsEqualTo(desiredStatusRegister); }
public void BranchingMustRequireAnAdditionalCycleIfThereIsAPageJump( string methodName, NESCpuFlags desiredStatusRegister ) { ushort initialProgramCounter = 0x20; ushort initialRelAddress = 0x160; _mockCpu .SetupProperty(cpu => cpu.StatusRegister, desiredStatusRegister); _mockCpu .SetupProperty(cpu => cpu.AbsoluteAddress, (ushort)0x54); // Junk data that will be replaced _mockCpu .SetupProperty(cpu => cpu.RelativeAddress, initialRelAddress); _mockCpu .SetupProperty(cpu => cpu.ProgramCounter, initialProgramCounter); var extraCycles = InvokeSubjectMethod(methodName); Check.That(extraCycles).IsEqualTo(2); }