Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }