Add register info to emu ui, table view for mem space

This commit is contained in:
scawful
2024-04-24 15:41:20 -04:00
parent 96fbe066ab
commit f6e610814d
2 changed files with 63 additions and 20 deletions

View File

@@ -52,15 +52,15 @@ void Emulator::Run() {
static bool loaded = false; static bool loaded = false;
if (!snes_.running() && rom()->is_loaded()) { if (!snes_.running() && rom()->is_loaded()) {
ppu_texture_ = ppu_texture_ =
SDL_CreateTexture(rom()->renderer().get(), SDL_PIXELFORMAT_RGBX8888, SDL_CreateTexture(rom()->renderer().get(), SDL_PIXELFORMAT_ARGB8888,
SDL_TEXTUREACCESS_STREAMING, 512, 480); SDL_TEXTUREACCESS_STREAMING, 512, 480);
if (ppu_texture_ == NULL) { if (ppu_texture_ == NULL) {
printf("Failed to create texture: %s\n", SDL_GetError()); printf("Failed to create texture: %s\n", SDL_GetError());
return; return;
} }
snes_.Init(*rom()); snes_.Init(*rom());
wanted_frames_ = 1.0 / (snes_.Memory().pal_timing() ? 50.0 : 60.0); wanted_frames_ = 1.0 / 60.0;
wanted_samples_ = 48000 / (snes_.Memory().pal_timing() ? 50 : 60); wanted_samples_ = 48000 /60;
loaded = true; loaded = true;
countFreq = SDL_GetPerformanceFrequency(); countFreq = SDL_GetPerformanceFrequency();
@@ -83,6 +83,9 @@ void Emulator::Run() {
timeAdder -= wanted_frames_; timeAdder -= wanted_frames_;
if (loaded) { if (loaded) {
if (turbo_mode_) {
snes_.RunFrame();
}
snes_.RunFrame(); snes_.RunFrame();
snes_.SetSamples(audio_buffer_, wanted_samples_); snes_.SetSamples(audio_buffer_, wanted_samples_);
@@ -168,7 +171,7 @@ void Emulator::RenderNavBar() {
if (ImGui::Button(ICON_MD_REFRESH)) { if (ImGui::Button(ICON_MD_REFRESH)) {
// Reset Emulator logic // Reset Emulator logic
snes_.Reset(); snes_.Reset(true);
} }
if (ImGui::IsItemHovered()) { if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Reset Emulator"); ImGui::SetTooltip("Reset Emulator");
@@ -218,6 +221,9 @@ void Emulator::RenderNavBar() {
SameLine(); SameLine();
ImGui::Checkbox("Logging", snes_.cpu().mutable_log_instructions()); ImGui::Checkbox("Logging", snes_.cpu().mutable_log_instructions());
SameLine();
ImGui::Checkbox("Turbo", &turbo_mode_);
static bool show_memory_viewer = false; static bool show_memory_viewer = false;
SameLine(); SameLine();
@@ -299,15 +305,16 @@ void Emulator::RenderBreakpointList() {
} }
void Emulator::RenderMemoryViewer() { void Emulator::RenderMemoryViewer() {
static MemoryEditor ram_edit;
static MemoryEditor aram_edit;
static MemoryEditor mem_edit; static MemoryEditor mem_edit;
if (ImGui::Button("RAM")) {
mem_edit.GotoAddrAndHighlight(0x7E0000, 0x7E0001);
}
if (ImGui::BeginTable("MemoryViewerTable", 2, if (ImGui::BeginTable("MemoryViewerTable", 4,
ImGuiTableFlags_Resizable | ImGuiTableFlags_ScrollY)) { ImGuiTableFlags_Resizable | ImGuiTableFlags_ScrollY)) {
ImGui::TableSetupColumn("Bookmarks"); ImGui::TableSetupColumn("Bookmarks");
ImGui::TableSetupColumn("Memory"); ImGui::TableSetupColumn("RAM");
ImGui::TableSetupColumn("ARAM");
ImGui::TableSetupColumn("ROM");
ImGui::TableHeadersRow(); ImGui::TableHeadersRow();
TableNextColumn(); TableNextColumn();
@@ -348,8 +355,33 @@ void Emulator::RenderMemoryViewer() {
} }
TableNextColumn(); TableNextColumn();
mem_edit.DrawContents((void*)snes_.Memory().rom_.data(), if (ImGui::BeginChild("RAM", ImVec2(0, 0), true,
snes_.Memory().rom_.size()); ImGuiWindowFlags_NoMove |
ImGuiWindowFlags_NoScrollbar |
ImGuiWindowFlags_NoScrollWithMouse)) {
ram_edit.DrawContents((void*)snes_.get_ram(), 0x20000);
ImGui::EndChild();
}
TableNextColumn();
if (ImGui::BeginChild("ARAM", ImVec2(0, 0), true,
ImGuiWindowFlags_NoMove |
ImGuiWindowFlags_NoScrollbar |
ImGuiWindowFlags_NoScrollWithMouse)) {
aram_edit.DrawContents((void*)snes_.apu().ram.data(),
snes_.apu().ram.size());
ImGui::EndChild();
}
TableNextColumn();
if (ImGui::BeginChild("ROM", ImVec2(0, 0), true,
ImGuiWindowFlags_NoMove |
ImGuiWindowFlags_NoScrollbar |
ImGuiWindowFlags_NoScrollWithMouse)) {
mem_edit.DrawContents((void*)snes_.Memory().rom_.data(),
snes_.Memory().rom_.size());
ImGui::EndChild();
}
ImGui::EndTable(); ImGui::EndTable();
} }

View File

@@ -44,7 +44,9 @@ class Emulator : public SharedRom {
Text text="Y: 0x%04X" data="cpu.Y", Text text="Y: 0x%04X" data="cpu.Y",
Text text="PB: 0x%02X" data="cpu.PB", Text text="PB: 0x%02X" data="cpu.PB",
Text text="PC: 0x%04X" data="cpu.PC", Text text="PC: 0x%04X" data="cpu.PC",
Text text="E: %d" data="cpu.E" Text text="PS: 0x%02X" data="cpu.status",
Text text="SP: 0x%02X" data="cpu.SP",
Text text="Cycle: %d" data="snes.cycle_count",
} }
} }
} }
@@ -68,14 +70,22 @@ class Emulator : public SharedRom {
} }
)"; )";
const std::map<std::string, void*> data_bindings = { const std::map<std::string, void*> data_bindings = {
{"cpu.A", &snes_.cpu().A}, {"cpu.D", &snes_.cpu().D}, {"cpu.A", &snes_.cpu().A},
{"cpu.X", &snes_.cpu().X}, {"cpu.DB", &snes_.cpu().DB}, {"cpu.D", &snes_.cpu().D},
{"cpu.Y", &snes_.cpu().Y}, {"cpu.PB", &snes_.cpu().PB}, {"cpu.X", &snes_.cpu().X},
{"cpu.PC", &snes_.cpu().PC}, {"cpu.E", &snes_.cpu().E}, {"cpu.DB", &snes_.cpu().DB},
{"spc.A", &snes_.apu().spc700().A}, {"spc.X", &snes_.apu().spc700().X}, {"cpu.Y", &snes_.cpu().Y},
{"spc.Y", &snes_.apu().spc700().Y}, {"spc.PC", &snes_.apu().spc700().PC}, {"cpu.PB", &snes_.cpu().PB},
{"spc.SP", &snes_.apu().spc700().SP}, {"cpu.PC", &snes_.cpu().PC},
{"spc.PSW", &snes_.apu().spc700().PSW}}; {"cpu.status", &snes_.cpu().status},
{"snes.cycle_count", &snes_.mutable_cycles()},
{"cpu.SP", &snes_.Memory().mutable_sp()},
{"spc.A", &snes_.apu().spc700().A},
{"spc.X", &snes_.apu().spc700().X},
{"spc.Y", &snes_.apu().spc700().Y},
{"spc.PC", &snes_.apu().spc700().PC},
{"spc.SP", &snes_.apu().spc700().SP},
{"spc.PSW", &snes_.apu().spc700().PSW}};
emulator_node_ = gui::zeml::Parse(emulator_layout, data_bindings); emulator_node_ = gui::zeml::Parse(emulator_layout, data_bindings);
Bind(emulator_node_.GetNode("CpuInstructionLog"), Bind(emulator_node_.GetNode("CpuInstructionLog"),
[&]() { RenderCpuInstructionLog(snes_.cpu().instruction_log_); }); [&]() { RenderCpuInstructionLog(snes_.cpu().instruction_log_); });
@@ -114,6 +124,7 @@ class Emulator : public SharedRom {
bool power_ = false; bool power_ = false;
bool loading_ = false; bool loading_ = false;
bool running_ = false; bool running_ = false;
bool turbo_mode_ = false;
float wanted_frames_; float wanted_frames_;
int wanted_samples_; int wanted_samples_;