diff --git a/src/gui/gui.cc b/src/gui/gui.cc index 189a5ff62..ec9a1867a 100644 --- a/src/gui/gui.cc +++ b/src/gui/gui.cc @@ -1454,6 +1454,7 @@ in Configuration->Emulation, restart PCSX-Redux, then try again.)")); ImGui::EndMenu(); } if (ImGui::BeginMenu(_("Misc hardware"))) { + ImGui::MenuItem(_("Show HW Registers"), nullptr, &m_hwRegs.m_show); ImGui::MenuItem(_("Show SIO1 debug"), nullptr, &m_sio1.m_show); ImGui::EndMenu(); } @@ -1665,7 +1666,7 @@ in Configuration->Emulation, restart PCSX-Redux, then try again.)")); } if (m_registers.m_show) { - m_registers.draw(this, &g_emulator->m_cpu->m_regs, g_emulator->m_mem.get(), _("Registers")); + m_registers.draw(this, &g_emulator->m_cpu->m_regs, _("Registers")); } if (m_assembly.m_show) { @@ -1713,6 +1714,10 @@ in Configuration->Emulation, restart PCSX-Redux, then try again.)")); changed |= m_pioCart.draw(_("PIO Cartridge Configuration")); } + if (m_hwRegs.m_show) { + m_hwRegs.draw(this, g_emulator->m_mem.get(), _("HW Registers")); + } + if (m_sio1.m_show) { m_sio1.draw(this, &PCSX::g_emulator->m_sio1->m_regs, _("SIO1 Debug")); } diff --git a/src/gui/gui.h b/src/gui/gui.h index 88b39ebcf..368602bad 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -45,6 +45,7 @@ #include "gui/widgets/filedialog.h" #include "gui/widgets/gpulogger.h" #include "gui/widgets/handlers.h" +#include "gui/widgets/hwregs.h" #include "gui/widgets/isobrowser.h" #include "gui/widgets/kernellog.h" #include "gui/widgets/log.h" @@ -113,6 +114,7 @@ class GUI final : public UI { typedef Setting ShowSIO1; typedef Setting ShowIsoBrowser; typedef Setting ShowGPULogger; + typedef Setting ShowHWRegs; typedef Setting WindowPosX; typedef Setting WindowPosY; typedef Setting WindowSizeX; @@ -157,7 +159,7 @@ class GUI final : public UI { ShowCLUTVRAMViewer, ShowVRAMViewer1, ShowVRAMViewer2, ShowVRAMViewer3, ShowVRAMViewer4, ShowMemoryObserver, ShowTypedDebugger, ShowPatches, ShowMemcardManager, ShowRegisters, ShowAssembly, ShowDisassembly, ShowBreakpoints, ShowNamedSaveStates, ShowEvents, ShowHandlers, ShowKernelLog, ShowCallstacks, ShowSIO1, - ShowIsoBrowser, ShowGPULogger, MainFontSize, MonoFontSize, GUITheme, AllowMouseCaptureToggle, + ShowIsoBrowser, ShowGPULogger, ShowHWRegs, MainFontSize, MonoFontSize, GUITheme, AllowMouseCaptureToggle, EnableRawMouseMotion, WidescreenRatio, ShowPIOCartConfig, ShowMemoryEditor1, ShowMemoryEditor2, ShowMemoryEditor3, ShowMemoryEditor4, ShowMemoryEditor5, ShowMemoryEditor6, ShowMemoryEditor7, ShowMemoryEditor8, ShowParallelPortEditor, ShowScratchpadEditor, ShowHWRegsEditor, ShowBiosEditor, @@ -403,6 +405,7 @@ class GUI final : public UI { Widgets::SIO1 m_sio1 = {settings.get().value}; Widgets::GPULogger m_gpuLogger{settings.get().value}; + Widgets::HWRegs m_hwRegs{settings.get().value}; EventBus::Listener m_listener; diff --git a/src/gui/widgets/hwregs.cc b/src/gui/widgets/hwregs.cc new file mode 100644 index 000000000..5e595ee5b --- /dev/null +++ b/src/gui/widgets/hwregs.cc @@ -0,0 +1,328 @@ +/*************************************************************************** + * Copyright (C) 2026 PCSX-Redux authors * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * + ***************************************************************************/ + +#include "gui/widgets/hwregs.h" + +#include "core/psxemulator.h" +#include "core/psxmem.h" +#include "fmt/format.h" +#include "gui/gui.h" +#include "imgui.h" + +static constexpr std::string_view irqName(unsigned n) { + switch (n) { + case 0: + return "VBLANK"; + case 1: + return "GPU"; + case 2: + return "CDROM"; + case 3: + return "DMA"; + case 4: + return "TIMER0"; + case 5: + return "TIMER1"; + case 6: + return "TIMER2"; + case 7: + return "CONTROLLER"; + case 8: + return "SIO"; + case 9: + return "SPU"; + case 10: + return "PIO"; + default: + return "UNKNOWN"; + } +} + +static constexpr std::string_view dmaName(unsigned n) { + switch (n) { + case 0: + return "MDECin"; + case 1: + return "MDECout"; + case 2: + return "GPU"; + case 3: + return "CDROM"; + case 4: + return "SPU"; + case 5: + return "PIO"; + case 6: + return "OTC"; + default: + return "UNKNOWN"; + } +} + +static constexpr const char* dmaSyncMode(unsigned mode) { + switch (mode) { + case 0: + return "Burst"; + case 1: + return "Slice"; + case 2: + return "Linked-list"; + case 3: + return "Reserved"; + default: + return "?"; + } +} + +static constexpr const char* timerClockSource(unsigned timer, unsigned src) { + if (timer == 0) { + switch (src & 1) { + case 0: + return "System clock"; + case 1: + return "Dot clock"; + } + } else if (timer == 1) { + switch (src & 1) { + case 0: + return "System clock"; + case 1: + return "HBlank"; + } + } else { + switch (src & 1) { + case 0: + return "System clock"; + case 1: + return "System clock / 8"; + } + } + return "?"; +} + +static uint32_t readHWReg32(PCSX::Memory* memory, uint16_t offset) { + uint32_t* ptr = (uint32_t*)&memory->m_hard[offset]; + return *ptr; +} + +void PCSX::Widgets::HWRegs::draw(PCSX::GUI* gui, PCSX::Memory* memory, const char* title) { + ImGui::SetNextWindowPos(ImVec2(60, 60), ImGuiCond_FirstUseEver); + ImGui::SetNextWindowSize(ImVec2(420, 600), ImGuiCond_FirstUseEver); + if (!ImGui::Begin(title, &m_show)) { + ImGui::End(); + return; + } + + gui->useMonoFont(); + + // IRQ registers + { + uint32_t istat = readHWReg32(memory, Memory::ISTAT); + uint32_t imask = readHWReg32(memory, Memory::IMASK); + std::string istatStr = fmt::format("I_STAT: {:08x}###ISTAT", istat); + if (ImGui::CollapsingHeader(istatStr.c_str())) { + ImGui::Indent(); + for (unsigned i = 0; i < 11; i++) { + bool enabled = istat & (1 << i); + std::string label = fmt::format("{}##istat{}", irqName(i), i); + if (ImGui::Checkbox(label.c_str(), &enabled)) { + uint32_t bit = 1 << i; + istat = enabled ? (istat | bit) : (istat & ~bit); + memory->writeHardwareRegister(istat); + } + } + ImGui::Unindent(); + } + std::string imaskStr = fmt::format("I_MASK: {:08x}###IMASK", imask); + if (ImGui::CollapsingHeader(imaskStr.c_str())) { + ImGui::Indent(); + for (unsigned i = 0; i < 11; i++) { + bool enabled = imask & (1 << i); + std::string label = fmt::format("{}##imask{}", irqName(i), i); + if (ImGui::Checkbox(label.c_str(), &enabled)) { + uint32_t bit = 1 << i; + imask = enabled ? (imask | bit) : (imask & ~bit); + memory->writeHardwareRegister(imask); + } + } + ImGui::Unindent(); + } + } + + ImGui::Separator(); + + // DMA registers + { + uint32_t dpcr = readHWReg32(memory, Memory::DMA_PCR); + std::string dpcrStr = fmt::format("DPCR: {:08x}###DPCR", dpcr); + if (ImGui::CollapsingHeader(dpcrStr.c_str())) { + ImGui::Indent(); + for (unsigned i = 0; i < 7; i++) { + unsigned priority = (dpcr >> (i * 4)) & 0x7; + bool enabled = (dpcr >> (i * 4 + 3)) & 0x1; + ImGui::Text("%7s: pri=%u", dmaName(i).data(), priority); + ImGui::SameLine(); + std::string checkboxStr = fmt::format("En###dpcr_en{}", i); + if (ImGui::Checkbox(checkboxStr.c_str(), &enabled)) { + uint32_t bit = 1 << (i * 4 + 3); + dpcr = enabled ? (dpcr | bit) : (dpcr & ~bit); + memory->writeHardwareRegister(dpcr); + } + } + ImGui::Text(" CPU: pri=%u", (dpcr >> 28) & 0x7); + ImGui::Unindent(); + } + + uint32_t dicr = readHWReg32(memory, Memory::DMA_ICR); + std::string dicrStr = fmt::format("DICR: {:08x}###DICR", dicr); + if (ImGui::CollapsingHeader(dicrStr.c_str())) { + ImGui::Indent(); + bool busError = (dicr >> 15) & 1; + ImGui::Checkbox(_("Bus Error###dicr_buserr"), &busError); + bool masterEnable = (dicr >> 23) & 1; + ImGui::Checkbox(_("Master IRQ Enable###dicr_master_en"), &masterEnable); + bool masterFlag = (dicr >> 31) & 1; + ImGui::Checkbox(_("Master IRQ Flag###dicr_master_flag"), &masterFlag); + for (unsigned i = 0; i < 7; i++) { + std::string nodeStr = fmt::format("{}###dicr_ch{}", dmaName(i), i); + if (ImGui::TreeNode(nodeStr.c_str())) { + bool completion = (dicr >> i) & 1; + ImGui::Checkbox(_("Completion###dicr_comp"), &completion); + bool mask = (dicr >> (i + 16)) & 1; + ImGui::Checkbox(_("IRQ Enable###dicr_irq_en"), &mask); + bool triggered = (dicr >> (i + 24)) & 1; + ImGui::Checkbox(_("Triggered###dicr_trig"), &triggered); + ImGui::TreePop(); + } + } + ImGui::Unindent(); + } + + // Per-channel DMA registers + for (unsigned ch = 0; ch < 7; ch++) { + uint16_t base = Memory::DMA_BASE + ch * 0x10; + uint32_t madr = readHWReg32(memory, base + Memory::DMA_MADR); + uint32_t bcr = readHWReg32(memory, base + Memory::DMA_BCR); + uint32_t chcr = readHWReg32(memory, base + Memory::DMA_CHCR); + + std::string chStr = + fmt::format("DMA{} {}: MADR={:06x} BCR={:08x} CHCR={:08x}###dma_ch{}", ch, dmaName(ch), madr & 0xffffff, bcr, chcr, ch); + if (ImGui::CollapsingHeader(chStr.c_str())) { + ImGui::Indent(); + ImGui::Text("MADR: %08x (addr=%06x)", madr, madr & 0x1ffffc); + uint16_t blockSize = bcr & 0xffff; + uint16_t blockCount = (bcr >> 16) & 0xffff; + ImGui::Text("BCR : %08x (size=%u, count=%u, total=%u words)", bcr, blockSize, blockCount, + blockSize * (blockCount ? blockCount : 1)); + bool active = (chcr >> 24) & 1; + bool trigger = (chcr >> 28) & 1; + unsigned direction = chcr & 1; + unsigned step = (chcr >> 1) & 1; + unsigned syncMode = (chcr >> 9) & 3; + ImGui::Text("CHCR: %08x", chcr); + ImGui::Text(" Direction : %s", direction ? "From RAM" : "To RAM"); + ImGui::Text(" Step : %s", step ? "Backward (-4)" : "Forward (+4)"); + ImGui::Text(" Sync mode : %s (%u)", dmaSyncMode(syncMode), syncMode); + ImGui::Text(" Active : %s", active ? "Yes" : "No"); + ImGui::Text(" Trigger : %s", trigger ? "Yes" : "No"); + ImGui::Unindent(); + } + } + } + + ImGui::Separator(); + + // Timer registers + { + for (unsigned t = 0; t < 3; t++) { + uint16_t base = 0x1100 + t * 0x10; + uint32_t count = readHWReg32(memory, base); + uint32_t mode = readHWReg32(memory, base + 4); + uint32_t target = readHWReg32(memory, base + 8); + + std::string timerStr = + fmt::format("Timer {}: count={:04x} mode={:04x} target={:04x}###timer{}", t, count & 0xffff, mode & 0xffff, target & 0xffff, t); + if (ImGui::CollapsingHeader(timerStr.c_str())) { + ImGui::Indent(); + ImGui::Text("Count : %04x (%u)", count & 0xffff, count & 0xffff); + ImGui::Text("Target: %04x (%u)", target & 0xffff, target & 0xffff); + ImGui::Text("Mode : %04x", mode & 0xffff); + bool syncEnable = mode & 1; + unsigned syncMode = (mode >> 1) & 3; + bool resetOnTarget = (mode >> 3) & 1; + bool irqOnTarget = (mode >> 4) & 1; + bool irqOnOverflow = (mode >> 5) & 1; + bool irqRepeat = (mode >> 6) & 1; + bool irqToggle = (mode >> 7) & 1; + unsigned clockSrc = (mode >> 8) & 3; + bool irqRequest = (mode >> 10) & 1; + bool reachedTarget = (mode >> 11) & 1; + bool reachedOverflow = (mode >> 12) & 1; + ImGui::Text(" Sync enable : %s", syncEnable ? "Yes" : "No"); + if (syncEnable) { + ImGui::Text(" Sync mode : %u", syncMode); + } + ImGui::Text(" Clock source : %s", timerClockSource(t, clockSrc)); + ImGui::Text(" Reset on tgt : %s", resetOnTarget ? "Yes" : "No"); + ImGui::Text(" IRQ on target: %s", irqOnTarget ? "Yes" : "No"); + ImGui::Text(" IRQ on ovflw : %s", irqOnOverflow ? "Yes" : "No"); + ImGui::Text(" IRQ repeat : %s", irqRepeat ? "Yes" : "No"); + ImGui::Text(" IRQ toggle : %s", irqToggle ? "Yes" : "No"); + ImGui::Text(" IRQ request : %s", irqRequest ? "No (bit10=1)" : "Yes (bit10=0)"); + ImGui::Text(" Reached tgt : %s", reachedTarget ? "Yes" : "No"); + ImGui::Text(" Reached ovflw: %s", reachedOverflow ? "Yes" : "No"); + ImGui::Unindent(); + } + } + } + + ImGui::Separator(); + + // Memory control registers + { + uint32_t exp1Base = readHWReg32(memory, 0x1000); + uint32_t exp2Base = readHWReg32(memory, 0x1004); + uint32_t exp1Delay = readHWReg32(memory, 0x1008); + uint32_t exp3Delay = readHWReg32(memory, 0x100c); + uint32_t biosRomDelay = readHWReg32(memory, 0x1010); + uint32_t spuDelay = readHWReg32(memory, 0x1014); + uint32_t cdromDelay = readHWReg32(memory, 0x1018); + uint32_t exp2Delay = readHWReg32(memory, 0x101c); + uint32_t commonDelay = readHWReg32(memory, 0x1020); + uint32_t ramSize = readHWReg32(memory, 0x1060); + std::string memStr = fmt::format("Memory Control###memctrl"); + if (ImGui::CollapsingHeader(memStr.c_str())) { + ImGui::Indent(); + ImGui::Text("EXP1 Base : %08x", exp1Base); + ImGui::Text("EXP2 Base : %08x", exp2Base); + ImGui::Text("EXP1 Delay : %08x", exp1Delay); + ImGui::Text("EXP3 Delay : %08x", exp3Delay); + ImGui::Text("BIOS ROM Delay: %08x", biosRomDelay); + ImGui::Text("SPU Delay : %08x", spuDelay); + ImGui::Text("CDROM Delay : %08x", cdromDelay); + ImGui::Text("EXP2 Delay : %08x", exp2Delay); + ImGui::Text("Common Delay : %08x", commonDelay); + ImGui::Text("RAM Size : %08x", ramSize); + ImGui::Unindent(); + } + } + + ImGui::PopFont(); + ImGui::End(); +} diff --git a/src/gui/widgets/hwregs.h b/src/gui/widgets/hwregs.h new file mode 100644 index 000000000..4a633ed42 --- /dev/null +++ b/src/gui/widgets/hwregs.h @@ -0,0 +1,39 @@ +/*************************************************************************** + * Copyright (C) 2026 PCSX-Redux authors * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * + ***************************************************************************/ + +#pragma once + +#include + +namespace PCSX { +class Memory; +class GUI; + +namespace Widgets { + +class HWRegs { + public: + HWRegs(bool& show) : m_show(show) {} + void draw(GUI* gui, Memory* memory, const char* title); + + bool& m_show; +}; + +} // namespace Widgets +} // namespace PCSX diff --git a/src/gui/widgets/registers.cc b/src/gui/widgets/registers.cc index 732b020dd..ba2926570 100644 --- a/src/gui/widgets/registers.cc +++ b/src/gui/widgets/registers.cc @@ -23,7 +23,6 @@ #include #include "core/disr3000a.h" -#include "core/psxmem.h" #include "core/r3000a.h" #include "core/system.h" #include "fmt/format.h" @@ -55,58 +54,7 @@ void PCSX::Widgets::Registers::makeEditableRegister(const char* name, uint32_t r } } -static constexpr std::string_view irqName(unsigned n) { - switch (n) { - case 0: - return "VBLANK"; - case 1: - return "GPU"; - case 2: - return "CDROM"; - case 3: - return "DMA"; - case 4: - return "TIMER0"; - case 5: - return "TIMER1"; - case 6: - return "TIMER2"; - case 7: - return "CONTROLLER"; - case 8: - return "SIO"; - case 9: - return "SPU"; - case 10: - return "PIO"; - default: - return "UNKNOWN"; - } -} - -static constexpr std::string_view dmaName(unsigned n) { - switch (n) { - case 0: - return "MDECin"; - case 1: - return "MDECout"; - case 2: - return "GPU"; - case 3: - return "CDROM"; - case 4: - return "SPU"; - case 5: - return "PIO"; - case 6: - return "OTC"; - default: - return "UNKNOWN"; - } -} - -void PCSX::Widgets::Registers::draw(PCSX::GUI* gui, PCSX::psxRegisters* registers, PCSX::Memory* memory, - const char* title) { +void PCSX::Widgets::Registers::draw(PCSX::GUI* gui, PCSX::psxRegisters* registers, const char* title) { ImGui::SetNextWindowPos(ImVec2(1040, 20), ImGuiCond_FirstUseEver); ImGui::SetNextWindowSize(ImVec2(210, 512), ImGuiCond_FirstUseEver); if (!ImGui::Begin(title, &m_show)) { @@ -346,79 +294,6 @@ void PCSX::Widgets::Registers::draw(PCSX::GUI* gui, PCSX::psxRegisters* register makeEditableRegister("pc", registers->pc); ImGui::Text("cycle: %08x", registers->cycle); ImGui::Text("int : %08x", registers->interrupt); - ImGui::Separator(); - uint32_t istat = memory->readHardwareRegister(); - uint32_t imask = memory->readHardwareRegister(); - uint32_t dpcr = memory->readHardwareRegister(); - uint32_t dicr = memory->readHardwareRegister(); - std::string istatStr = fmt::format("IStat: {0:08x}###ISTAT", istat); - if (ImGui::TreeNode(istatStr.c_str())) { - for (unsigned i = 0; i < 11; i++) { - bool enabled = istat & (1 << i); - ImGui::Checkbox(irqName(i).data(), &enabled); - uint32_t bit = 1 << i; - istat = enabled ? (istat | bit) : (istat & ~bit); - } - ImGui::TreePop(); - } - memory->writeHardwareRegister(istat); - std::string imaskStr = fmt::format("IMask: {0:08x}###IMASK", imask); - if (ImGui::TreeNode(imaskStr.c_str())) { - for (unsigned i = 0; i < 11; i++) { - bool enabled = imask & (1 << i); - ImGui::Checkbox(irqName(i).data(), &enabled); - uint32_t bit = 1 << i; - imask = enabled ? (imask | bit) : (imask & ~bit); - } - ImGui::TreePop(); - } - memory->writeHardwareRegister(imask); - ImGui::Separator(); - std::string dpcrStr = fmt::format("DPCR : {0:08x}###DPCR", dpcr); - if (ImGui::TreeNode(dpcrStr.c_str())) { - for (unsigned i = 0; i < 7; i++) { - unsigned priority = (dpcr >> (i * 4)) & 0x7; - bool enabled = (dpcr >> (i * 4 + 3)) & 0x1; - ImGui::Text("%8s: %u", dmaName(i).data(), priority); - ImGui::SameLine(); - std::string checkboxStr = fmt::format("###Enabled{}", i); - ImGui::Checkbox(checkboxStr.c_str(), &enabled); - uint32_t bit = 1 << (i * 4 + 3); - dpcr = enabled ? (dpcr | bit) : (dpcr & ~bit); - } - ImGui::Text(" CPU: %u", (dpcr >> 21) & 0x7); - memory->writeHardwareRegister(dpcr); - ImGui::TreePop(); - } - std::string dicrStr = fmt::format("DICR : {0:08x}###DICR", dicr); - if (ImGui::TreeNode(dicrStr.c_str())) { - bool busError = (dicr >> 15) & 1; - ImGui::Checkbox(_("Bus Error"), &busError); - dicr = busError ? (dicr | (1 << 15)) : (dicr & ~(1 << 15)); - bool dmaIrqEnabled = (dicr >> 23) & 1; - ImGui::Checkbox(_("DMA IRQ Enabled"), &dmaIrqEnabled); - dicr = dmaIrqEnabled ? (dicr | (1 << 23)) : (dicr & ~(1 << 23)); - bool dmaIrqTriggered = (dicr >> 31) & 1; - ImGui::Checkbox(_("DMA IRQ Triggered"), &dmaIrqTriggered); - dicr = dmaIrqTriggered ? (dicr | (1 << 31)) : (dicr & ~(1 << 31)); - for (unsigned i = 0; i < 7; i++) { - auto name = dmaName(i); - if (ImGui::TreeNode(name.data())) { - bool completion = (dicr >> i) & 1; - ImGui::Checkbox(_("Completion"), &completion); - dicr = completion ? (dicr | (1 << i)) : (dicr & ~(1 << i)); - bool mask = (dicr >> (i + 16)) & 1; - ImGui::Checkbox(_("IRQ Enabled"), &mask); - dicr = mask ? (dicr | (1 << (i + 16))) : (dicr & ~(1 << (i + 16))); - bool triggered = (dicr >> (i + 24)) & 1; - ImGui::Checkbox(_("Triggered"), &triggered); - dicr = triggered ? (dicr | (1 << (i + 24))) : (dicr & ~(1 << (i + 24))); - ImGui::TreePop(); - } - } - memory->writeHardwareRegister(dicr); - ImGui::TreePop(); - } ImGui::EndTabItem(); } ImGui::PopFont(); diff --git a/src/gui/widgets/registers.h b/src/gui/widgets/registers.h index 37efc4a23..6e0fc15e7 100644 --- a/src/gui/widgets/registers.h +++ b/src/gui/widgets/registers.h @@ -24,7 +24,6 @@ namespace PCSX { struct psxRegisters; -class Memory; class GUI; namespace Widgets { @@ -32,7 +31,7 @@ namespace Widgets { class Registers { public: Registers(bool& show) : m_show(show) {} - void draw(GUI* gui, psxRegisters* registers, Memory* memory, const char* title); + void draw(GUI* gui, psxRegisters* registers, const char* title); bool& m_show; diff --git a/vsprojects/gui/gui.vcxproj b/vsprojects/gui/gui.vcxproj index 67fb9f7a1..a765cf4ac 100644 --- a/vsprojects/gui/gui.vcxproj +++ b/vsprojects/gui/gui.vcxproj @@ -142,6 +142,7 @@ + @@ -176,6 +177,7 @@ + diff --git a/vsprojects/gui/gui.vcxproj.filters b/vsprojects/gui/gui.vcxproj.filters index 5b8169ad7..d49266ee2 100644 --- a/vsprojects/gui/gui.vcxproj.filters +++ b/vsprojects/gui/gui.vcxproj.filters @@ -109,6 +109,9 @@ Source Files\widgets + + Source Files + @@ -210,6 +213,9 @@ Header Files\widgets + + Header Files +