diff --git a/platforms/shared/desktop/gui_debug_huc6280.cpp b/platforms/shared/desktop/gui_debug_huc6280.cpp index b35ba27..bced759 100644 --- a/platforms/shared/desktop/gui_debug_huc6280.cpp +++ b/platforms/shared/desktop/gui_debug_huc6280.cpp @@ -28,6 +28,11 @@ #include "emu.h" #include "utils.h" +static char mpr_name[16] = { }; +static char mpr_tooltip[128] = { }; + +static void get_bank_name(u8 mpr, u8 mpr_value, char *name, char* tooltip); + void gui_debug_window_huc6280(void) { ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 8.0f); @@ -94,41 +99,73 @@ void gui_debug_window_huc6280(void) ImGui::TextColored(violet, "MPR0"); ImGui::SameLine(); ImGui::Text(" $%02X", memory->GetMpr(0)); ImGui::Text(BYTE_TO_BINARY_PATTERN_SPACED, BYTE_TO_BINARY(memory->GetMpr(0))); + get_bank_name(0, memory->GetMpr(0), mpr_name, mpr_tooltip); + ImGui::TextColored(gray, "%s", mpr_name); + if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) + ImGui::SetTooltip("%s", mpr_tooltip); ImGui::TableNextColumn(); ImGui::TextColored(violet, "MPR1"); ImGui::SameLine(); ImGui::Text(" $%02X", memory->GetMpr(1)); ImGui::Text(BYTE_TO_BINARY_PATTERN_SPACED, BYTE_TO_BINARY(memory->GetMpr(1))); + get_bank_name(1, memory->GetMpr(1), mpr_name, mpr_tooltip); + ImGui::TextColored(gray, "%s", mpr_name); + if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) + ImGui::SetTooltip("%s", mpr_tooltip); ImGui::TableNextColumn(); ImGui::TextColored(violet, "MPR2"); ImGui::SameLine(); ImGui::Text(" $%02X", memory->GetMpr(2)); ImGui::Text(BYTE_TO_BINARY_PATTERN_SPACED, BYTE_TO_BINARY(memory->GetMpr(2))); + get_bank_name(2, memory->GetMpr(2), mpr_name, mpr_tooltip); + ImGui::TextColored(gray, "%s", mpr_name); + if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) + ImGui::SetTooltip("%s", mpr_tooltip); ImGui::TableNextColumn(); ImGui::TextColored(violet, "MPR3"); ImGui::SameLine(); ImGui::Text(" $%02X", memory->GetMpr(3)); ImGui::Text(BYTE_TO_BINARY_PATTERN_SPACED, BYTE_TO_BINARY(memory->GetMpr(3))); + get_bank_name(3, memory->GetMpr(3), mpr_name, mpr_tooltip); + ImGui::TextColored(gray, "%s", mpr_name); + if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) + ImGui::SetTooltip("%s", mpr_tooltip); ImGui::TableNextColumn(); ImGui::TextColored(violet, "MPR4"); ImGui::SameLine(); ImGui::Text(" $%02X", memory->GetMpr(4)); ImGui::Text(BYTE_TO_BINARY_PATTERN_SPACED, BYTE_TO_BINARY(memory->GetMpr(4))); + get_bank_name(4, memory->GetMpr(4), mpr_name, mpr_tooltip); + ImGui::TextColored(gray, " %s", mpr_name); + if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) + ImGui::SetTooltip("%s", mpr_tooltip); ImGui::TableNextColumn(); ImGui::TextColored(violet, "MPR5"); ImGui::SameLine(); ImGui::Text(" $%02X", memory->GetMpr(5)); ImGui::Text(BYTE_TO_BINARY_PATTERN_SPACED, BYTE_TO_BINARY(memory->GetMpr(5))); + get_bank_name(5, memory->GetMpr(5), mpr_name, mpr_tooltip); + ImGui::TextColored(gray, "%s", mpr_name); + if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) + ImGui::SetTooltip("%s", mpr_tooltip); ImGui::TableNextColumn(); ImGui::TextColored(violet, "MPR6"); ImGui::SameLine(); ImGui::Text(" $%02X", memory->GetMpr(6)); ImGui::Text(BYTE_TO_BINARY_PATTERN_SPACED, BYTE_TO_BINARY(memory->GetMpr(6))); + get_bank_name(6, memory->GetMpr(6), mpr_name, mpr_tooltip); + ImGui::TextColored(gray, " %s", mpr_name); + if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) + ImGui::SetTooltip("%s", mpr_tooltip); ImGui::TableNextColumn(); ImGui::TextColored(violet, "MPR7"); ImGui::SameLine(); ImGui::Text(" $%02X", memory->GetMpr(7)); ImGui::Text(BYTE_TO_BINARY_PATTERN_SPACED, BYTE_TO_BINARY(memory->GetMpr(7))); + get_bank_name(7, memory->GetMpr(7), mpr_name, mpr_tooltip); + ImGui::TextColored(gray, "%s", mpr_name); + if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) + ImGui::SetTooltip("%s", mpr_tooltip); ImGui::TableNextColumn(); ImGui::TextColored(red, "I/O "); ImGui::SameLine(); @@ -167,15 +204,18 @@ void gui_debug_window_huc6280(void) ImGui::PopStyleVar(); ImGui::TableNextColumn(); - ImGui::TextColored(*proc_state->NMI ? green : gray, " NMI"); ImGui::SameLine(); - ImGui::TextColored(*proc_state->TIMER_IRQ ? green : gray, "TIQ"); ImGui::SameLine(); - ImGui::TextColored(*proc_state->IRQ1 ? green : gray, "IRQ1"); ImGui::SameLine(); - ImGui::TextColored(*proc_state->IRQ2 ? green : gray, "IRQ2"); - ImGui::TextColored(white, " "); ImGui::SameLine(); - ImGui::TextColored(*proc_state->IDR & 0x04 ? red : green, "···"); ImGui::SameLine(); - ImGui::TextColored(*proc_state->IDR & 0x02 ? red : green, "····"); ImGui::SameLine(); - ImGui::TextColored(*proc_state->IDR & 0x01 ? red : green, "····"); + ImGui::TextColored(magenta, " IRQ1:"); ImGui::SameLine(); + ImGui::TextColored(*proc_state->IDR & 0x02 ? red : green, *proc_state->IDR & 0x02 ? "OFF" : "ON "); ImGui::SameLine(); + ImGui::TextColored(*proc_state->IRQ1 ? green : gray, "ACTIVE"); + + ImGui::TextColored(magenta, " IRQ2:"); ImGui::SameLine(); + ImGui::TextColored(*proc_state->IDR & 0x01 ? red : green, *proc_state->IDR & 0x01 ? "OFF" : "ON "); ImGui::SameLine(); + ImGui::TextColored(*proc_state->IRQ2 ? green : gray, "ACTIVE"); + + ImGui::TextColored(magenta, " TIQ: "); ImGui::SameLine(); + ImGui::TextColored(*proc_state->IDR & 0x04 ? red : green, *proc_state->IDR & 0x04 ? "OFF" : "ON "); ImGui::SameLine(); + ImGui::TextColored(*proc_state->TIMER_IRQ ? green : gray, "ACTIVE"); ImGui::TableNextColumn(); ImGui::TextColored(input->GetSel() ? orange : gray, " I/O SEL"); ImGui::SameLine(); @@ -185,13 +225,6 @@ void gui_debug_window_huc6280(void) ImGui::TextColored(!*proc_state->SPEED ? green : gray, " 1.79 MHz"); ImGui::SameLine(); ImGui::TextColored(*proc_state->SPEED ? green : gray, "7.16 MHz"); - // ImGui::TextColored(*proc_state->IFF1 ? green : gray, " IFF1"); ImGui::SameLine(); - // ImGui::TextColored(*proc_state->IFF2 ? green : gray, " IFF2"); ImGui::SameLine(); - // ImGui::TextColored(*proc_state->Halt ? green : gray, " HALT"); - - // ImGui::TextColored(*proc_state->INT ? green : gray, " INT"); ImGui::SameLine(); - // ImGui::TextColored(*proc_state->NMI ? green : gray, " NMI"); - ImGui::EndTable(); } @@ -200,3 +233,50 @@ void gui_debug_window_huc6280(void) ImGui::End(); ImGui::PopStyleVar(); } + +static void get_bank_name(u8 mpr, u8 mpr_value, char *name, char* tooltip) +{ + u16 cpu_address = mpr << 13; + + // 0x00 - 0x7F + if (mpr_value < 0x80) + { + u32 rom_address = mpr_value << 13; + snprintf(name, 16, "ROM $%02X", mpr_value); + snprintf(tooltip, 128, "Range (CPU) $%04X-$%04X \nRange (ROM) $%06X-$%06X", + cpu_address, cpu_address + 0x1FFF, rom_address, rom_address + 0x1FFF); + } + // 0x80 - 0xF6 + else if (mpr_value < 0xF7) + { + snprintf(name, 16, "UNUSED"); + snprintf(tooltip, 128, "Range (CPU) $%04X-$%04X", cpu_address, cpu_address + 0x1FFF); + } + // 0xF7 + else if (mpr_value < 0xF8) + { + snprintf(name, 16, "BRAM"); + snprintf(tooltip, 128, "Range (CPU) $%04X-$%04X", cpu_address, cpu_address + 0x1FFF); + } + // 0xF8 - 0xFB + else if (mpr_value < 0xFC) + { + u8 ram_bank = mpr_value - 0xF8; + u16 ram_address = ram_bank << 13; + snprintf(name, 16, "WRAM $%02X", ram_bank); + snprintf(tooltip, 128, "Range (CPU) $%04X-$%04X \nRange (WRAM) $%04X-$%04X", + cpu_address, cpu_address + 0x1FFF, ram_address, ram_address + 0x1FFF); + } + // 0xFC - 0xFE + else if (mpr_value < 0xFF) + { + snprintf(name, 16, "UNUSED"); + snprintf(tooltip, 128, "Range (CPU) $%04X-$%04X", cpu_address, cpu_address + 0x1FFF); + } + // 0xFF + else + { + snprintf(name, 16, "HARDWARE"); + snprintf(tooltip, 128, "Range (CPU) $%04X-$%04X", cpu_address, cpu_address + 0x1FFF); + } +}