public void SetMnemonic(OpcodeDefinition opcodeDefinition) { if (opcodeDefinition == null) { _mnemonic = null; Text = string.Empty; return; } _mnemonic = opcodeDefinition.Mnemonic; Text = _mnemonic; return; }
private bool Process(OpcodeByte opcodeByte) { if (_opcodeDef == null) { if (opcodeByte.IsExtension && !HasReversedOffsetParameterOrder) { SetExtension(opcodeByte); } else if (HasReversedOffsetParameterOrder && _tmpOffset == null) { _tmpOffset = opcodeByte; } else { _opcodeDef = OpcodeDefinition.Find(opcodeByte, _ext1, _ext2); if (_opcodeDef == null) { throw new NotSupportedException("Illegal opcode:" + opcodeByte.ToString()); } if (!_opcodeDef.HasParameters) { Opcode = new SingleByteOpcode(_opcodeDef); IsDone = true; } else { var mbo = new MultiByteOpcode(_opcodeDef); Opcode = mbo; if (_tmpOffset != null) { if (!_opcodeDef.d) { throw new InvalidOperationException( string.Format("Found a reversed d-offset parameter for opcode {0} but it does not have a d-parameter (true).", _opcodeDef.ToString())); } mbo.AddParameter(_tmpOffset); IsDone = mbo.ParameterCount == _opcodeDef.ParameterCount; } } } } else // parameters { var mbo = Opcode as MultiByteOpcode; if (mbo == null) { throw new InvalidOperationException("OpcodeBuilder already produced an Opcode -or- " + "you are adding parameters to a SingleCycleOpcode. Did you forget to call Clear?"); } int paramCount = _opcodeDef.ParameterCount; mbo.AddParameter(opcodeByte); if (mbo.ParameterCount > paramCount) { throw new InvalidOperationException("Too many parameters."); } IsDone = mbo.ParameterCount == paramCount; } return(Opcode != null); }
public MultiByteOpcode(OpcodeDefinition opcodeDef) { Definition = opcodeDef; }