mirror of
https://github.com/SourMesen/Mesen2.git
synced 2025-04-02 10:21:44 -04:00
Debugger: GBA - Added option to configure whether unidentified code/data is disassembled as arm/thumb
This commit is contained in:
parent
02180abed1
commit
7267e28e21
7 changed files with 70 additions and 19 deletions
|
@ -9,6 +9,7 @@
|
|||
#include "Debugger/CodeDataLogger.h"
|
||||
#include "Debugger/DebugBreakHelper.h"
|
||||
#include "Debugger/DebugUtilities.h"
|
||||
#include "Debugger/IDebugger.h"
|
||||
#include "SNES/SnesCpuTypes.h"
|
||||
#include "SNES/SpcTypes.h"
|
||||
#include "SNES/Coprocessors/GSU/GsuTypes.h"
|
||||
|
@ -571,7 +572,7 @@ void Disassembler::GetLineData(DisassemblyResult& row, CpuType type, MemoryType
|
|||
|
||||
CodeDataLogger* cdl = cdlManager->GetCodeDataLogger(row.Address.Type);
|
||||
if(!disInfo.IsInitialized()) {
|
||||
disInfo = DisassemblyInfo(row.Address.Address, state.CPSR.ToInt32(), CpuType::Gba, row.Address.Type, _memoryDumper);
|
||||
disInfo = DisassemblyInfo(row.Address.Address, _debugger->GetMainDebugger()->GetCpuFlags(), CpuType::Gba, row.Address.Type, _memoryDumper);
|
||||
} else {
|
||||
data.Flags |= (!cdl || cdl->IsCode(data.AbsoluteAddress.Address)) ? LineFlags::VerifiedCode : LineFlags::UnexecutedCode;
|
||||
}
|
||||
|
|
|
@ -366,7 +366,12 @@ void GbaDebugger::ResetPrevOpCode()
|
|||
|
||||
uint8_t GbaDebugger::GetCpuFlags()
|
||||
{
|
||||
return _cpu->GetState().CPSR.Thumb ? GbaCdlFlags::Thumb : 0;
|
||||
switch(_settings->GetDebugConfig().GbaDisMode) {
|
||||
case GbaDisassemblyMode::Default: return _cpu->GetState().CPSR.Thumb ? GbaCdlFlags::Thumb : 0;
|
||||
case GbaDisassemblyMode::Arm: return 0;
|
||||
case GbaDisassemblyMode::Thumb: return GbaCdlFlags::Thumb;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
BaseEventManager* GbaDebugger::GetEventManager()
|
||||
|
|
|
@ -775,6 +775,13 @@ struct AudioPlayerConfig
|
|||
bool Shuffle = false;
|
||||
};
|
||||
|
||||
enum class GbaDisassemblyMode : uint8_t
|
||||
{
|
||||
Default,
|
||||
Arm,
|
||||
Thumb
|
||||
};
|
||||
|
||||
struct DebugConfig
|
||||
{
|
||||
bool BreakOnUninitRead = false;
|
||||
|
@ -836,6 +843,7 @@ struct DebugConfig
|
|||
bool GbaBreakOnNopLoad = false;
|
||||
bool GbaBreakOnInvalidOpCode = false;
|
||||
bool GbaBreakOnUnalignedMemAccess = false;
|
||||
GbaDisassemblyMode GbaDisMode;
|
||||
|
||||
bool WsBreakOnInvalidOpCode = false;
|
||||
|
||||
|
|
|
@ -97,6 +97,7 @@ namespace Mesen.Config
|
|||
GbaBreakOnInvalidOpCode = Debugger.Gba.BreakOnInvalidOpCode,
|
||||
GbaBreakOnNopLoad = Debugger.Gba.BreakOnNopLoad,
|
||||
GbaBreakOnUnalignedMemAccess = Debugger.Gba.BreakOnUnalignedMemAccess,
|
||||
GbaDisMode = Debugger.Gba.DisassemblyMode,
|
||||
|
||||
WsBreakOnUndefinedOpCode = Debugger.Ws.BreakOnUndefinedOpCode,
|
||||
|
||||
|
@ -168,6 +169,7 @@ namespace Mesen.Config
|
|||
[MarshalAs(UnmanagedType.I1)] public bool GbaBreakOnNopLoad;
|
||||
[MarshalAs(UnmanagedType.I1)] public bool GbaBreakOnInvalidOpCode;
|
||||
[MarshalAs(UnmanagedType.I1)] public bool GbaBreakOnUnalignedMemAccess;
|
||||
public GbaDisassemblyMode GbaDisMode;
|
||||
|
||||
[MarshalAs(UnmanagedType.I1)] public bool WsBreakOnUndefinedOpCode;
|
||||
|
||||
|
|
|
@ -1,18 +1,20 @@
|
|||
using Avalonia;
|
||||
using Avalonia.Media;
|
||||
using Mesen.Debugger;
|
||||
using Mesen.Interop;
|
||||
using ReactiveUI.Fody.Helpers;
|
||||
using System.Reactive.Linq;
|
||||
using System.Reactive;
|
||||
using ReactiveUI.Fody.Helpers;
|
||||
using Mesen.ViewModels;
|
||||
|
||||
namespace Mesen.Config
|
||||
namespace Mesen.Config;
|
||||
|
||||
public class GbaDebuggerConfig : ViewModelBase
|
||||
{
|
||||
public class GbaDebuggerConfig : ViewModelBase
|
||||
{
|
||||
[Reactive] public bool BreakOnInvalidOpCode { get; set; } = false;
|
||||
[Reactive] public bool BreakOnNopLoad { get; set; } = false;
|
||||
[Reactive] public bool BreakOnUnalignedMemAccess { get; set; } = false;
|
||||
}
|
||||
[Reactive] public bool BreakOnInvalidOpCode { get; set; } = false;
|
||||
[Reactive] public bool BreakOnNopLoad { get; set; } = false;
|
||||
[Reactive] public bool BreakOnUnalignedMemAccess { get; set; } = false;
|
||||
|
||||
[Reactive] public GbaDisassemblyMode DisassemblyMode { get; set; } = GbaDisassemblyMode.Default;
|
||||
}
|
||||
|
||||
public enum GbaDisassemblyMode : byte
|
||||
{
|
||||
Default,
|
||||
Arm,
|
||||
Thumb
|
||||
}
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<StackPanel Margin="3 0">
|
||||
<c:OptionSection Header="{l:Translate lblDisassemblyOptions}" Margin="0">
|
||||
<Grid ColumnDefinitions="Auto,Auto,*" RowDefinitions="Auto,Auto,Auto">
|
||||
<Grid ColumnDefinitions="Auto,Auto,*" RowDefinitions="Auto,Auto,Auto,Auto">
|
||||
<TextBlock VerticalAlignment="Center" Text="{l:Translate lblVerifiedData}" />
|
||||
<c:EnumComboBox
|
||||
Grid.Column="1"
|
||||
|
@ -43,8 +43,34 @@
|
|||
Width="105"
|
||||
SelectedItem="{Binding Config.UnidentifiedBlockDisplay}"
|
||||
/>
|
||||
|
||||
<TextBlock
|
||||
IsVisible="{Binding IsGba}"
|
||||
Grid.Row="2"
|
||||
VerticalAlignment="Center"
|
||||
Text="{l:Translate lblDisassemblyMode}"
|
||||
/>
|
||||
<DockPanel Grid.Row="2" Grid.Column="1" IsVisible="{Binding IsGba}">
|
||||
<Image
|
||||
Source="/Assets/Help.png"
|
||||
Stretch="None"
|
||||
Margin="4 4"
|
||||
DockPanel.Dock="Right"
|
||||
VerticalAlignment="Top"
|
||||
HorizontalAlignment="Right"
|
||||
ToolTip.Tip="{l:Translate lblDisassemblyModeHint}"
|
||||
ToolTip.ShowDelay="0"
|
||||
ToolTip.HorizontalOffset="10"
|
||||
ToolTip.Placement="Bottom"
|
||||
/>
|
||||
<c:EnumComboBox
|
||||
Grid.Row="2"
|
||||
Grid.Column="1"
|
||||
SelectedItem="{Binding Config.Gba.DisassemblyMode}"
|
||||
/>
|
||||
</DockPanel>
|
||||
|
||||
<DockPanel Grid.Row="2" Grid.ColumnSpan="2">
|
||||
<DockPanel Grid.Row="3" Grid.ColumnSpan="2">
|
||||
<TextBlock VerticalAlignment="Center" Text="{l:Translate lblAddressDisplay}" />
|
||||
<c:EnumComboBox SelectedItem="{Binding Config.AddressDisplayType}" />
|
||||
</DockPanel>
|
||||
|
|
|
@ -1343,7 +1343,9 @@
|
|||
<Control ID="chkUseLowerCaseDisassembly">Use lower case</Control>
|
||||
<Control ID="chkShowJumpLabels">Show jump/sub labels</Control>
|
||||
<Control ID="chkSnesUseAltSpcOpNames">Use 6502-like mnemonics</Control>
|
||||
|
||||
<Control ID="lblDisassemblyMode">CPU mode:</Control>
|
||||
<Control ID="lblDisassemblyModeHint">Controls whether unidentified code is disassembled as ARM or Thumb.</Control>
|
||||
|
||||
<Control ID="lblBreakOptions">Break on...</Control>
|
||||
<Control ID="chkBreakOnBrk">BRK</Control>
|
||||
<Control ID="chkBreakOnCop">COP</Control>
|
||||
|
@ -2555,6 +2557,11 @@ E
|
|||
<Value ID="Enabled">Enabled</Value>
|
||||
<Value ID="Disabled">Disabled</Value>
|
||||
</Enum>
|
||||
<Enum ID="GbaDisassemblyMode">
|
||||
<Value ID="Default">Auto</Value>
|
||||
<Value ID="Arm">ARM</Value>
|
||||
<Value ID="Thumb">Thumb</Value>
|
||||
</Enum>
|
||||
|
||||
<Enum ID="MemorySizes">
|
||||
<Value ID="None">None</Value>
|
||||
|
|
Loading…
Add table
Reference in a new issue