public void Reset() { _additionalReadCycles = 1; _additionalWriteCycles = 2; _read = null; _write = null; }
public void Reset() { _inputCycle.Reset(); _destinationWriter = null; _repeatCycles.Reset(); _remainingM1Cycles = 1; }
public void StartExecution() { var addrMode = new RegIndirectWide(_cpu, WideRegister.SP, false); _read = addrMode.Reader; _write = addrMode.Writer; }
public void Clock() { if (!_addressMode.IsComplete) { _addressMode.Clock(); if (_addressMode.IsComplete) { _valueReader = _addressMode.Reader; _valueWriter = _addressMode.Writer; if (_valueReader.IsComplete) { PerformDecrement(); } } return; } if (!_valueReader.IsComplete) { _valueReader.Clock(); if (_valueReader.IsComplete) { PerformDecrement(); } return; } if (!_valueWriter.IsComplete) { _valueWriter.Clock(); } }
public void Clock() { if (!_addressMode.IsComplete) { _addressMode.Clock(); if (_addressMode.IsComplete) { _reader = _addressMode.Reader; _writer = _addressMode.Writer; } return; } if (!_reader.IsComplete) { _reader.Clock(); if (_reader.IsComplete) { DoRotate(); } return; } if (!_writer.IsComplete) { _writer.Clock(); } }
public void Reset() { _readCycle = null; _writeCycle = null; _additionalCycles = 2; _additionalRepeatCycles = 5; IsComplete = false; }
public virtual void Reset() { _sourceAddressMode.Reset(); _destinationAddressMode.Reset(); _sourceReader = null; _destinationWriter = null; _remainingM1Cycles = _additionalM1TCycles; }
public void StartExecution() { if (_addressMode.IsComplete) { _reader = _addressMode.Reader; _writer = _addressMode.Writer; if (_reader.IsComplete) { ManipulateBit(); } } }
public void StartExecution() { if (_addressMode.IsComplete) { _valueReader = _addressMode.Reader; _valueWriter = _addressMode.Writer; if (_valueReader.IsComplete) { PerformDecrement(); } } }
public void StartExecution() { if (_addressMode.IsComplete) { _reader = _addressMode.Reader; _writer = _addressMode.Writer; if (_reader.IsComplete) { DoRotate(); } } }
public virtual void Clock() { if (_remainingM1Cycles-- <= 0) { // Destination is checked first as its operand comes first if there are // additional bytes to the instruction. if (!_destinationAddressMode.IsComplete) { _destinationAddressMode.Clock(); if (_destinationAddressMode.IsComplete) { _destinationWriter = _destinationAddressMode.Writer; if (_sourceReader?.IsComplete ?? false) { _destinationWriter.AddressedValue = _sourceReader.AddressedValue; } } return; } if (!_sourceAddressMode.IsComplete) { _sourceAddressMode.Clock(); if (_sourceAddressMode.IsComplete) { _sourceReader = _sourceAddressMode.Reader; if (_sourceReader.IsComplete) { _destinationWriter.AddressedValue = _sourceReader.AddressedValue; } } return; } if (!_sourceReader.IsComplete) { _sourceReader.Clock(); if (_sourceReader.IsComplete) { _destinationWriter.AddressedValue = _sourceReader.AddressedValue; } return; } if (!_destinationWriter.IsComplete) { _destinationWriter.Clock(); } } }
public void Clock() { if (!_reader.IsComplete) { _reader.Clock(); return; } if (!_internalCycle.IsComplete) { _internalCycle.Clock(); if (_internalCycle.IsComplete) { var originalAccBits = _cpu.A & 0x0f; var newAccBits = 0; var shiftedValue = 0; if (_isLeftShift) { newAccBits = (_reader.AddressedValue & 0xf0) >> 4; shiftedValue = _reader.AddressedValue << 4; } else { newAccBits = _reader.AddressedValue & 0x0f; originalAccBits = originalAccBits << 4; shiftedValue = _reader.AddressedValue >> 4; } var newPointedValue = (shiftedValue & 0xff) | originalAccBits; _writer = _addressMode.Writer; _writer.AddressedValue = (byte)newPointedValue; _cpu.A = (byte)((_cpu.A & 0xf0) | newAccBits); // Set the flags Z80Flags.HalfCarry_H.SetOrReset(_cpu, false); Z80Flags.AddSubtract_N.SetOrReset(_cpu, false); Z80Flags.ParityOverflow_PV.SetOrReset(_cpu, _cpu.A.IsEvenParity()); Z80Flags.Sign_S.SetOrReset(_cpu, _cpu.A >= 0x80); Z80Flags.Zero_Z.SetOrReset(_cpu, _cpu.A == 0); } return; } if (!_writer.IsComplete) { _writer.Clock(); } }
public void Clock() { if (_remainingM1Cycles-- <= 0) { if (_remainingM1Cycles == -1) { _inputCycle.Address = (ushort)(_cpu.B << 8 | _cpu.C); } if (!_inputCycle.IsComplete) { _inputCycle.Clock(); if (_inputCycle.IsComplete) { _destinationWriter = _destination.Writer; _destinationWriter.AddressedValue = _inputCycle.LatchedData; } return; } if (!_destinationWriter.IsComplete) { _destinationWriter.Clock(); if (_destinationWriter.IsComplete) { var hlValue = WideRegister.HL.GetValue(_cpu); hlValue = (ushort)(_increment ? hlValue + 1 : hlValue - 1); WideRegister.HL.SetValueOnProcessor(_cpu, hlValue); Register.B.SetValueOnProcessor(_cpu, (byte)(_cpu.B - 1)); var input = _inputCycle.LatchedData; Z80Flags.Zero_Z.SetOrReset(_cpu, _cpu.B == 0); Z80Flags.AddSubtract_N.SetOrReset(_cpu, true); } return; } if (!_repeatCycles.IsComplete) { _repeatCycles.Clock(); if (_repeatCycles.IsComplete) { _cpu.PC -= 2; } } } }
public virtual void StartExecution() { if (_sourceAddressMode.IsComplete) { _sourceReader = _sourceAddressMode.Reader; } if (_destinationAddressMode.IsComplete) { _destinationWriter = _destinationAddressMode.Writer; } if ((_sourceReader?.IsComplete ?? false) && (_destinationAddressMode?.IsComplete ?? false)) { _destinationWriter.AddressedValue = _sourceAddressMode.Reader.AddressedValue; if (_setsFlags) { Z80Flags.Zero_Z.SetOrReset(_cpu, _cpu.A == 0); Z80Flags.Sign_S.SetOrReset(_cpu, (_cpu.A & 0x8000) == 0x8000); Z80Flags.ParityOverflow_PV.SetOrReset(_cpu, _cpu.IFF2); Z80Flags.HalfCarry_H.SetOrReset(_cpu, false); Z80Flags.AddSubtract_N.SetOrReset(_cpu, false); } } }
public void Reset() { _addressMode.Reset(); _valueReader = null; _valueWriter = null; }
public void StartExecution() { _readCycle = new RegIndirect(_cpu, WideRegister.HL).Reader; _writeCycle = new RegIndirect(_cpu, WideRegister.DE).Writer; }
public void Reset() { _addressMode.Reset(); _reader = null; _writer = null; }
public void Reset() { _reader = _addressMode.Reader; _internalCycle.Reset(); _writer = null; }