func (this *Decoder) decodeInstruction(op *operation.Operation) (*instruction.Instruction, error) { startCycles := this.Processor().Cycles() // Do decode once a data instruction is received instruction, err := this.Processor().InstructionsSet().GetInstructionFromBytes(op.Word()) if err != nil { return nil, errors.New(fmt.Sprintf("Failed decoding instruction %#04X. %s]", op.Word(), err.Error())) } logger.Collect(" => [DE%d][%03d]: %#04X = %s, %s", this.Index(), op.Id(), op.Word(), instruction.Info.ToString(), instruction.Data.ToString()) // Wait cycles of a decode stage this.Processor().Wait(consts.DECODE_CYCLES) // Log event if this.IsActive() { this.Processor().LogEvent(consts.DECODE_EVENT, this.Index(), op.Id(), startCycles) } return instruction, nil }