Debugger: Add SPC RAM to memory tools
This commit is contained in:
parent
66c457771c
commit
75a93f6993
8 changed files with 34 additions and 12 deletions
|
@ -18,7 +18,8 @@ enum class SnesMemoryType
|
|||
VideoRam,
|
||||
SpriteRam,
|
||||
CGRam,
|
||||
Register
|
||||
Register,
|
||||
SpcRam,
|
||||
};
|
||||
|
||||
struct AddressInfo
|
||||
|
|
|
@ -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()));
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
};
|
|
@ -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);
|
||||
|
|
|
@ -118,6 +118,8 @@ namespace Mesen.GUI
|
|||
VideoRam,
|
||||
SpriteRam,
|
||||
CGRam,
|
||||
Register,
|
||||
SpcRam
|
||||
}
|
||||
|
||||
public class AddressInfo
|
||||
|
|
Loading…
Add table
Reference in a new issue