public Instruction GenericInst(OpCodes code, AddressingModes addrMode, Action<GenericInstruction, int, int> exec, ArgumentType param1type = ArgumentType.None, ArgumentType param2type = ArgumentType.None) { var inst = new GenericInstruction(cpu, code, addrMode, param1type != ArgumentType.None) { runFunction = exec }; if (param1type != ArgumentType.None) { inst.decodeArgumentsFunction = delegate(GenericInstruction sender, Memory.MemoryBin bin, ref InstructionDecodeContext context, ref int offset, ref int param1, ref int param2) { switch (param1type) { case ArgumentType.None: break; default: case ArgumentType.I1: param1 = inst.DecodeInt1Argument(bin, ref offset); break; case ArgumentType.I2: param1 = inst.DecodeInt2Argument(bin, ref offset); break; case ArgumentType.I3: param1 = inst.DecodeInt3Argument(bin, ref offset); break; } switch (param2type) { case ArgumentType.None: break; default: case ArgumentType.I1: param2 = inst.DecodeInt1Argument(bin, ref offset); break; case ArgumentType.I2: param2 = inst.DecodeInt2Argument(bin, ref offset); break; case ArgumentType.I3: param2 = inst.DecodeInt3Argument(bin, ref offset); break; } }; } return inst; }
public Instruction GenericInstCustom(OpCodes code, AddressingModes addrMode, Action<GenericInstruction, int, int> exec, GenericInstruction.DecodeArgumentsFunctionDelegate decodeDelegate = null) { return new GenericInstruction(cpu, code, addrMode, decodeDelegate != null) { runFunction = exec, decodeArgumentsFunction = decodeDelegate }; }