Exemple #1
0
        protected override void OnLastCycleLastM()
        {
            base.OnLastCycleLastM();

            var value = _inputPart.Data.Value;

            Registers.Flags.S  = Alu.IsNegative(value);
            Registers.Flags.Z  = Alu.IsZero(value);
            Registers.Flags.H  = false;
            Registers.Flags.PV = Alu.IsParityEven(value);
            Registers.Flags.N  = false;

            if (IsIndirect)
            {
                Registers.A = value;
            }
            else
            {
                var reg = ExecutionEngine.Opcode.Definition.Register8FromY;
                if (reg != Register8Table.HL)
                {
                    Registers[reg] = value;
                }
            }
        }
        private void SetFlags()
        {
            Registers.Flags.N = (_readPart.Data.Value & (1 << 7)) != 0;

            // undocumented p16
            var temp = _readPart.Data.Value + Registers.L;

            Registers.Flags.H  = Registers.Flags.C = (temp > 0xFF);
            Registers.Flags.PV = Alu.IsParityEven((byte)((temp & 7) ^ Registers.B));
        }
        private void SetFlags()
        {
            Registers.Flags.N = (_writePart.Data.Value & (1 << 7)) != 0;

            // undocumented p16/p17
            byte adjustedC = (byte)(Registers.C + (IsDecrement ? -1 : 1));
            var  temp      = _writePart.Data.Value + adjustedC;

            Registers.Flags.H  = Registers.Flags.C = (temp > 0xFF);
            Registers.Flags.PV = Alu.IsParityEven((byte)((temp & 7) ^ Registers.B));
        }