public override void Execute(string[] lines, TheCpu cpu) { cpu.PC = cpu.Stack.Pop(); cpu.OnPropertyChanged(cpu.PropertyName(() => cpu.Stack)); cpu.ZERO = cpu.PRESERVED_ZERO; cpu.CARRY = cpu.PRESERVED_CARRY; cpu.INTERRUPT_ENABLE = false; }
protected override void ExecuteInternal(TheCpu cpu, bool value) { if (value) { cpu.PC = cpu.Stack.Pop() + 1; cpu.OnPropertyChanged(cpu.PropertyName(() => cpu.Stack)); } else { cpu.PC++; } }
protected override void ExecuteInternal(string address, TheCpu cpu, bool value) { if (value) { cpu.Stack.Push(cpu.PC); cpu.OnPropertyChanged(cpu.PropertyName(() => cpu.Stack)); var addressValue = cpu.GetAddress(address); cpu.PC = addressValue; if (cpu.Stack.Count > 31) { throw new ArgumentException("Препълване на стекът"); } } else { cpu.PC++; } }