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