Debugger: SNES - Fixed palette display for mode 0 layers in tilemap viewer

This commit is contained in:
Sour 2024-04-27 12:14:45 +09:00
parent 8cbaf3a6dc
commit d9f1d486a3
5 changed files with 15 additions and 8 deletions

View file

@ -151,6 +151,7 @@ struct DebugTilemapTileInfo
int32_t PaletteIndex = -1;
int32_t PaletteAddress = -1;
int32_t BasePaletteIndex = -1;
int32_t AttributeAddress = -1;
int16_t AttributeData = -1;

View file

@ -354,7 +354,7 @@ DebugTilemapTileInfo GbaPpuTools::GetTilemapTileInfo(uint32_t x, uint32_t y, uin
result.TileAddress = tileStart;
result.PixelData = pixelData;
result.PaletteIndex = paletteIndex;
result.PaletteAddress = paletteIndex << 4;
result.PaletteAddress = paletteIndex << 5;
result.HorizontalMirroring = hMirror;
result.VerticalMirroring = vMirror;
return result;
@ -460,6 +460,7 @@ void GbaPpuTools::GetSpriteInfo(DebugSpriteInfo& sprite, uint32_t* spritePreview
sprite.TileIndex = oam[addr + 4] | ((oam[addr + 5] & 0x03) << 8);
sprite.Priority = (DebugSpritePriority)((oam[addr + 5] >> 2) & 0x03);
sprite.Palette = bpp8Mode ? 0 : (oam[addr + 5] >> 4) & 0x0F;
sprite.PaletteAddress = bpp8Mode ? -1 : (sprite.Palette << 5);
static constexpr uint8_t sprSize[4][4][2] = {
{ { 8, 8 }, { 16, 8 }, { 8, 16 }, { 8, 8 } },

View file

@ -464,11 +464,6 @@ DebugTilemapTileInfo SnesPpuTools::GetTilemapTileInfo(uint32_t x, uint32_t y, ui
return result;
}
uint16_t basePaletteOffset = 0;
if(state.BgMode == 0) {
basePaletteOffset = options.Layer * 32;
}
uint32_t row;
uint32_t column;
@ -499,13 +494,18 @@ DebugTilemapTileInfo SnesPpuTools::GetTilemapTileInfo(uint32_t x, uint32_t y, ui
result.HorizontalMirroring = (NullableBoolean)((vram[addr + 1] & 0x40) != 0);
result.HighPriority = (NullableBoolean)((vram[addr + 1] & 0x20) != 0);
result.PaletteIndex = bpp == 8 ? 0 : (vram[addr + 1] >> 2) & 0x07;
if(state.BgMode == 0) {
result.BasePaletteIndex = result.PaletteIndex;
result.PaletteIndex += options.Layer * 8;
}
result.PaletteAddress = result.PaletteIndex * (1 << bpp);
result.TileIndex = ((vram[addr + 1] & 0x03) << 8) | vram[addr];
result.TileMapAddress = addr;
uint16_t tileStart = (layer.ChrAddress << 1) + result.TileIndex * 8 * bpp;
result.TileAddress = tileStart;
result.PaletteAddress = basePaletteOffset + (result.PaletteIndex * (1 << bpp));
}
result.Row = row;

View file

@ -606,7 +606,11 @@ namespace Mesen.Debugger.ViewModels
}
}
if(tileInfo.PaletteIndex >= 0) {
entries.AddEntry("Palette index", tileInfo.PaletteIndex.ToString());
if(tileInfo.BasePaletteIndex >= 0) {
entries.AddEntry("Palette index", $"{tileInfo.BasePaletteIndex} ({tileInfo.PaletteIndex})");
} else {
entries.AddEntry("Palette index", tileInfo.PaletteIndex.ToString());
}
}
if(tileInfo.PaletteAddress >= 0) {
entries.AddEntry("Palette address", "$" + tileInfo.PaletteAddress.ToString("X2"));

View file

@ -1097,6 +1097,7 @@ namespace Mesen.Interop
public Int32 PaletteIndex;
public Int32 PaletteAddress;
public Int32 BasePaletteIndex;
public Int32 AttributeAddress;
public Int16 AttributeData;