示例#1
0
        public void DecrementIndirect()
        {
            _cpu.Registers[5] = 0xC0; // H
            _cpu.Registers[6] = 0x12; // L = 0xC012

            _cpu.WriteMemory(0xC012, 0xA0);
            _cpu.WriteMemory(0xC013, 0x10);
            _cpu.WriteMemory(0xC014, 0x00);
            _cpu.WriteMemory(0xC015, 0x01);

            _cpu.LoadedCartridge.Bank0[Cartridge.CodeStartAddress + 0] = 0x35;
            _cpu.LoadedCartridge.Bank0[Cartridge.CodeStartAddress + 1] = 0x35;
            _cpu.LoadedCartridge.Bank0[Cartridge.CodeStartAddress + 2] = 0x35;
            _cpu.LoadedCartridge.Bank0[Cartridge.CodeStartAddress + 3] = 0x35;

            _cpu.Step();
            Assert.That.CpuIsInState(_cpu, Cartridge.CodeStartAddress + 1, 12, FlagRegister.Carry | FlagRegister.HalfCarry | FlagRegister.NSubstract);
            Assert.AreEqual((byte)0x9F, _cpu.ResolveMemory(0xC012));

            _cpu.Registers[6] = 0x13;
            _cpu.Step();
            Assert.That.CpuIsInState(_cpu, Cartridge.CodeStartAddress + 2, 24, FlagRegister.Carry | FlagRegister.NSubstract | FlagRegister.HalfCarry);
            Assert.AreEqual((byte)0x0F, _cpu.ResolveMemory(0xC013));

            _cpu.Registers[6] = 0x14;
            _cpu.Step();
            Assert.That.CpuIsInState(_cpu, Cartridge.CodeStartAddress + 3, 36, FlagRegister.Carry | FlagRegister.HalfCarry | FlagRegister.NSubstract);
            Assert.AreEqual((byte)0xFF, _cpu.ResolveMemory(0xC014));

            _cpu.Registers[6] = 0x15;
            _cpu.Step();
            Assert.That.CpuIsInState(_cpu, Cartridge.CodeStartAddress + 4, 48, FlagRegister.Carry | FlagRegister.Zero | FlagRegister.NSubstract);
            Assert.AreEqual((byte)0x00, _cpu.ResolveMemory(0xC015));
        }
示例#2
0
        public void LoadWordRegister(int ri)
        {
            byte r = (byte)ri;

            for (int i = 0; i < 8; i++)
            {
                _cpu.LoadedCartridge.Bank0[Cartridge.CodeStartAddress + i] = (byte)(0x40 + i + (r * 8));
            }

            _cpu.WriteMemory(0xC012, 0xAA);

            _cpu.Registers[0] = 0x01;
            _cpu.Registers[1] = 0x02;
            _cpu.Registers[2] = 0x03;
            _cpu.Registers[3] = 0x04;
            _cpu.Registers[4] = 0x05;
            _cpu.Registers[5] = 0x06;
            _cpu.Registers[6] = 0x07;
            _cpu.Step();
            Assert.That.CpuIsInState(_cpu, Cartridge.CodeStartAddress + 1, 4);
            Assert.AreEqual((byte)0x02, _cpu.ReadRTable(r));

            _cpu.Registers[0] = 0x01;
            _cpu.Registers[1] = 0x02;
            _cpu.Registers[2] = 0x03;
            _cpu.Registers[3] = 0x04;
            _cpu.Registers[4] = 0x05;
            _cpu.Registers[5] = 0x06;
            _cpu.Registers[6] = 0x07;
            _cpu.Step();
            Assert.That.CpuIsInState(_cpu, Cartridge.CodeStartAddress + 2, 8);
            Assert.AreEqual((byte)0x03, _cpu.ReadRTable(r));

            _cpu.Registers[0] = 0x01;
            _cpu.Registers[1] = 0x02;
            _cpu.Registers[2] = 0x03;
            _cpu.Registers[3] = 0x04;
            _cpu.Registers[4] = 0x05;
            _cpu.Registers[5] = 0x06;
            _cpu.Registers[6] = 0x07;
            _cpu.Step();
            Assert.That.CpuIsInState(_cpu, Cartridge.CodeStartAddress + 3, 12);
            Assert.AreEqual((byte)0x04, _cpu.ReadRTable(r));

            _cpu.Registers[0] = 0x01;
            _cpu.Registers[1] = 0x02;
            _cpu.Registers[2] = 0x03;
            _cpu.Registers[3] = 0x04;
            _cpu.Registers[4] = 0x05;
            _cpu.Registers[5] = 0x06;
            _cpu.Registers[6] = 0x07;
            _cpu.Step();
            Assert.That.CpuIsInState(_cpu, Cartridge.CodeStartAddress + 4, 16);
            Assert.AreEqual((byte)0x05, _cpu.ReadRTable(r));

            _cpu.Registers[0] = 0x01;
            _cpu.Registers[1] = 0x02;
            _cpu.Registers[2] = 0x03;
            _cpu.Registers[3] = 0x04;
            _cpu.Registers[4] = 0x05;
            _cpu.Registers[5] = 0x06;
            _cpu.Registers[6] = 0x07;
            _cpu.Step();
            Assert.That.CpuIsInState(_cpu, Cartridge.CodeStartAddress + 5, 20);
            Assert.AreEqual((byte)0x06, _cpu.ReadRTable(r));

            _cpu.Registers[0] = 0x01;
            _cpu.Registers[1] = 0x02;
            _cpu.Registers[2] = 0x03;
            _cpu.Registers[3] = 0x04;
            _cpu.Registers[4] = 0x05;
            _cpu.Registers[5] = 0x06;
            _cpu.Registers[6] = 0x07;
            _cpu.Step();
            Assert.That.CpuIsInState(_cpu, Cartridge.CodeStartAddress + 6, 24);
            Assert.AreEqual((byte)0x07, _cpu.ReadRTable(r));

            _cpu.Registers[0] = 0x01;
            _cpu.Registers[1] = 0x02;
            _cpu.Registers[2] = 0x03;
            _cpu.Registers[3] = 0x04;
            _cpu.Registers[4] = 0x05;
            _cpu.Registers[5] = 0xC0; // H
            _cpu.Registers[6] = 0x12; // L = 0xC012
            _cpu.Step();
            Assert.That.CpuIsInState(_cpu, Cartridge.CodeStartAddress + 7, 32);
            Assert.AreEqual((byte)0xAA, _cpu.ReadRTable(r));

            _cpu.Registers[0] = 0x01;
            _cpu.Registers[1] = 0x02;
            _cpu.Registers[2] = 0x03;
            _cpu.Registers[3] = 0x04;
            _cpu.Registers[4] = 0x05;
            _cpu.Registers[5] = 0x06;
            _cpu.Registers[6] = 0x07;
            _cpu.Step();
            Assert.That.CpuIsInState(_cpu, Cartridge.CodeStartAddress + 8, 36);
            Assert.AreEqual((byte)0x01, _cpu.ReadRTable(r));
        }