示例#1
0
        private void flagCheckTest(InstructionData testData)
        {
            cpu.reset();
            cpu.set("flags", 0xFF);
            cpu.step();

            for (var x = 0; x < testData.flags.Length; x++)
            {
                var flag = testData.flags[x];
                var mask = EXPECTED_FLAG_MAP[x];
                switch (flag)
                {
                case FLAG_CLEAR:
                    Assert.That(cpu.regCC & mask, Is.EqualTo(0));
                    break;

                case FLAG_SET:
                    Assert.IsTrue((cpu.regCC & mask) > 0);
                    break;

                case FLAG_UNAFFECTED:
                    var unaffectedFlag = (byte)(cpu.regCC & mask);
                    TestContext.WriteLine("offset: {0}, {1}, mask: {2}", x, unaffectedFlag, mask);
                    Assert.IsTrue(unaffectedFlag > 0);
                    break;

                default:
                    break;
                }
            }
        }
示例#2
0
        public void ROLA_0xFF_CarryFlagSet()
        {
            TestContext.WriteLine("ROLA, 0xFF - carry flag set");

            const byte OP_ROLA = 0x49;

            runRegisterATest(OP_ROLA, 0xFF, () =>
            {
                var cc = cpu.regCC |= 1;
                cpu.set("flags", cc);
            });

            Assert.That(cpu.regA, Is.EqualTo(0xFF));
            Assert.That(cpu.tickCount, Is.EqualTo(2));
            Assert.That(cpu.flagsToString(), Is.EqualTo("eFhINzvC"));
        }
示例#3
0
        public void oCmp_8bit_CarryFlag()
        {
            TestContext.WriteLine("oCMP 8bit, carry flag");

            cpu.set("flags", 0x00);
            cpu.oCMP(0, 0xFF);
            Assert.That("efhinzvC", Is.EqualTo(cpu.flagsToString()));
        }