public InstructionPendingEventArgs(Operations.IOperationUnit operationUnit, Word instruction, int programCounter, SerialAbacus16Cpu cpu) { OperationUnit = operationUnit; Instruction = instruction; ProgramCounter = programCounter; Cpu = cpu; }
/// <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(); } }