Esempio n. 1
0
        private void ShowInChrViewer()
        {
            int tileIndex     = _tileData[_nametableIndex][_tileY * 32 + _tileX];
            int attributeData = _attributeData[_nametableIndex][_tileY * 32 + _tileX];
            int shift         = (_tileX & 0x02) | ((_tileY & 0x02) << 1);
            int paletteIndex  = ((attributeData >> shift) & 0x03);

            DebugState state = new DebugState();

            InteropEmu.DebugGetState(ref state);
            int tileIndexOffset = state.PPU.ControlFlags.BackgroundPatternAddr == 0x1000 ? 256 : 0;

            OnSelectChrTile?.Invoke(tileIndex + tileIndexOffset, paletteIndex);
        }
Esempio n. 2
0
        private void ShowInChrViewer()
        {
            int tileIndex     = _tileData[_nametableIndex][_tileY * 32 + _tileX];
            int attributeData = _attributeData[_nametableIndex][_tileY * 32 + _tileX];
            int shift         = (_tileX & 0x02) | ((_tileY & 0x02) << 1);
            int paletteIndex  = ((attributeData >> shift) & 0x03);

            DebugState state = new DebugState();

            InteropEmu.DebugGetState(ref state);
            int tileIndexOffset = state.PPU.ControlFlags.BackgroundPatternAddr == 0x1000 ? 256 : 0;

            if (!InteropEmu.DebugIsExecutionStopped() || ConfigManager.Config.DebugInfo.PpuRefreshOnBreak)
            {
                //Only change the palette if execution is not stopped (or if we're configured to refresh the viewer on break/pause)
                //Otherwise, the CHR viewer will refresh its data (and it might not match the data we loaded at the specified scanline/cycle anymore)
                _chrViewer.SelectedPaletteIndex = paletteIndex;
            }
            _chrViewer.SelectedTileIndex = tileIndex + tileIndexOffset;
            OnSelectChrTile?.Invoke(null, EventArgs.Empty);
        }