示例#1
0
        public CpuInterrupt(Die die, OpcodeDefinition definition)
            : base(die)
        {
            if (definition == null)
            {
                throw new ArgumentNullException("definition");
            }

            _definition = definition;

            if (_definition.Instruction == null)
            {
                throw new InvalidOperationException(
                          "The Interrupt OpcodeDefinition has no associated Instruction: "
                          + definition.ToString());
            }

            _interrupt = (Interrupt)Activator.CreateInstance(
                _definition.Instruction, Die, _definition);
        }
示例#2
0
        internal static T Create <T>(CpuZ80 cpu, OpcodeDefinition opcodeDefinition)
            where T : Instruction
        {
            if (opcodeDefinition == null)
            {
                throw new ArgumentNullException("opcodeDefintion",
                                                "There is no OpcodeDefinition available.");
            }
            if (opcodeDefinition.Instruction == null)
            {
                throw new InvalidOperationException(
                          "The OpcodeDefinition has no associated Instruction: "
                          + opcodeDefinition.ToString());
            }
            if (!typeof(T).IsAssignableFrom(opcodeDefinition.Instruction))
            {
                throw Errors.AssignedToIllegalOpcode();
            }

            return((T)Activator.CreateInstance(opcodeDefinition.Instruction, cpu));
        }