public ExecutionResult Execute(Processor cpu, InstructionPackage package) { Instruction instruction = package.Instruction; InstructionData data = package.Data; Registers r = cpu.Registers; if (instruction.Opcode == 0x08) { // EX AF,AF' r.ExchangeAF(); } else { if (instruction.Target == InstructionElement.AddressFromSP) { // EX (SP),HL/IX/IY ushort value = instruction.MarshalSourceWord(data, cpu, out ushort address); ushort valueAtSP = cpu.Memory.Untimed.ReadWordAt(r.SP); r[instruction.Source.AsWordRegister()] = valueAtSP; cpu.Memory.Timed.WriteWordAt(r.SP, value); r.WZ = valueAtSP; } else { // EX DE,HL ushort de = r.DE; r.DE = r.HL; r.HL = de; } } return(new ExecutionResult(package, null)); }
public void EX_AF_AF() { Registers.AF = 0x80; Registers.ExchangeAF(); Registers.AF = 0x90; Registers.ExchangeAF(); ExecuteInstruction("EX AF,AF'"); Assert.That(CPU.Registers.AF == 0x90); ExecuteInstruction("EX AF,AF'"); Assert.That(CPU.Registers.AF == 0x80); }