public void Execute_WhenFlagTrue_ShouldSetProgramCounterToValue() { ushort expectedProgramCounter = 0x3141; FlagsMock.SetupGet(f => f.LessThan).Returns(true); var sut = CreateSut(expectedProgramCounter); sut.Execute(CpuMock.Object); RegistersMock.VerifySet(reg => reg.ProgramCounter = expectedProgramCounter); }
public void Execute_WhenFlagFalse_ShouldNotSetProgramCounter() { ushort expectedProgramCounter = 0x3141; FlagsMock.SetupGet(f => f.Equal).Returns(false); var sut = CreateSut(expectedProgramCounter); sut.Execute(CpuMock.Object); RegistersMock.VerifySet(reg => reg.ProgramCounter = expectedProgramCounter, Times.Never); }
public void Execute_WhenInvoked_ShouldStoreTheValueInMemory() { RegistersMock.SetupGet(r => r.StackPointer).Returns(0xFFFC); MemoryMock.Setup(m => m.GetWord(0xFFFC)).Returns(1234); var sut = CreateSut(3); sut.Execute(CpuMock.Object); RegistersMock.VerifySet(r => r[3] = 1234); }
public void Execute_WhenInvoked_ShouldAddTheConstantToTheRigister() { byte expectedRegister = 7; ushort constValue = 0x3456; ushort initialRegisterValue = 0x1234; var sut = CreateSut(expectedRegister, constValue); RegistersMock.SetupGet(r => r[expectedRegister]).Returns(initialRegisterValue); sut.Execute(CpuMock.Object); RegistersMock.VerifySet(reg => reg[expectedRegister] = (ushort)(constValue + initialRegisterValue)); }
public void Execute_WhenInvoked_ShouldStoreTheValueInTheRegister() { // LD R4, R2 byte targetRegister = 4; byte sourceRegister = 2; ushort expectedValue = 0x3456; RegistersMock.SetupGet(r => r[sourceRegister]).Returns(expectedValue); var sut = CreateSut(targetRegister, sourceRegister); sut.Execute(CpuMock.Object); RegistersMock.VerifySet(r => r[targetRegister] = expectedValue); }
public void Execute_WhenCalled_ShouldSetProgramCounterToValueOnStack() { ushort expectedStackPointer = 0xFFFC; ushort extepedReturnAddress = 0xA020; RegistersMock.SetupGet(r => r.StackPointer).Returns(expectedStackPointer); MemoryMock.Setup(mm => mm.GetWord(expectedStackPointer)).Returns(extepedReturnAddress); var sut = CreateSut(expectedStackPointer); sut.Execute(CpuMock.Object); RegistersMock.VerifySet(reg => reg.ProgramCounter = extepedReturnAddress); RegistersMock.VerifySet(r => r.StackPointer = (ushort)(expectedStackPointer + 4)); }
public void Execute_WhenInvoked_ShouldStoreTheValueInTheRegister() { // LD R4, R2 byte targetRegister = 2; ushort expectedValue = 0x3456; ushort expectedAddress = 0x0034; MemoryMock.Setup(m => m.GetWord(expectedAddress)).Returns(expectedValue); var sut = CreateSut(targetRegister, expectedAddress); sut.Execute(CpuMock.Object); RegistersMock.VerifySet(r => r[targetRegister] = expectedValue); }
public void Execute_WhenInvoked_ShouldStoreTheValueInMemory() { byte targetRegister = 6; ushort expectedValue = 0x3456; ushort expectedStackPointer = 0xFFFF; RegistersMock.SetupGet(r => r.StackPointer).Returns(expectedStackPointer); RegistersMock.SetupGet(r => r[targetRegister]).Returns(expectedValue); var sut = CreateSut(targetRegister); sut.Execute(CpuMock.Object); RegistersMock.VerifySet(r => r.StackPointer = (ushort)(expectedStackPointer - 4), Times.Once()); MemoryMock.Verify(m => m.SetWord(It.IsAny <ushort>(), expectedValue)); }
public void Execute_WhenInvoked_ShouldStoreTheValueInMemory() { // LD R6, 0x3456 // STL R6, (0x2234) byte targetRegister = 6; ushort expectedValue = 0x3456; ushort expectedAddress = 0x2234; RegistersMock.SetupGet(r => r[targetRegister]).Returns(expectedValue); var sut = CreateSut(targetRegister, expectedAddress); sut.Execute(CpuMock.Object); MemoryMock.VerifySet(m => m[expectedAddress] = LowByte(expectedValue)); }
public void Execute_WhenInvoked_ShouldSetFlagsCorrectly(int lvalue, int rvalue, bool eq, bool lt, bool gt) { // CMP r1, 0xNNNN byte leftRegister = 1; RegistersMock.SetupGet(r => r[leftRegister]).Returns((ushort)lvalue); var sut = CreateSut(leftRegister, (ushort)rvalue); sut.Execute(CpuMock.Object); FlagsMock.VerifySet(f => f.Equal = eq); FlagsMock.VerifySet(f => f.GreaterThan = gt); FlagsMock.VerifySet(f => f.LessThan = lt); }
public void Execute_WhenInvoked_ShouldAddTheConstantToTheRigister() { // SUB R7, R4 byte firstRegister = 7; byte secondRegister = 4; ushort firstRegisterValue = 0x3456; ushort secondRegisterValue = 0x1234; RegistersMock.SetupGet(r => r[firstRegister]).Returns(firstRegisterValue); RegistersMock.SetupGet(r => r[secondRegister]).Returns(secondRegisterValue); var sut = CreateSut(firstRegister, secondRegister); sut.Execute(CpuMock.Object); RegistersMock.VerifySet(reg => reg[firstRegister] = (ushort)(firstRegisterValue - secondRegisterValue)); }
public void Execute_WhenInvoked_ShouldSetProgramCounterToValueAndPushReturnAddress() { ushort stackPointer = 0xFFFC; ushort callAddress = 0x3141; ushort currentProgramCounter = 0x00F0; var decrementedStackPointer = (ushort)(stackPointer - 4); RegistersMock.SetupGet(r => r.StackPointer).Returns(stackPointer); RegistersMock.SetupGet(r => r.ProgramCounter).Returns(currentProgramCounter); var sut = CreateSut(callAddress); sut.Execute(CpuMock.Object); RegistersMock.VerifySet(r => r.StackPointer = decrementedStackPointer); // since its a mock the pre-decrement isn't real, so ignore the address MemoryMock.Verify(m => m.SetWord(It.IsAny <ushort>(), currentProgramCounter)); RegistersMock.VerifySet(r => r.ProgramCounter = callAddress); }
public void Execute_WhenInvoked_ShouldStoreTheValueInMemory() { // LD R3, 0x2234 // LD R6, 0x3456 // ST R6, (R3) byte targetRegister = 6; byte expectedAddressRegister = 3; ushort expectedValue = 0x3456; ushort expectedAddress = 0x2234; RegistersMock.SetupGet(r => r[targetRegister]).Returns(expectedValue); RegistersMock.SetupGet(r => r[expectedAddressRegister]).Returns(expectedAddress); var sut = CreateSut(targetRegister, expectedAddressRegister); sut.Execute(CpuMock.Object); MemoryMock.Verify(m => m.SetWord(expectedAddress, expectedValue)); }