Exemplo n.º 1
0
        public void StartExecution()
        {
            var addrMode = new RegIndirectWide(_cpu, WideRegister.SP, false);

            _read  = addrMode.Reader;
            _write = addrMode.Writer;
        }
Exemplo n.º 2
0
 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();
     }
 }
Exemplo n.º 3
0
        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();
            }
        }
Exemplo n.º 4
0
 public void Clock()
 {
     if (!_addressMode.IsComplete)
     {
         _addressMode.Clock();
         if (_addressMode.IsComplete)
         {
             _reader = _addressMode.Reader;
             if (_reader.IsComplete)
             {
                 ManipulateBit();
             }
         }
         return;
     }
     if (!_reader.IsComplete)
     {
         _reader.Clock();
         if (_reader.IsComplete)
         {
             ManipulateBit();
         }
         return;
     }
     if (!_writer.IsComplete)
     {
         _writer.Clock();
     }
 }
Exemplo n.º 5
0
 public void Clock()
 {
     if (!_addressMode.IsComplete)
     {
         _addressMode.Clock();
         if (_addressMode.IsComplete)
         {
             _reader = _addressMode.Reader;
         }
         return;
     }
     if (!_reader.IsComplete)
     {
         _reader.Clock();
         SetupPushOrComplete();
         return;
     }
     if (!_internalCycle.IsComplete)
     {
         _internalCycle.Clock();
         return;
     }
     if (!_pushInstruction.IsComplete)
     {
         _pushInstruction.Clock();
         if (_pushInstruction.IsComplete)
         {
             _cpu.PC    = _reader.AddressedValue;
             IsComplete = true;
         }
         return;
     }
 }
Exemplo n.º 6
0
 public void Reset()
 {
     IsComplete = false;
     _addressMode.Reset();
     _reader          = null;
     _pushInstruction = null;
 }
Exemplo n.º 7
0
 public void Reset()
 {
     _sourceReader = new RegIndirect(_cpu, WideRegister.HL).Reader;
     _outputCycle.Reset();
     _repeatCycles.Reset();
     _remainingM1Cycles = 1;
 }
Exemplo n.º 8
0
        public void Clock()
        {
            if (_remainingM1Cycles-- <= 0)
            {
                if (!_addressMode.IsComplete)
                {
                    _addressMode.Clock();
                    if (_addressMode.IsComplete)
                    {
                        _reader = _addressMode.Reader;
                        JumpIfRequired();
                    }
                    return;
                }
                if (!_reader.IsComplete)
                {
                    _reader.Clock();
                    JumpIfRequired();
                    return;
                }

                if (!_internalCycle.IsComplete)
                {
                    _internalCycle.Clock();
                    if (_internalCycle.IsComplete)
                    {
                        _cpu.PC    = _reader.AddressedValue;
                        IsComplete = true;
                    }
                }
            }
        }
Exemplo n.º 9
0
 public void Reset()
 {
     _additionalReadCycles  = 1;
     _additionalWriteCycles = 2;
     _read  = null;
     _write = null;
 }
Exemplo n.º 10
0
 public void Reset()
 {
     _readCycle              = null;
     _additionalCycles       = 5;
     _additionalRepeatCycles = 5;
     IsComplete              = false;
 }
Exemplo n.º 11
0
 public virtual void Reset()
 {
     _sourceAddressMode.Reset();
     _destinationAddressMode.Reset();
     _sourceReader      = null;
     _destinationWriter = null;
     _remainingM1Cycles = _additionalM1TCycles;
 }
Exemplo n.º 12
0
 public void StartExecution()
 {
     if (_addressMode.IsComplete)
     {
         _reader = _addressMode.Reader;
         SetupPushOrComplete();
     }
 }
Exemplo n.º 13
0
 public void StartExecution()
 {
     if (_addressMode.IsComplete)
     {
         _reader = _addressMode.Reader;
         JumpIfRequired();
     }
 }
Exemplo n.º 14
0
 public void Reset()
 {
     _addressMode.Reset();
     _reader = null;
     _internalCycle.Reset();
     IsComplete         = false;
     _remainingM1Cycles = _additionalM1TCycles;
 }
Exemplo n.º 15
0
 public OUT(Z80Cpu cpu, IReadAddressedOperand <byte> destination, Register source, Register topHalfOfAddressSource)
 {
     _cpu                    = cpu;
     _destination            = destination;
     _source                 = source;
     _outputCycle            = new OutputCycle(cpu);
     _topHalfOfAddressSource = topHalfOfAddressSource;
 }
Exemplo n.º 16
0
Arquivo: IN.cs Projeto: dolbz/Z80Sharp
 public IN(Z80Cpu cpu, Register destination, IReadAddressedOperand <byte> source, Register topHalfOfAddressSource)
 {
     _cpu                    = cpu;
     _destination            = destination;
     _source                 = source;
     _inputCycle             = new InputCycle(cpu);
     _topHalfOfAddressSource = topHalfOfAddressSource;
 }
Exemplo n.º 17
0
 public OUTxx(Z80Cpu cpu, bool increment, bool repeats)
 {
     _cpu               = cpu;
     _outputCycle       = new OutputCycle(cpu);
     _sourceReader      = new RegIndirect(cpu, WideRegister.HL).Reader;
     _repeatCycles      = new InternalCycle(5);
     _remainingM1Cycles = 1;
     _increment         = increment;
     _repeats           = repeats;
 }
Exemplo n.º 18
0
 public void StartExecution()
 {
     if (_addressMode.IsComplete)
     {
         _readOperand = _addressMode.Reader;
         if (_readOperand.IsComplete)
         {
             PerformAND();
         }
     }
 }
Exemplo n.º 19
0
 public void StartExecution()
 {
     if (_addressMode.IsComplete)
     {
         _reader = _addressMode.Reader;
         if (_reader.IsComplete)
         {
             PerformBitTest();
         }
     }
 }
Exemplo n.º 20
0
 public void StartExecution()
 {
     if (_addressMode.IsComplete)
     {
         _valueReader = _addressMode.Reader;
         _valueWriter = _addressMode.Writer;
         if (_valueReader.IsComplete)
         {
             PerformDecrement();
         }
     }
 }
Exemplo n.º 21
0
        public void StartExecution()
        {
            if (_addressMode.IsComplete)
            {
                _valueReader = _addressMode.Reader;

                if (_valueReader.IsComplete)
                {
                    PerformAdd();
                }
            }
        }
Exemplo n.º 22
0
 public void StartExecution()
 {
     if (_addressMode.IsComplete)
     {
         _reader = _addressMode.Reader;
         _writer = _addressMode.Writer;
         if (_reader.IsComplete)
         {
             DoRotate();
         }
     }
 }
Exemplo n.º 23
0
 public void StartExecution()
 {
     if (_addressMode.IsComplete)
     {
         _reader = _addressMode.Reader;
         _writer = _addressMode.Writer;
         if (_reader.IsComplete)
         {
             ManipulateBit();
         }
     }
 }
Exemplo n.º 24
0
        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();
                }
            }
        }
Exemplo n.º 25
0
 public void Clock()
 {
     if (!_addressMode.IsComplete)
     {
         _addressMode.Clock();
         if (_addressMode.IsComplete)
         {
             _reader = _addressMode.Reader;
             if (_reader.IsComplete)
             {
                 PerformBitTest();
             }
         }
         return;
     }
     if (!_reader.IsComplete)
     {
         _reader.Clock();
         if (_reader.IsComplete)
         {
             PerformBitTest();
         }
     }
 }
Exemplo n.º 26
0
 public void Clock()
 {
     if (!_addressMode.IsComplete)
     {
         _addressMode.Clock();
         if (_addressMode.IsComplete)
         {
             _valueReader = _addressMode.Reader;
             if (_valueReader.IsComplete)
             {
                 PerformAdd();
             }
         }
         return;
     }
     if (!_valueReader.IsComplete)
     {
         _valueReader.Clock();
         if (_valueReader.IsComplete)
         {
             PerformAdd();
         }
     }
 }
Exemplo n.º 27
0
 public void Clock()
 {
     if (!_addressMode.IsComplete)
     {
         _addressMode.Clock();
         if (_addressMode.IsComplete)
         {
             _readOperand = _addressMode.Reader;
             if (_readOperand.IsComplete)
             {
                 PerformSubtraction();
             }
         }
         return;
     }
     if (!_readOperand.IsComplete)
     {
         _readOperand.Clock();
         if (_readOperand.IsComplete)
         {
             PerformSubtraction();
         }
     }
 }
Exemplo n.º 28
0
        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);
                }
            }
        }
Exemplo n.º 29
0
 public void StartExecution()
 {
     _readCycle  = new RegIndirect(_cpu, WideRegister.HL).Reader;
     _writeCycle = new RegIndirect(_cpu, WideRegister.DE).Writer;
 }
Exemplo n.º 30
0
 public void Reset()
 {
     _addressMode.Reset();
     _reader = null;
     _writer = null;
 }