From eacd07d010e9ae6e2e98dea8359b8e139247e5b3 Mon Sep 17 00:00:00 2001 From: Sour Date: Sun, 24 Nov 2019 10:24:36 -0500 Subject: [PATCH] Debugger: Create auto-labels on addresses that contain only a comment + create auto-labels for functions --- GUI.NET/Debugger/LabelManager.cs | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/GUI.NET/Debugger/LabelManager.cs b/GUI.NET/Debugger/LabelManager.cs index 93673527..831db51f 100644 --- a/GUI.NET/Debugger/LabelManager.cs +++ b/GUI.NET/Debugger/LabelManager.cs @@ -188,11 +188,32 @@ namespace Mesen.GUI.Debugger { byte[] cdlData = InteropEmu.DebugGetPrgCdlData(); List labelsToAdd = new List(); + for(int i = 0; i < cdlData.Length; i++) { - if((cdlData[i] & (byte)CdlPrgFlags.JumpTarget) != 0 && LabelManager.GetLabel((uint)i, AddressType.PrgRom) == null) { - labelsToAdd.Add(new CodeLabel() { Flags = CodeLabelFlags.AutoJumpLabel, Address = (uint)i, AddressType = AddressType.PrgRom, Label = "L" + i.ToString("X4"), Comment = "" }); + if((cdlData[i] & (byte)(CdlPrgFlags.JumpTarget | CdlPrgFlags.SubEntryPoint)) != 0) { + CodeLabel existingLabel = LabelManager.GetLabel((uint)i, AddressType.PrgRom); + if(existingLabel == null) { + labelsToAdd.Add(new CodeLabel() { + Flags = CodeLabelFlags.AutoJumpLabel, + Address = (uint)i, + AddressType = AddressType.PrgRom, + Label = ((cdlData[i] & (byte)CdlPrgFlags.SubEntryPoint) == 0 ? "L" : "F") + i.ToString("X4"), + Comment = "" + }); + } else { + if(string.IsNullOrWhiteSpace(existingLabel.Label)) { + //A comment exists for this address, add the label to it, but keep the comment and don't mark it as a auto-label + labelsToAdd.Add(new CodeLabel() { + Address = (uint)i, + AddressType = AddressType.PrgRom, + Label = ((cdlData[i] & (byte)CdlPrgFlags.SubEntryPoint) == 0 ? "L" : "F") + i.ToString("X4"), + Comment = existingLabel.Comment + }); + } + } } } + if(labelsToAdd.Count > 0) { LabelManager.SetLabels(labelsToAdd, true); }