public void IndicatesIfAPageBoundaryIsCrossedByAbsoluteIndexingOnX() { var memory = new FixedMemory(new byte[] { 0x00, 0xFF, 0x0B }); var state = Mos6502State.PowerUp.With(pc: 0x00, x: 0x10); var(address, crossesBoundary) = Mos6502Executor.ResolveAddress(Mos6502AddressingMode.AbsoluteX, in state, memory); Assert.Equal(0x0C0F, address); Assert.True(crossesBoundary); }
public void ResolveAbsoluteAddressIndexedByY() { var memory = new FixedMemory(new byte[] { 0x00, 0x0A, 0x0B }); var state = Mos6502State.PowerUp.With(pc: 0x00, y: 0x10); var(address, crossesBoundary) = Mos6502Executor.ResolveAddress(Mos6502AddressingMode.AbsoluteY, in state, memory); Assert.Equal(0x0B1A, address); Assert.False(crossesBoundary); }
public void ResolveZeroPageAddress() { var memory = new FixedMemory(new byte[] { 0x00, 0x0A, 0x0B }); var state = Mos6502State.PowerUp.With(pc: 0x00); var(address, crossesBoundary) = Mos6502Executor.ResolveAddress(Mos6502AddressingMode.ZeroPage, in state, memory); Assert.Equal(0x000A, address); Assert.False(crossesBoundary); }
public void ResolveRelativeAddress(byte offset, ushort expectedAddress) { var memory = new FixedMemory(new byte[] { 0xCD, 0xCD, 0xCD, 0xCD, 0x00, offset }); var state = Mos6502State.PowerUp.With(pc: 0x04); var(address, crossesBoundary) = Mos6502Executor.ResolveAddress(Mos6502AddressingMode.Relative, in state, memory); Assert.Equal(expectedAddress, address); Assert.False(crossesBoundary); }
public void ResolveImmediateAddress() { var memory = new FixedMemory(new byte[] { 0x00, 0x01, 0x02, 0x03 }); var state = Mos6502State.PowerUp.With(pc: 0x01); var(address, crossesBoundary) = Mos6502Executor.ResolveAddress(Mos6502AddressingMode.Immediate, in state, memory); Assert.Equal(0x02, address); Assert.False(crossesBoundary); }