public void ResolvesIndexedIndirectAddress() { var memory = new VirtualMemory(); var state = Mos6502State.PowerUp.With(pc: 0x01, x: 0x02); memory.Attach(0x0000, new byte[] { 0xAB, 0xAB, 0x10 }); memory.Attach(0x0010, new byte[] { 0xAB, 0xAB, 0xEF, 0xBE }); var(address, _) = Mos6502Executor.ResolveAddress(Mos6502AddressingMode.IndexedIndirect, in state, memory); Assert.Equal(0xBEEF, address); }
public void IndicatesIfAPageBoundaryIsCrossedByIndirectIndexing() { var memory = new VirtualMemory(); var state = Mos6502State.PowerUp.With(pc: 0x01, y: 0x01); memory.Attach(0x0000, new byte[] { 0xAB, 0xAB, 0x12 }); memory.Attach(0x0010, new byte[] { 0xAB, 0xAB, 0xFF, 0x1F }); var(address, crossesBoundary) = Mos6502Executor.ResolveAddress(Mos6502AddressingMode.IndirectIndexed, in state, memory); Assert.Equal(0x2000, address); Assert.True(crossesBoundary); }
public void ResolvesIndirectIndexedAddress() { var memory = new VirtualMemory(); var state = Mos6502State.PowerUp.With(pc: 0x01, y: 0x02); memory.Attach(0x0000, new byte[] { 0xAB, 0xAB, 0x12 }); memory.Attach(0x0010, new byte[] { 0xAB, 0xAB, 0x10, 0x10 }); var(address, crossesBoundary) = Mos6502Executor.ResolveAddress(Mos6502AddressingMode.IndirectIndexed, in state, memory); Assert.Equal(0x1012, address); Assert.False(crossesBoundary); }