Exemplo n.º 1
0
 public InstructionPendingEventArgs(Operations.IOperationUnit operationUnit, Word instruction, int programCounter, SerialAbacus16Cpu cpu)
 {
     OperationUnit  = operationUnit;
     Instruction    = instruction;
     ProgramCounter = programCounter;
     Cpu            = cpu;
 }
Exemplo n.º 2
0
        /// <summary>
        /// Parses the upcoming instruction and selects the appropriate OperationUnit from <see cref="OperationRegistry"/>
        /// Note that parameters for the executed instruction are obtained at this point in time.
        /// </summary>
        /// <seealso cref="Operations.IOperationUnit"/>
        protected virtual void InstructionDecode()
        {
            var opCode = (byte)(CurrentInstruction.UnsignedValue >> Word.Size - InstructionLength);

            Operations.IOperationUnit unit;
            if (OperationRegistry.TryGetValue(opCode, out unit))
            {
                unit.Reset();

                unit.Decode(CurrentInstruction);

                OperationUnit = unit;
            }
            else
            {
                throw new UnknownInstructionException();
            }
        }