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)); }
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)); }