diff --git a/src/engine/dispatch.h b/src/engine/dispatch.h index 1bfad7e3d..7808806ab 100644 --- a/src/engine/dispatch.h +++ b/src/engine/dispatch.h @@ -460,6 +460,7 @@ struct DivMemoryEntry { struct DivMemoryComposition { std::vector entries; + String name; size_t capacity; size_t used; }; diff --git a/src/engine/platform/snes.cpp b/src/engine/platform/snes.cpp index cf1143c7f..ef1068c3f 100644 --- a/src/engine/platform/snes.cpp +++ b/src/engine/platform/snes.cpp @@ -940,11 +940,19 @@ bool DivPlatformSNES::isSampleLoaded(int index, int sample) { return sampleLoaded[sample]; } +const DivMemoryComposition* DivPlatformSNES::getMemCompo(int index) { + if (index!=0) return NULL; + return &memCompo; +} + void DivPlatformSNES::renderSamples(int sysID) { memset(copyOfSampleMem,0,65536); memset(sampleOff,0,256*sizeof(unsigned int)); memset(sampleLoaded,0,256*sizeof(bool)); + memCompo=DivMemoryComposition(); + memCompo.name="SPC/DSP Memory"; + // skip past sample table and wavetable buffer size_t memPos=sampleTableBase+8*4+8*9*16; for (int i=0; isong.sampleLen; i++) { diff --git a/src/engine/platform/snes.h b/src/engine/platform/snes.h index 315f5a89b..a2eea2853 100644 --- a/src/engine/platform/snes.h +++ b/src/engine/platform/snes.h @@ -91,6 +91,7 @@ class DivPlatformSNES: public DivDispatch { size_t sampleMemLen; unsigned int sampleOff[256]; bool sampleLoaded[256]; + DivMemoryComposition memCompo; unsigned char regPool[0x80]; SPC_DSP dsp; friend void putDispatchChan(void*,int,int); @@ -123,6 +124,7 @@ class DivPlatformSNES: public DivDispatch { size_t getSampleMemCapacity(int index = 0); size_t getSampleMemUsage(int index = 0); bool isSampleLoaded(int index, int sample); + const DivMemoryComposition* getMemCompo(int index); void renderSamples(int chipID); int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); void quit(); diff --git a/src/gui/memory.cpp b/src/gui/memory.cpp index 84e3a2e0e..bf5dd09a2 100644 --- a/src/gui/memory.cpp +++ b/src/gui/memory.cpp @@ -29,7 +29,15 @@ void FurnaceGUI::drawMemory() { } if (!memoryOpen) return; if (ImGui::Begin("Memory Composition",&memoryOpen,globalWinFlags)) { - ImGui::Text("Contents here..."); + for (int i=0; isong.systemLen; i++) { + DivDispatch* dispatch=e->getDispatch(i); + for (int j=0; j<4; j++) { + const DivMemoryComposition* mc=dispatch->getMemCompo(j); + if (mc==NULL) break; + + ImGui::Text("%s: %s",e->getSystemName(e->song.system[i]),mc->name.c_str()); + } + } } if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_MEMORY; ImGui::End();