mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-13 02:08:49 +12:00
Debugger improved: Register editor added
How to use the register editor: 1. Load an .ELF file 2. Select any instruction from a thread. (This is a workaround to activate the appropriate event listener. This will be changed in the future). 3. Press 'R' key and modify any register you want. Note: The register editor only works with PPU and SPU threads. Additional changes: * Fixed the filesize problem caused by the instruction editor dialog. * Instruction Editor: Fixed small issue in SPU threads
This commit is contained in:
parent
bf293ebbfc
commit
9c6ae554fa
9 changed files with 226 additions and 32 deletions
|
@ -753,6 +753,69 @@ public:
|
|||
return ret;
|
||||
}
|
||||
|
||||
virtual wxString ReadRegString(wxString reg)
|
||||
{
|
||||
if (reg.Contains("["))
|
||||
{
|
||||
long reg_index;
|
||||
reg.AfterFirst('[').RemoveLast().ToLong(®_index);
|
||||
if (reg.StartsWith("GPR")) return wxString::Format("%016x", GPR[reg_index]);
|
||||
if (reg.StartsWith("FPR")) return wxString::Format("%016x", FPR[reg_index]);
|
||||
if (reg.StartsWith("VPR")) return wxString::Format("%032x", VPR[reg_index]);
|
||||
}
|
||||
if (reg == "CR") return wxString::Format("%08x", CR);
|
||||
if (reg == "LR") return wxString::Format("%016x", LR);
|
||||
if (reg == "CTR") return wxString::Format("%016x", CTR);
|
||||
if (reg == "XER") return wxString::Format("%016x", XER);
|
||||
if (reg == "FPSCR") return wxString::Format("%08x", FPSCR);
|
||||
return wxEmptyString;
|
||||
}
|
||||
|
||||
bool WriteRegString(wxString reg, wxString value) {
|
||||
while (value.Len() < 32) value = "0"+value;
|
||||
if (reg.Contains("["))
|
||||
{
|
||||
long reg_index;
|
||||
reg.AfterFirst('[').RemoveLast().ToLong(®_index);
|
||||
if (reg.StartsWith("GPR") || (reg.StartsWith("FPR")))
|
||||
{
|
||||
unsigned long long reg_value;
|
||||
if (!value.SubString(16,32).ToULongLong(®_value, 16)) return false;
|
||||
if (reg.StartsWith("GPR")) GPR[reg_index] = (u64)reg_value;
|
||||
if (reg.StartsWith("FPR")) FPR[reg_index] = (u64)reg_value;
|
||||
return true;
|
||||
}
|
||||
if (reg.StartsWith("VPR"))
|
||||
{
|
||||
unsigned long long reg_value0;
|
||||
unsigned long long reg_value1;
|
||||
if (!value.SubString(16,32).ToULongLong(®_value0, 16)) return false;
|
||||
if (!value.SubString(0,16).ToULongLong(®_value1, 16)) return false;
|
||||
VPR[reg_index]._u64[0] = (u64)reg_value0;
|
||||
VPR[reg_index]._u64[1] = (u64)reg_value1;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (reg == "LR" || reg == "CTR" || reg == "XER")
|
||||
{
|
||||
unsigned long long reg_value;
|
||||
if (!value.SubString(16,32).ToULongLong(®_value, 16)) return false;
|
||||
if (reg == "LR") LR = (u64)reg_value;
|
||||
if (reg == "CTR") CTR = (u64)reg_value;
|
||||
if (reg == "XER") XER.XER = (u64)reg_value;
|
||||
return true;
|
||||
}
|
||||
if (reg == "CR" || reg == "FPSCR")
|
||||
{
|
||||
unsigned long reg_value;
|
||||
if (!value.SubString(24,32).ToULong(®_value, 16)) return false;
|
||||
if (reg == "CR") CR.CR = (u32)reg_value;
|
||||
if (reg == "FPSCR") FPSCR.FPSCR = (u32)reg_value;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual void AddArgv(const wxString& arg);
|
||||
|
||||
public:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue