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(); }
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(); }
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()); }
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()); }
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]; } }
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(); }