Debugger: Add SPC RAM to memory tools

This commit is contained in:
Sour 2019-03-22 21:38:31 -04:00
parent 66c457771c
commit 75a93f6993
8 changed files with 34 additions and 12 deletions

View file

@ -18,7 +18,8 @@ enum class SnesMemoryType
VideoRam,
SpriteRam,
CGRam,
Register
Register,
SpcRam,
};
struct AddressInfo

View file

@ -33,7 +33,7 @@ Debugger::Debugger(shared_ptr<Console> console)
_codeDataLogger.reset(new CodeDataLogger(console->GetCartridge()->DebugGetPrgRomSize()));
_disassembler.reset(new Disassembler(console, _codeDataLogger));
_traceLogger.reset(new TraceLogger(this, _console));
_memoryDumper.reset(new MemoryDumper(_ppu, _memoryManager, console->GetCartridge()));
_memoryDumper.reset(new MemoryDumper(_ppu, console->GetSpc(), _memoryManager, console->GetCartridge()));
_breakpointManager.reset(new BreakpointManager(this));
_ppuTools.reset(new PpuTools(_console.get(), _ppu.get()));
_eventManager.reset(new EventManager(this, _cpu.get(), _ppu.get()));

View file

@ -2,14 +2,16 @@
#include "Debugger.h"
#include "MemoryManager.h"
#include "Ppu.h"
#include "Spc.h"
#include "MemoryDumper.h"
#include "BaseCartridge.h"
#include "VideoDecoder.h"
#include "DebugTypes.h"
MemoryDumper::MemoryDumper(shared_ptr<Ppu> ppu, shared_ptr<MemoryManager> memoryManager, shared_ptr<BaseCartridge> cartridge)
MemoryDumper::MemoryDumper(shared_ptr<Ppu> ppu, shared_ptr<Spc> spc, shared_ptr<MemoryManager> memoryManager, shared_ptr<BaseCartridge> cartridge)
{
_ppu = ppu;
_spc = spc;
_memoryManager = memoryManager;
_cartridge = cartridge;
}
@ -30,6 +32,7 @@ void MemoryDumper::SetMemoryState(SnesMemoryType type, uint8_t *buffer, uint32_t
case SnesMemoryType::VideoRam: memcpy(_ppu->GetVideoRam(), buffer, length); break;
case SnesMemoryType::SpriteRam: memcpy(_ppu->GetSpriteRam(), buffer, length); break;
case SnesMemoryType::CGRam: memcpy(_ppu->GetCgRam(), buffer, length); break;
case SnesMemoryType::SpcRam: memcpy(_spc->GetSpcRam(), buffer, length); break;
}
}
@ -43,6 +46,7 @@ uint32_t MemoryDumper::GetMemorySize(SnesMemoryType type)
case SnesMemoryType::VideoRam: return Ppu::VideoRamSize;
case SnesMemoryType::SpriteRam: return Ppu::SpriteRamSize;
case SnesMemoryType::CGRam: return Ppu::CgRamSize;
case SnesMemoryType::SpcRam: return Spc::SpcRamSize;
}
return 0;
}
@ -62,6 +66,7 @@ void MemoryDumper::GetMemoryState(SnesMemoryType type, uint8_t *buffer)
case SnesMemoryType::VideoRam: memcpy(buffer, _ppu->GetVideoRam(), Ppu::VideoRamSize); break;
case SnesMemoryType::SpriteRam: memcpy(buffer, _ppu->GetSpriteRam(), Ppu::SpriteRamSize); break;
case SnesMemoryType::CGRam: memcpy(buffer, _ppu->GetCgRam(), Ppu::CgRamSize); break;
case SnesMemoryType::SpcRam: memcpy(buffer, _spc->GetSpcRam(), Spc::SpcRamSize); break;
}
}
@ -85,9 +90,10 @@ void MemoryDumper::SetMemoryValue(SnesMemoryType memoryType, uint32_t address, u
case SnesMemoryType::WorkRam: _memoryManager->DebugGetWorkRam()[address] = value; break;
case SnesMemoryType::SaveRam: _cartridge->DebugGetSaveRam()[address] = value; break;
case SnesMemoryType::VideoRam: _ppu->GetVideoRam()[address & (Ppu::VideoRamSize - 1)] = value;
case SnesMemoryType::SpriteRam: _ppu->GetSpriteRam()[address % Ppu::SpriteRamSize] = value; break;
case SnesMemoryType::CGRam: _ppu->GetCgRam()[address & (Ppu::CgRamSize - 1)] = value; break;
case SnesMemoryType::VideoRam: _ppu->GetVideoRam()[address] = value;
case SnesMemoryType::SpriteRam: _ppu->GetSpriteRam()[address] = value; break;
case SnesMemoryType::CGRam: _ppu->GetCgRam()[address] = value; break;
case SnesMemoryType::SpcRam: _spc->GetSpcRam()[address] = value; break;
}
}
@ -104,9 +110,10 @@ uint8_t MemoryDumper::GetMemoryValue(SnesMemoryType memoryType, uint32_t address
case SnesMemoryType::WorkRam: return _memoryManager->DebugGetWorkRam()[address];
case SnesMemoryType::SaveRam: return _cartridge->DebugGetSaveRam()[address];
case SnesMemoryType::VideoRam: return _ppu->GetVideoRam()[address & (Ppu::VideoRamSize - 1)];
case SnesMemoryType::SpriteRam: return _ppu->GetSpriteRam()[address % Ppu::SpriteRamSize];
case SnesMemoryType::CGRam: return _ppu->GetCgRam()[address & (Ppu::CgRamSize - 1)];
case SnesMemoryType::VideoRam: return _ppu->GetVideoRam()[address];
case SnesMemoryType::SpriteRam: return _ppu->GetSpriteRam()[address];
case SnesMemoryType::CGRam: return _ppu->GetCgRam()[address];
case SnesMemoryType::SpcRam: return _spc->GetSpcRam()[address];
}
return 0;

View file

@ -6,17 +6,19 @@
class MemoryManager;
class BaseCartridge;
class Ppu;
class Spc;
enum class SnesMemoryType;
class MemoryDumper
{
private:
shared_ptr<Ppu> _ppu;
shared_ptr<Spc> _spc;
shared_ptr<MemoryManager> _memoryManager;
shared_ptr<BaseCartridge> _cartridge;
public:
MemoryDumper(shared_ptr<Ppu> ppu, shared_ptr<MemoryManager> memoryManager, shared_ptr<BaseCartridge> cartridge);
MemoryDumper(shared_ptr<Ppu> ppu, shared_ptr<Spc> spc, shared_ptr<MemoryManager> memoryManager, shared_ptr<BaseCartridge> cartridge);
uint32_t GetMemorySize(SnesMemoryType type);
void GetMemoryState(SnesMemoryType type, uint8_t *buffer);

View file

@ -213,6 +213,11 @@ void Spc::ProcessEndFrame()
_dsp->set_output(_soundBuffer, Spc::SampleBufferSize >> 1);
}
uint8_t* Spc::GetSpcRam()
{
return _ram;
}
void Spc::Serialize(Serializer &s)
{
s.Stream(_state.A, _state.Cycle, _state.PC, _state.PS, _state.SP, _state.X, _state.Y);

View file

@ -10,9 +10,11 @@ class SPC_DSP;
class Spc : public ISerializable
{
public:
static constexpr int SpcRamSize = 0x10000;
private:
static constexpr int SampleBufferSize = 0x100000;
static constexpr int SpcRamSize = 0x10000;
static constexpr uint16_t ResetVector = 0xFFFE;
shared_ptr<Console> _console;
@ -243,5 +245,7 @@ public:
void ProcessEndFrame();
uint8_t* GetSpcRam();
void Serialize(Serializer &s) override;
};

View file

@ -156,7 +156,8 @@ namespace Mesen.GUI.Debugger
cboMemoryType.Items.Add(ResourceHelper.GetEnumText(SnesMemoryType.VideoRam));
cboMemoryType.Items.Add(ResourceHelper.GetEnumText(SnesMemoryType.CGRam));
cboMemoryType.Items.Add(ResourceHelper.GetEnumText(SnesMemoryType.SpriteRam));
cboMemoryType.Items.Add("-");
cboMemoryType.Items.Add(ResourceHelper.GetEnumText(SnesMemoryType.SpcRam));
cboMemoryType.SelectedIndex = 0;
cboMemoryType.SetEnumValue(originalValue);

View file

@ -118,6 +118,8 @@ namespace Mesen.GUI
VideoRam,
SpriteRam,
CGRam,
Register,
SpcRam
}
public class AddressInfo