Exemplo n.º 1
0
        private void UpdateMemoryViews()
        {
            StaticByteProvider chrRamBp       = new StaticByteProvider(_chrRamData);
            StaticByteProvider nametableRamBp = new StaticByteProvider(_nametableRamData);
            StaticByteProvider paletteBp      = new StaticByteProvider(_paletteData);
            StaticByteProvider spriteBp       = new StaticByteProvider(_spriteData);
            StaticByteProvider cpuRamBp       = new StaticByteProvider(_cpuRamData);
            StaticByteProvider prgRamBp       = new StaticByteProvider(_prgRamData);

            hexChrRam.ByteProvider       = chrRamBp;
            hexNametableRam.ByteProvider = nametableRamBp;
            hexPaletteRam.ByteProvider   = paletteBp;
            hexSpriteRam.ByteProvider    = spriteBp;
            hexCpuRam.ByteProvider       = cpuRamBp;
            hexPrgRam.ByteProvider       = prgRamBp;

            chrRamBp.ByteChanged       += (index, e) => { _chrRamChanged = true; };
            nametableRamBp.ByteChanged += (index, e) => { _nametableRamChanged = true; };
            spriteBp.ByteChanged       += (index, e) => { _spriteRamChanged = true; };
            cpuRamBp.ByteChanged       += (index, e) => { _cpuRamChanged = true; };
            prgRamBp.ByteChanged       += (index, e) => { _prgRamChanged = true; };
            paletteBp.ByteChanged      += (index, e) => {
                //Mirror palette writes
                int i = (int)index;
                if (i == 0x10 || i == 0x14 || i == 0x18 || i == 0x1C)
                {
                    paletteBp.WriteByte(i - 0x10, paletteBp.Bytes[i]);
                }
                else if (i == 0x00 || i == 0x04 || i == 0x08 || i == 0x0C)
                {
                    paletteBp.WriteByte(i + 0x10, paletteBp.Bytes[i]);
                }
                _paletteRamChanged = true;
            };
        }
Exemplo n.º 2
0
        public void SetData(byte[] data)
        {
            if (data != null)
            {
                bool changed = true;
                if (this._byteProvider != null && data.Length == this._byteProvider.Bytes.Count)
                {
                    changed = false;
                    for (int i = 0; i < this._byteProvider.Bytes.Count; i++)
                    {
                        if (this._byteProvider.Bytes[i] != data[i])
                        {
                            changed = true;
                            break;
                        }
                    }
                }

                if (changed)
                {
                    bool needInit = _byteProvider == null;
                    _byteProvider              = new StaticByteProvider(data);
                    _byteProvider.ByteChanged += (int byteIndex, byte newValue, byte oldValue) => {
                        ByteChanged?.Invoke(byteIndex, newValue, oldValue);
                    };

                    this.ctrlHexBox.ByteProvider = _byteProvider;

                    if (needInit)
                    {
                        InitializeContextMenu?.Invoke(this.ctrlHexBox, EventArgs.Empty);
                    }
                }
            }
        }
Exemplo n.º 3
0
        public void RefreshData(DebugMemoryType memoryType)
        {
            if (_memoryType != memoryType)
            {
                _memoryType   = memoryType;
                _byteProvider = null;
            }

            byte[] data = InteropEmu.DebugGetMemoryState(this._memoryType);

            if (data != null)
            {
                bool changed = true;
                if (this._byteProvider != null && data.Length == this._byteProvider.Bytes.Count)
                {
                    changed = false;
                    for (int i = 0; i < this._byteProvider.Bytes.Count; i++)
                    {
                        if (this._byteProvider.Bytes[i] != data[i])
                        {
                            changed = true;
                            break;
                        }
                    }
                }

                if (changed)
                {
                    if (_byteProvider == null || _byteProvider.Length != data.Length)
                    {
                        _byteProvider              = new StaticByteProvider(data);
                        _byteProvider.ByteChanged += (int byteIndex, byte newValue, byte oldValue) => {
                            InteropEmu.DebugSetMemoryValue(_memoryType, (UInt32)byteIndex, newValue);
                        };
                        _byteProvider.BytesChanged += (int byteIndex, byte[] values) => {
                            InteropEmu.DebugSetMemoryValues(_memoryType, (UInt32)byteIndex, values);
                        };
                        this.ctrlHexBox.ByteProvider = _byteProvider;
                    }
                    else
                    {
                        _byteProvider.SetData(data);
                    }
                    this.ctrlHexBox.Refresh();
                }
            }
        }