BugFix: Disassembly Scrolling & Highlighting

This commit is contained in:
tudnai 2022-11-24 08:22:45 -08:00
parent 428b1b68c2
commit 55fd25d01a
5 changed files with 86 additions and 45 deletions

View File

@ -490,6 +490,14 @@
<ContextState
contextName = "_addr_zp_X_dbg:mmio.c">
</ContextState>
<ContextState
contextName = "specialized closure #1 in DebuggerViewController.DisplayDisassembly(scrollY:):DebuggerViewController.swift">
<PersistentStrings>
<PersistentString
value = "highlighted_line_number">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "read_woz:6502.c">
<PersistentStrings>
@ -994,13 +1002,16 @@
contextName = "DebuggerViewController.DisplayDisassembly(scrollY:):DebuggerViewController.swift">
<PersistentStrings>
<PersistentString
value = "scroll_line_number">
value = "disassLineRange">
</PersistentString>
<PersistentString
value = "disass_addr">
</PersistentString>
<PersistentString
value = "highlighted_line_number">
value = "m6502.PC">
</PersistentString>
<PersistentString
value = "line_number">
</PersistentString>
<PersistentString
value = "Disass_Display.string.utf8CString">
@ -1008,6 +1019,12 @@
<PersistentString
value = "Disass_Display">
</PersistentString>
<PersistentString
value = "scroll_line_number">
</PersistentString>
<PersistentString
value = "highlighted_line_number">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState

View File

@ -64,7 +64,6 @@
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
enableASanStackUseAfterReturn = "YES"
enableUBSanitizer = "YES"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
@ -91,13 +90,6 @@
ReferencedContainer = "container:A2Mac.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
<AdditionalOption
key = "NSZombieEnabled"
value = "YES"
isEnabled = "YES">
</AdditionalOption>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Debug"

View File

@ -391,14 +391,15 @@ N V - B D I Z C
func remove_highlight(view: NSTextView) {
if highlighted_line_number > 0 {
if let lineRange = getLineRange(disassLineRange, forLine: highlighted_line_number) {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1, execute: {
if let layoutManager = view.layoutManager {
if let layoutManager = view.layoutManager {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.03, execute: {
layoutManager.removeTemporaryAttribute(NSAttributedString.Key.backgroundColor, forCharacterRange: lineRange)
layoutManager.removeTemporaryAttribute(NSAttributedString.Key.foregroundColor, forCharacterRange: lineRange)
}
})
})
}
}
}
highlighted_line_number = 0
}
@ -518,11 +519,21 @@ N V - B D I Z C
var disassLineRange = [LineRange_t]()
func TrunDisassAddressPC(_ on: NSControl.StateValue = .on) {
if let disassAddressPC = DisassAddressPC {
disassAddressPC.state = on
}
}
func DisplayDisassembly( scrollY : CGFloat = -1 ) {
var disass = "" // String(repeating: "\n", count: 0x1800)
var loc = 0
remove_highlight(view: Disass_Display)
if cpuState == cpuState_running {
remove_highlight(view: Disass_Display)
}
line_number = 0
@ -575,6 +586,14 @@ N V - B D I Z C
addr_line.updateValue(line_number, forKey: m6502.PC)
let isCurrentLine = m6502.PC == m6502_saved.PC
if isCurrentLine {
// line = invertLine(line: line)
highlighted_line_number = line_number
}
if m6502.PC == disass_addr_pc {
scroll_line_number = line_number
}
m6502_Disass_1_Instr()
@ -585,14 +604,6 @@ N V - B D I Z C
disassLineRange.append(lineRange)
loc += len
if isCurrentLine {
// line = invertLine(line: line)
highlighted_line_number = line_number
}
if m6502.PC == disass_addr_pc {
scroll_line_number = line_number
}
disass += line + "\n"
}
@ -604,6 +615,7 @@ N V - B D I Z C
// let isEmpty = self.Disass_Display.string.isEmpty
if need_disass {
self.Disass_Display.string = disass // + String(repeating: "\n", count: 0x8000)
self.Disass_Display.scroll(CGPoint.zero)
// self.testTextField(str: "")
}
@ -635,10 +647,12 @@ N V - B D I Z C
func UpdateImmediately() {
DisplayRegisters()
DisplayStack()
DisplayMemory()
DisplayDisassembly()
DispatchQueue.main.async {
self.DisplayRegisters()
self.DisplayStack()
self.DisplayMemory()
self.DisplayDisassembly()
}
}
@ -646,9 +660,7 @@ N V - B D I Z C
func Update() {
if self.UpdateSemaphore.wait(timeout: .now()) == .success {
if Disass_Display != nil {
DispatchQueue.global().async {
self.UpdateImmediately()
}
self.UpdateImmediately()
}
self.UpdateSemaphore.signal()
}

View File

@ -112,8 +112,6 @@ class DebuggerWindowController: NSWindowController, NSWindowDelegate {
}
func Continue() {
PauseButtonUpdate()
@ -190,8 +188,9 @@ class DebuggerWindowController: NSWindowController, NSWindowDelegate {
m6502_Step_dbg()
// TODO: This should be in Debugger!
if let debugger = DebuggerViewController.shared {
debugger.Update()
if let debuggerViewController = DebuggerViewController.shared {
debuggerViewController.remove_highlight(view: debuggerViewController.Disass_Display, line: debuggerViewController.highlighted_line_number)
debuggerViewController.Update()
}
// TODO: Update Screen and speaker etc

View File

@ -339,7 +339,34 @@ class ViewController: NSViewController {
}
func debuggerShowWindow() {
if let debuggerWindowController = DebuggerWindowController.shared {
DispatchQueue.main.async {
debuggerWindowController.showWindow(self)
}
}
}
func debuggerRemoveHighlight() {
if let debuggerViewController = DebuggerViewController.shared {
debuggerViewController.remove_highlight(view: debuggerViewController.Disass_Display, line: debuggerViewController.highlighted_line_number)
}
}
func debuggerPauseUpdate() {
if let debuggerViewController = DebuggerViewController.shared {
debuggerViewController.TrunDisassAddressPC(.on)
debuggerViewController.remove_highlight(view: debuggerViewController.Disass_Display, line: debuggerViewController.highlighted_line_number)
debuggerViewController.Update()
}
}
func Resume() {
debuggerRemoveHighlight()
#if SCHEDULER_CVDISPLAYLINK
CVDisplayLinkStart(displayLink!)
#else
@ -370,6 +397,8 @@ class ViewController: NSViewController {
if let debugger = DebuggerWindowController.shared {
debugger.PauseButtonUpdate()
}
debuggerPauseUpdate()
}
@ -1265,20 +1294,12 @@ class ViewController: NSViewController {
func debugBreak() {
Pause()
// TODO: This should be in Debugger!
if let debugger = DebuggerViewController.shared {
debugger.Update()
}
if let debugger = DebuggerWindowController.shared {
DispatchQueue.main.async {
debugger.showWindow(self)
}
}
spkr_play_disk_motor_time = 0
spkr_stopAll()
// TODO: This should be in Debugger!
debuggerPauseUpdate()
debuggerShowWindow()
}