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;
                }
            }
        }
Exemple #2
0
 private void SetFlags(byte value)
 {
     Registers.Flags.S  = Alu.IsNegative(value);
     Registers.Flags.Z  = Alu.IsZero(value);
     Registers.Flags.H  = false;
     Registers.Flags.PV = Registers.Interrupt.IFF2;
     Registers.Flags.N  = false;
 }
Exemple #3
0
        protected virtual void MoveNext()
        {
            if (IsDecrement)
            {
                Registers.HL--;
            }
            else
            {
                Registers.HL++;
            }

            Registers.B--;
            Registers.Flags.Z = Alu.IsZero(Registers.B);
            Registers.Flags.N = true;
        }
Exemple #4
0
        protected override void MoveNext()
        {
            if (IsDecrement)
            {
                Registers.DE--;
                Registers.HL--;
            }
            else
            {
                Registers.DE++;
                Registers.HL++;
            }

            Registers.BC--;
            Registers.Flags.Z = Alu.IsZero(Registers.B) && Alu.IsZero(Registers.C);
            Registers.Flags.H = true;
            Registers.Flags.N = true;
        }