private void JumpIfRequired() { if (_reader.IsComplete && !_requiresConditionalInternalCycle && _condition.ShouldJump(_cpu)) { _cpu.PC = _reader.AddressedValue; IsComplete = true; } else if (_reader.IsComplete && _requiresConditionalInternalCycle && !_condition.ShouldJump(_cpu)) { IsComplete = true; } else if (_reader.IsComplete && !_requiresConditionalInternalCycle) { IsComplete = true; } }
private void SetupPushOrComplete() { if (_reader.IsComplete) { if (_jumpCondition.ShouldJump(_cpu)) { _pushInstruction = new PUSH(_cpu, WideRegister.PC, additionalM1TCycles: 0); _pushInstruction.StartExecution(); } else { IsComplete = true; } } }
public override void Clock() { if (_condition.ShouldJump(_cpu)) { if (_remainingM1Cycles-- <= 0) { base.Clock(); if (base.IsComplete) { _isComplete = true; } } } else { _isComplete = true; } }