mirror of
https://github.com/trudnai/Steve2.git
synced 2024-06-10 20:29:33 +00:00
- Continuous disassembly
- Fixed scroll range error
This commit is contained in:
parent
8ac9378f62
commit
10c437b872
|
@ -115,13 +115,10 @@ class DebuggerViewController: NSViewController {
|
||||||
|
|
||||||
if needScroll {
|
if needScroll {
|
||||||
scrollTo.y = Disass_Display.frame.height * CGFloat(scrollPos)
|
scrollTo.y = Disass_Display.frame.height * CGFloat(scrollPos)
|
||||||
// Disass_Display.scroll(scrollTo)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DisassAddressPC.state = .off
|
DisassAddressPC.state = .off
|
||||||
DisplayDisassembly(scrollY: scrollTo.y)
|
DisplayDisassembly(scrollY: scrollTo.y)
|
||||||
|
|
||||||
// disassScroller()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -315,7 +312,7 @@ N V - B D I Z C
|
||||||
|
|
||||||
|
|
||||||
let disass_addr_min : UInt16 = 0 // 320
|
let disass_addr_min : UInt16 = 0 // 320
|
||||||
let disass_addr_max : UInt16 = 512
|
let disass_addr_max : UInt16 = 50 // 512
|
||||||
var disass_addr : UInt16 = 0 /// Address disassembled in the window
|
var disass_addr : UInt16 = 0 /// Address disassembled in the window
|
||||||
var disass_addr_pc : UInt16 = 0 /// Address to disassemble
|
var disass_addr_pc : UInt16 = 0 /// Address to disassemble
|
||||||
let disass_addr_pre : UInt16 = 20
|
let disass_addr_pre : UInt16 = 20
|
||||||
|
@ -609,22 +606,18 @@ N V - B D I Z C
|
||||||
|
|
||||||
line_number = 0
|
line_number = 0
|
||||||
|
|
||||||
// let highlighted = self.highlighted_line_number
|
|
||||||
|
|
||||||
// TODO: Also check if memory area updated!
|
// TODO: Also check if memory area updated!
|
||||||
|
|
||||||
// DispatchQueue.main.sync {
|
|
||||||
let addrpc = DisassAddressPC == nil || DisassAddressPC.state == .on
|
let addrpc = DisassAddressPC == nil || DisassAddressPC.state == .on
|
||||||
if addrpc {
|
if addrpc {
|
||||||
disass_addr_pc = m6502.PC
|
disass_addr_pc = m6502.PC
|
||||||
}
|
}
|
||||||
// }
|
|
||||||
var need_disass = scrollY > 0 || disass_addr_pc < disass_addr || UInt(disass_addr_pc) > UInt(disass_addr) + UInt(disass_addr_max)
|
let need_scroll = scrollY > 0 || disass_addr_pc < disass_addr || UInt(disass_addr_pc) > UInt(disass_addr) + UInt(disass_addr_max)
|
||||||
|
|
||||||
scroll_line_number = getLine(forAddr: disass_addr_pc)
|
scroll_line_number = getLine(forAddr: disass_addr_pc)
|
||||||
highlighted_line_number = getLine(forAddr: m6502.PC)
|
highlighted_line_number = getLine(forAddr: m6502.PC)
|
||||||
|
|
||||||
// if disass_addr_pc > disass_addr && disass_addr_pc < disass_addr + disass_addr_max {
|
|
||||||
if scroll_line_number < 0 || need_disass {
|
|
||||||
disassLineRange.removeAll()
|
disassLineRange.removeAll()
|
||||||
ViewController.shared?.UpdateSemaphore.wait()
|
ViewController.shared?.UpdateSemaphore.wait()
|
||||||
|
|
||||||
|
@ -634,10 +627,16 @@ N V - B D I Z C
|
||||||
m6502.PC = disass_addr_pc
|
m6502.PC = disass_addr_pc
|
||||||
}
|
}
|
||||||
|
|
||||||
need_disass = true
|
|
||||||
addr_line.removeAll()
|
addr_line.removeAll()
|
||||||
|
|
||||||
|
// de we need to scroll or prell at the same location?
|
||||||
|
if need_scroll {
|
||||||
disass_addr = m6502.PC
|
disass_addr = m6502.PC
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m6502.PC = disass_addr
|
||||||
|
}
|
||||||
|
|
||||||
if m6502.PC >= disass_addr_min_pre {
|
if m6502.PC >= disass_addr_min_pre {
|
||||||
m6502.PC -= disass_addr_min_pre
|
m6502.PC -= disass_addr_min_pre
|
||||||
}
|
}
|
||||||
|
@ -653,14 +652,6 @@ N V - B D I Z C
|
||||||
|
|
||||||
scroll_to_disass(addr: disass_addr)
|
scroll_to_disass(addr: disass_addr)
|
||||||
|
|
||||||
let preLines = 0 // Int(self.disass_addr / 2)
|
|
||||||
|
|
||||||
for _ in 0..<preLines {
|
|
||||||
let lineRange = LineRange_t(loc: loc, len: 1)
|
|
||||||
disassLineRange.append(lineRange)
|
|
||||||
loc += 1
|
|
||||||
}
|
|
||||||
|
|
||||||
// normal disassembly
|
// normal disassembly
|
||||||
for _ in 1...lines_to_disass {
|
for _ in 1...lines_to_disass {
|
||||||
// check if this is the current line before disassembling it (that will change PC...)
|
// check if this is the current line before disassembling it (that will change PC...)
|
||||||
|
@ -679,7 +670,7 @@ N V - B D I Z C
|
||||||
|
|
||||||
m6502_Disass_1_Instr()
|
m6502_Disass_1_Instr()
|
||||||
|
|
||||||
let line = ASCII_to_Apple2( line: String(cString: disassemblyLine( isCurrentLine )!) )
|
let line = ASCII_to_Apple2( line: String(cString: disassemblyLine()!) )
|
||||||
let len = disassLineLength + 1
|
let len = disassLineLength + 1
|
||||||
let lineRange = LineRange_t(loc: loc, len: len)
|
let lineRange = LineRange_t(loc: loc, len: len)
|
||||||
disassLineRange.append(lineRange)
|
disassLineRange.append(lineRange)
|
||||||
|
@ -690,24 +681,10 @@ N V - B D I Z C
|
||||||
|
|
||||||
m6502 = m6502_saved
|
m6502 = m6502_saved
|
||||||
ViewController.shared?.UpdateSemaphore.signal()
|
ViewController.shared?.UpdateSemaphore.signal()
|
||||||
}
|
|
||||||
|
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
if need_disass {
|
|
||||||
self.disassDisplay(str: disass)
|
self.disassDisplay(str: disass)
|
||||||
}
|
|
||||||
|
|
||||||
let currentScrollLine = self.get_scroll_line(view: self.Disass_Display) + 1
|
|
||||||
if self.highlighted_line_number <= currentScrollLine || self.highlighted_line_number > currentScrollLine + 25 {
|
|
||||||
if scrollY < 0 && self.DisassAddressPC.state == .off {
|
|
||||||
// print("DisplayDisassembly scroll")
|
|
||||||
// self.Disass_Display.scroll(NSPoint(x: 0, y: Int(self.disass_addr)))
|
|
||||||
// self.Disass_Scroll.verticalScroller?.floatValue = Float(self.disass_addr) / 65536
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// self.Disass_Scroll.verticalScroller?.floatValue = Float(self.disass_addr) / 65536
|
|
||||||
}
|
|
||||||
}
|
|
||||||
self.highlight(view: self.Disass_Display, line: self.highlighted_line_number, attr: self.lineAttrAtPC)
|
self.highlight(view: self.Disass_Display, line: self.highlighted_line_number, attr: self.lineAttrAtPC)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -175,7 +175,7 @@ void printDisassembly( FILE * f ) {
|
||||||
|
|
||||||
size_t disassLineLength = 0;
|
size_t disassLineLength = 0;
|
||||||
|
|
||||||
const char * disassemblyLine(_Bool highlight) {
|
const char * disassemblyLine() {
|
||||||
static char line[256];
|
static char line[256];
|
||||||
|
|
||||||
snprintf( line, sizeof(line), "%s %s: %-11s%-4s%s",
|
snprintf( line, sizeof(line), "%s %s: %-11s%-4s%s",
|
||||||
|
@ -186,11 +186,11 @@ const char * disassemblyLine(_Bool highlight) {
|
||||||
disassembly.oper
|
disassembly.oper
|
||||||
);
|
);
|
||||||
|
|
||||||
if (highlight) {
|
// if (highlight) {
|
||||||
for (int i = 0; i < sizeof(line); i++) {
|
// for (int i = 0; i < sizeof(line); i++) {
|
||||||
line[i] &= 0x3F;
|
// line[i] &= 0x3F;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
disassLineLength = strlen(line);
|
disassLineLength = strlen(line);
|
||||||
|
|
||||||
|
|
|
@ -88,7 +88,7 @@ extern void printDisassembly( FILE * f );
|
||||||
|
|
||||||
extern size_t disassLineLength;
|
extern size_t disassLineLength;
|
||||||
|
|
||||||
extern const char * disassemblyLine(_Bool higlight);
|
extern const char * disassemblyLine();
|
||||||
|
|
||||||
|
|
||||||
#endif /* _6502_dis_utils_h */
|
#endif /* _6502_dis_utils_h */
|
||||||
|
|
Loading…
Reference in New Issue
Block a user