67 lines
1.8 KiB
C#
67 lines
1.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Mesen.GUI.Debugger
|
|
{
|
|
public class HdPackCopyHelper
|
|
{
|
|
private byte[] _ppuMemory = new byte[0];
|
|
private int[] _absoluteTileIndexes = new int[512];
|
|
private byte[] _paletteRam = new byte[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);
|
|
}
|
|
|
|
public string ToHdPackFormat(int tileAddr, int palette, bool forSprite, bool isAbsoluteAddress)
|
|
{
|
|
bool isChrRam = InteropEmu.DebugGetMemorySize(DebugMemoryType.ChrRom) == 0;
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
if(isAbsoluteAddress) {
|
|
if(isChrRam) {
|
|
for(int i = 0; i < 16; i++) {
|
|
sb.Append(InteropEmu.DebugGetMemoryValue(DebugMemoryType.ChrRam, (uint)(tileAddr + i)).ToString("X2"));
|
|
}
|
|
} else {
|
|
sb.Append((tileAddr / 16).ToString());
|
|
}
|
|
} else {
|
|
if(isChrRam) {
|
|
for(int i = 0; i < 16; i++) {
|
|
sb.Append(_ppuMemory[tileAddr + i].ToString("X2"));
|
|
}
|
|
} else {
|
|
sb.Append(_absoluteTileIndexes[tileAddr / 16].ToString("X2"));
|
|
}
|
|
}
|
|
|
|
if(forSprite) {
|
|
sb.Append(",FF");
|
|
for(int i = 1; i < 4; i++) {
|
|
sb.Append(_paletteRam[palette * 4 + i].ToString("X2"));
|
|
}
|
|
} else {
|
|
sb.Append(",");
|
|
for(int i = 0; i < 4; i++) {
|
|
sb.Append(_paletteRam[palette * 4 + i].ToString("X2"));
|
|
}
|
|
}
|
|
|
|
return sb.ToString();
|
|
}
|
|
}
|
|
}
|