mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-21 05:09:34 -06:00
DebugInterface: MemoryPatches methods added
CodeView: Restore instruction added
This commit is contained in:
@ -199,26 +199,8 @@ void CodeViewWidget::SetAddress(u32 address, SetAddressUpdate update)
|
||||
|
||||
void CodeViewWidget::ReplaceAddress(u32 address, ReplaceWith replace)
|
||||
{
|
||||
auto found = std::find_if(m_repl_list.begin(), m_repl_list.end(),
|
||||
[address](ReplStruct r) { return r.address == address; });
|
||||
|
||||
if (found != m_repl_list.end())
|
||||
{
|
||||
PowerPC::debug_interface.WriteExtraMemory(0, found->old_value, address);
|
||||
m_repl_list.erase(found);
|
||||
}
|
||||
else
|
||||
{
|
||||
ReplStruct repl;
|
||||
|
||||
repl.address = address;
|
||||
repl.old_value = PowerPC::debug_interface.ReadInstruction(address);
|
||||
|
||||
m_repl_list.push_back(repl);
|
||||
|
||||
PowerPC::debug_interface.Patch(address, replace == ReplaceWith::BLR ? 0x4e800020 : 0x60000000);
|
||||
}
|
||||
|
||||
PowerPC::debug_interface.UnsetPatch(address);
|
||||
PowerPC::debug_interface.SetPatch(address, replace == ReplaceWith::BLR ? 0x4e800020 : 0x60000000);
|
||||
Update();
|
||||
}
|
||||
|
||||
@ -261,6 +243,8 @@ void CodeViewWidget::OnContextMenu()
|
||||
auto* insert_nop_action = AddAction(menu, tr("Insert &nop"), this, &CodeViewWidget::OnInsertNOP);
|
||||
auto* replace_action =
|
||||
AddAction(menu, tr("Re&place instruction"), this, &CodeViewWidget::OnReplaceInstruction);
|
||||
auto* restore_action =
|
||||
AddAction(menu, tr("Restore instruction"), this, &CodeViewWidget::OnRestoreInstruction);
|
||||
|
||||
follow_branch_action->setEnabled(running && GetBranchFromAddress(addr));
|
||||
|
||||
@ -271,6 +255,8 @@ void CodeViewWidget::OnContextMenu()
|
||||
for (auto* action : {symbol_rename_action, symbol_size_action, symbol_end_action})
|
||||
action->setEnabled(has_symbol);
|
||||
|
||||
restore_action->setEnabled(running && PowerPC::debug_interface.HasEnabledPatch(addr));
|
||||
|
||||
menu->exec(QCursor::pos());
|
||||
Update();
|
||||
}
|
||||
@ -474,11 +460,20 @@ void CodeViewWidget::OnReplaceInstruction()
|
||||
|
||||
if (good)
|
||||
{
|
||||
PowerPC::debug_interface.Patch(addr, code);
|
||||
PowerPC::debug_interface.UnsetPatch(addr);
|
||||
PowerPC::debug_interface.SetPatch(addr, code);
|
||||
Update();
|
||||
}
|
||||
}
|
||||
|
||||
void CodeViewWidget::OnRestoreInstruction()
|
||||
{
|
||||
const u32 addr = GetContextAddress();
|
||||
|
||||
PowerPC::debug_interface.UnsetPatch(addr);
|
||||
Update();
|
||||
}
|
||||
|
||||
void CodeViewWidget::resizeEvent(QResizeEvent*)
|
||||
{
|
||||
Update();
|
||||
|
Reference in New Issue
Block a user