Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 private void SetStatusFlag(NESCpuFlags flag, bool value)
 {
     if (value)
     {
         StatusRegister |= flag;
     }
     else
     {
         StatusRegister &= ~flag;
     }
 }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }