mirror of
https://github.com/trudnai/Steve2.git
synced 2025-02-11 23:30:50 +00:00
BugFix: Disassembly Scrolling & Highlighting
This commit is contained in:
parent
428b1b68c2
commit
55fd25d01a
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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()
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user