Exemple #1
0
        private void ctxMenu_Opening(object sender, CancelEventArgs e)
        {
            int  baseAddress = _bottomBank ? 0x1000 : 0x0000;
            bool ppuMemory   = this.cboChrSelection.SelectedIndex == 0;

            if (this.cboChrSelection.SelectedIndex > 1)
            {
                baseAddress += (this.cboChrSelection.SelectedIndex - 1) * 0x2000;
            }

            int tileIndex = GetLargeSpriteIndex(_tileIndex);

            bool          isChrRam = InteropEmu.DebugGetMemorySize(DebugMemoryType.ChrRom) == 0;
            StringBuilder sb       = new StringBuilder();

            if (isChrRam)
            {
                for (int i = 0; i < 16; i++)
                {
                    sb.Append(InteropEmu.DebugGetMemoryValue(ppuMemory ? DebugMemoryType.PpuMemory : DebugMemoryType.ChrRom, (UInt32)(baseAddress + tileIndex * 16 + i)).ToString("X2"));
                }
            }
            else
            {
                int absoluteTileIndex = ppuMemory ? InteropEmu.DebugGetAbsoluteChrAddress((uint)(baseAddress + tileIndex * 16)) / 16 : (baseAddress / 16 + tileIndex);
                sb.Append(absoluteTileIndex.ToString());
            }
            sb.Append(",");
            for (int i = 0; i < 4; i++)
            {
                sb.Append(InteropEmu.DebugGetMemoryValue(DebugMemoryType.PaletteMemory, (uint)(this._selectedPalette * 4 + i)).ToString("X2"));
            }

            _copyData = sb.ToString();
        }
Exemple #2
0
        private void ctxMenu_Opening(object sender, CancelEventArgs e)
        {
            if (_selectedSprite < 0)
            {
                _contextMenuSpriteIndex = -1;
                return;
            }

            _contextMenuSpriteIndex = _selectedSprite;

            int ramAddr   = _selectedSprite * 4;
            int spriteY   = _spriteRam[ramAddr];
            int tileIndex = _spriteRam[ramAddr + 1];
            int palette   = (_spriteRam[ramAddr + 2] & 0x03) + 4;
            int spriteX   = _spriteRam[ramAddr + 3];

            int tileAddr;

            if (_largeSprites)
            {
                tileAddr = ((tileIndex & 0x01) == 0x01 ? 0x1000 : 0x0000) + ((tileIndex & 0xFE) << 4);
            }
            else
            {
                tileAddr = _spritePatternAddr + (tileIndex << 4);
            }

            bool          isChrRam = InteropEmu.DebugGetMemorySize(DebugMemoryType.ChrRom) == 0;
            StringBuilder sb       = new StringBuilder();

            if (isChrRam)
            {
                for (int i = 0; i < 16; i++)
                {
                    sb.Append(InteropEmu.DebugGetMemoryValue(DebugMemoryType.PpuMemory, (UInt32)(tileAddr + i)).ToString("X2"));
                }
            }
            else
            {
                int absoluteTileIndex = InteropEmu.DebugGetAbsoluteChrAddress((uint)tileAddr) / 16;
                sb.Append(absoluteTileIndex.ToString());
            }
            sb.Append(",FF");
            for (int i = 1; i < 4; i++)
            {
                sb.Append(InteropEmu.DebugGetMemoryValue(DebugMemoryType.PaletteMemory, (uint)(palette * 4 + i)).ToString("X2"));
            }

            _copyData = sb.ToString();
        }
Exemple #3
0
        public void RefreshData()
        {
            //Data needed for HD Pack copy
            bool isChrRam = InteropEmu.DebugGetMemorySize(DebugMemoryType.ChrRom) == 0;

            if (isChrRam)
            {
                _ppuMemory = InteropEmu.DebugGetMemoryState(DebugMemoryType.PpuMemory);
            }
            else
            {
                for (int i = 0; i < 512; i++)
                {
                    _absoluteTileIndexes[i] = InteropEmu.DebugGetAbsoluteChrAddress((uint)i * 16) / 16;
                }
            }
            _paletteRam = InteropEmu.DebugGetMemoryState(DebugMemoryType.PaletteMemory);
        }
        private string ToHdPackFormat(int spriteIndex)
        {
            int ramAddr   = spriteIndex * 4;
            int spriteY   = _spriteRam[ramAddr];
            int tileIndex = _spriteRam[ramAddr + 1];
            int palette   = (_spriteRam[ramAddr + 2] & 0x03) + 4;
            int spriteX   = _spriteRam[ramAddr + 3];

            int tileAddr;

            if (_largeSprites)
            {
                tileAddr = ((tileIndex & 0x01) == 0x01 ? 0x1000 : 0x0000) + ((tileIndex & 0xFE) << 4);
            }
            else
            {
                tileAddr = _spritePatternAddr + (tileIndex << 4);
            }

            bool          isChrRam = InteropEmu.DebugGetMemorySize(DebugMemoryType.ChrRom) == 0;
            StringBuilder sb       = new StringBuilder();

            if (isChrRam)
            {
                for (int i = 0; i < 16; i++)
                {
                    sb.Append(InteropEmu.DebugGetMemoryValue(DebugMemoryType.PpuMemory, (UInt32)(tileAddr + i)).ToString("X2"));
                }
            }
            else
            {
                int absoluteTileIndex = InteropEmu.DebugGetAbsoluteChrAddress((uint)tileAddr) / 16;
                sb.Append(absoluteTileIndex.ToString());
            }
            sb.Append(",FF");
            for (int i = 1; i < 4; i++)
            {
                sb.Append(InteropEmu.DebugGetMemoryValue(DebugMemoryType.PaletteMemory, (uint)(palette * 4 + i)).ToString("X2"));
            }

            return(sb.ToString());
        }
Exemple #5
0
        private string ToHdPackFormat(int nametableIndex, int nametableTileIndex)
        {
            int x = nametableTileIndex % 32;
            int y = nametableTileIndex / 32;

            int        baseAddress     = 0x2000 + _nametableIndex * 0x400;
            int        tileIndex       = _tileData[_nametableIndex][nametableTileIndex];
            int        attributeData   = _attributeData[_nametableIndex][nametableTileIndex];
            int        shift           = (x & 0x02) | ((y & 0x02) << 1);
            int        paletteBaseAddr = ((attributeData >> shift) & 0x03) << 2;
            DebugState state           = new DebugState();

            InteropEmu.DebugGetState(ref state);
            int bgAddr   = state.PPU.ControlFlags.BackgroundPatternAddr;
            int tileAddr = bgAddr + tileIndex * 16;

            bool          isChrRam = InteropEmu.DebugGetMemorySize(DebugMemoryType.ChrRom) == 0;
            StringBuilder sb       = new StringBuilder();

            if (isChrRam)
            {
                for (int i = 0; i < 16; i++)
                {
                    sb.Append(InteropEmu.DebugGetMemoryValue(DebugMemoryType.PpuMemory, (uint)(tileAddr + i)).ToString("X2"));
                }
            }
            else
            {
                int absoluteTileIndex = InteropEmu.DebugGetAbsoluteChrAddress((uint)tileAddr) / 16;
                sb.Append(absoluteTileIndex.ToString());
            }
            sb.Append(",");
            for (int i = 0; i < 4; i++)
            {
                sb.Append(InteropEmu.DebugGetMemoryValue(DebugMemoryType.PaletteMemory, (uint)(paletteBaseAddr + i)).ToString("X2"));
            }
            return(sb.ToString());
        }
Exemple #6
0
        public void RefreshData()
        {
            //Data needed for HD Pack copy
            bool isChrRam = InteropEmu.DebugGetMemorySize(DebugMemoryType.ChrRom) == 0;

            if (isChrRam)
            {
                _ppuMemory = InteropEmu.DebugGetMemoryState(DebugMemoryType.PpuMemory);
            }
            else
            {
                for (int i = 0; i < 512; i++)
                {
                    _absoluteTileIndexes[i] = InteropEmu.DebugGetAbsoluteChrAddress((uint)i * 16) / 16;
                }
            }
            _paletteRam = InteropEmu.DebugGetMemoryState(DebugMemoryType.PaletteMemory);

            for (int i = 4; i < 4 * 8; i += 4)
            {
                //Override color 0 in each palette with the background color
                _paletteRam[i] = _paletteRam[0];
            }
        }
Exemple #7
0
        private void ctxMenu_Opening(object sender, CancelEventArgs e)
        {
            int        baseAddress     = 0x2000 + _nametableIndex * 0x400;
            int        tileIndex       = _tileData[_nametableIndex][_tileY * 32 + _tileX];
            int        attributeData   = _attributeData[_nametableIndex][_tileY * 32 + _tileX];
            int        shift           = (_tileX & 0x02) | ((_tileY & 0x02) << 1);
            int        paletteBaseAddr = ((attributeData >> shift) & 0x03) << 2;
            DebugState state           = new DebugState();

            InteropEmu.DebugGetState(ref state);
            int bgAddr   = state.PPU.ControlFlags.BackgroundPatternAddr;
            int tileAddr = bgAddr + tileIndex * 16;

            bool          isChrRam = InteropEmu.DebugGetMemorySize(DebugMemoryType.ChrRom) == 0;
            StringBuilder sb       = new StringBuilder();

            if (isChrRam)
            {
                for (int i = 0; i < 16; i++)
                {
                    sb.Append(InteropEmu.DebugGetMemoryValue(DebugMemoryType.PpuMemory, (uint)(tileAddr + i)).ToString("X2"));
                }
            }
            else
            {
                int absoluteTileIndex = InteropEmu.DebugGetAbsoluteChrAddress((uint)tileAddr) / 16;
                sb.Append(absoluteTileIndex.ToString());
            }
            sb.Append(",");
            for (int i = 0; i < 4; i++)
            {
                sb.Append(InteropEmu.DebugGetMemoryValue(DebugMemoryType.PaletteMemory, (uint)(paletteBaseAddr + i)).ToString("X2"));
            }

            _copyData = sb.ToString();
        }