Optimized Debug Disassembly Scroll

This commit is contained in:
tudnai 2022-11-23 16:01:16 -08:00
parent 81fba486d5
commit 428b1b68c2
7 changed files with 370 additions and 232 deletions

View File

@ -3,28 +3,16 @@
version = "1.0">
<ContextStates>
<ContextState
contextName = "woz_write:woz.c">
contextName = "specialized closure #1 in DebuggerViewController.DisplayDisassembly():DebuggerViewController.swift">
<PersistentStrings>
<PersistentString
value = "WOZwrite.data">
value = "line_number">
</PersistentString>
<PersistentString
value = "new">
value = "currentScrollLine">
</PersistentString>
<PersistentString
value = "WOZwrite.shift16">
</PersistentString>
<PersistentString
value = "WOZwrite.shift">
</PersistentString>
<PersistentString
value = "bitOffset">
</PersistentString>
<PersistentString
value = "(1 &lt;&lt; i) - 1">
</PersistentString>
<PersistentString
value = "WOZtmp.shift16">
value = "current_line_number">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -32,41 +20,47 @@
contextName = "HiRes.compute():HiRes.swift">
<PersistentStrings>
<PersistentString
value = "computePipelineState.maxTotalThreadsPerThreadgroup">
value = "UnsafeRawBufferPointer(result)">
</PersistentString>
<PersistentString
value = "result[2]">
</PersistentString>
<PersistentString
value = "UnsafeRawBufferPointer(result)">
value = "computePipelineState.maxTotalThreadsPerThreadgroup">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "ViewController.newUpdateTimer(timeInterval:):ViewController.swift">
contextName = "ViewController.mouseMoved(with:):ViewController.swift">
<PersistentStrings>
<PersistentString
value = "upd">
value = "oldLocation">
</PersistentString>
<PersistentString
value = "mouseLocation">
</PersistentString>
<PersistentString
value = "view.bounds">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "HiRes.initMetal():HiRes.swift">
contextName = "closure #1 in ViewController.Update():ViewController.swift">
<PersistentStrings>
<PersistentString
value = "mtlBufferB">
value = "MEMcfg.txt_page_2">
</PersistentString>
<PersistentString
value = "addFunction">
value = "self.shadowTxt">
</PersistentString>
<PersistentString
value = "device">
value = "txt">
</PersistentString>
<PersistentString
value = "mtlBufferA">
value = "MEMcfg.is_80STORE">
</PersistentString>
<PersistentString
value = "mtlBufferC">
value = "txtArr">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -90,6 +84,28 @@
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "DebuggerViewController.getLineRange(inView:forLine:):DebuggerViewController.swift">
<PersistentStrings>
<PersistentString
value = "disassLineRange[forLine]">
</PersistentString>
<PersistentString
value = "disassLineRange.count">
</PersistentString>
<PersistentString
value = "disassLineRange">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "specialized closure #2 in DebuggerViewController.DisplayDisassembly(scrollY:):DebuggerViewController.swift">
<PersistentStrings>
<PersistentString
value = "highlighted_line_number">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "_src_zp_X_dbg:mmio.c">
<PersistentStrings>
@ -126,14 +142,17 @@
contextName = "HiRes.draw(_:):HiRes.swift">
<PersistentStrings>
<PersistentString
value = "linAddr">
value = "(blockH7 | ( block &amp; bitMask ))">
</PersistentString>
<PersistentString
value = "ctx?.height">
value = "ctx?.data">
</PersistentString>
<PersistentString
value = "ctx?.width">
</PersistentString>
<PersistentString
value = "ctx?.bitmapInfo">
</PersistentString>
<PersistentString
value = "ctx?.bytesPerRow">
</PersistentString>
@ -143,24 +162,21 @@
<PersistentString
value = "HiResLineAddrTbl">
</PersistentString>
<PersistentString
value = "ctx?.bitmapInfo">
</PersistentString>
<PersistentString
value = "HiRes.blockCols">
</PersistentString>
<PersistentString
value = "shadowScreen">
</PersistentString>
<PersistentString
value = "ctx?.height">
</PersistentString>
<PersistentString
value = "linAddr">
</PersistentString>
<PersistentString
value = "ctx?.bitsPerComponent">
</PersistentString>
<PersistentString
value = "(blockH7 | ( block &amp; bitMask ))">
</PersistentString>
<PersistentString
value = "ctx?.data">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
@ -187,7 +203,7 @@
contextName = "DebuggerViewController.DisplayDisassembly():DebuggerViewController.swift">
<PersistentStrings>
<PersistentString
value = "line_number">
value = "disass_addr_min">
</PersistentString>
<PersistentString
value = "disass_addr">
@ -196,7 +212,24 @@
value = "m6502.PC">
</PersistentString>
<PersistentString
value = "disass_addr_min">
value = "line_number">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "m6502_dbg_bp_compact:6502_bp.c">
<PersistentStrings>
<PersistentString
value = "bp + i + 1">
</PersistentString>
<PersistentString
value = "bp_array">
</PersistentString>
<PersistentString
value = "256 - i - 2 ">
</PersistentString>
<PersistentString
value = "mem_rd_bp">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -208,6 +241,17 @@
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "m6502_dbg_bp_get_last:6502_bp.c">
</ContextState>
<ContextState
contextName = "m6502_dbg_bp_sort:6502_bp.c">
<PersistentStrings>
<PersistentString
value = "breakpoints">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "m6502_Disass_1_Instr:6502_std.h">
<PersistentStrings>
@ -224,6 +268,14 @@
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "memwrite8_high:mmio.h">
<PersistentStrings>
<PersistentString
value = "WRHIMEM[addr]">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "auxMemorySelect:mmio.h">
<PersistentStrings>
@ -241,6 +293,23 @@
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "spkr_toggle_edge:speaker.c">
<PersistentStrings>
<PersistentString
value = "abs(spkr_level - level_max)">
</PersistentString>
<PersistentString
value = "( 1023000 / (double)spkr_sample_rate)">
</PersistentString>
<PersistentString
value = "spkr_samples">
</PersistentString>
<PersistentString
value = "spkr_clk + m6502.clkfrm / (int)( 1023000 / (double)spkr_sample_rate) * 2">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "save_AUX:mmio.c">
<PersistentStrings>
@ -269,56 +338,6 @@
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "memwrite8_high:mmio.h">
<PersistentStrings>
<PersistentString
value = "WRHIMEM[addr]">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "m6502_dbg_bp_sort:6502_bp.c">
<PersistentStrings>
<PersistentString
value = "breakpoints">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "spkr_toggle_edge:speaker.c">
<PersistentStrings>
<PersistentString
value = "abs(spkr_level - level_max)">
</PersistentString>
<PersistentString
value = "( 1023000 / (double)spkr_sample_rate)">
</PersistentString>
<PersistentString
value = "spkr_samples">
</PersistentString>
<PersistentString
value = "spkr_clk + m6502.clkfrm / (int)( 1023000 / (double)spkr_sample_rate) * 2">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "m6502_dbg_bp_compact:6502_bp.c">
<PersistentStrings>
<PersistentString
value = "mem_rd_bp">
</PersistentString>
<PersistentString
value = "bp + i + 1">
</PersistentString>
<PersistentString
value = "256 - i - 2 ">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "m6502_dbg_bp_get_last:6502_bp.c">
</ContextState>
<ContextState
contextName = "ViewController.Reset(_:):ViewController.swift">
<PersistentStrings>
@ -388,10 +407,10 @@
</PersistentStrings>
</ContextState>
<ContextState
contextName = "m6502_Step:6502_std.h">
contextName = "_addr_zp_dbg:mmio.c">
<PersistentStrings>
<PersistentString
value = "m6502">
value = "mem_wr_bp">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -410,7 +429,12 @@
</PersistentStrings>
</ContextState>
<ContextState
contextName = "LDA:6502_instr_load_store.h">
contextName = "m6502_Step:6502_std.h">
<PersistentStrings>
<PersistentString
value = "m6502">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "ViewController.keyDown(with:):ViewController.swift">
@ -421,12 +445,7 @@
</PersistentStrings>
</ContextState>
<ContextState
contextName = "_addr_zp_dbg:mmio.c">
<PersistentStrings>
<PersistentString
value = "mem_wr_bp">
</PersistentString>
</PersistentStrings>
contextName = "LDA:6502_instr_load_store.h">
</ContextState>
<ContextState
contextName = "closure #1 in AppDelegate.saveFile(_:):AppDelegate.swift">
@ -452,7 +471,7 @@
value = "textDisplay_height_diff">
</PersistentString>
<PersistentString
value = "textDisplay.frame">
value = "frame.size">
</PersistentString>
<PersistentString
value = "textDisplay.bounds">
@ -464,7 +483,7 @@
value = "textDisplay_width_diff">
</PersistentString>
<PersistentString
value = "frame.size">
value = "textDisplay.frame">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -521,17 +540,6 @@
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "set_flags_NZC:common.h">
<PersistentStrings>
<PersistentString
value = "(unsigned)test ">
</PersistentString>
<PersistentString
value = "(unsigned)0xFF">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "_fetch16:mmio.c">
<PersistentStrings>
@ -540,6 +548,17 @@
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "set_flags_NZC:common.h">
<PersistentStrings>
<PersistentString
value = "(unsigned)0xFF">
</PersistentString>
<PersistentString
value = "(unsigned)test ">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "m6502_step:6502.c">
<PersistentStrings>
@ -599,9 +618,6 @@
<ContextState
contextName = "main:AppDelegate.swift">
</ContextState>
<ContextState
contextName = "disassemblyLine:disassembler.c">
</ContextState>
<ContextState
contextName = "_memread:mmio.c">
<PersistentStrings>
@ -610,6 +626,9 @@
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "disassemblyLine:disassembler.c">
</ContextState>
<ContextState
contextName = "ToolBarController.buttonPressed(_:):ToolBarController.swift">
<PersistentStrings>
@ -638,16 +657,16 @@
contextName = "ioRead:mmio.c">
<PersistentStrings>
<PersistentString
value = "(int)IOframe">
value = "MEMcfg.int_Cx_ROM">
</PersistentString>
<PersistentString
value = "lastIO">
</PersistentString>
<PersistentString
value = "MEMcfg.int_Cx_ROM">
value = "m6502.clkfrm">
</PersistentString>
<PersistentString
value = "m6502.clkfrm">
value = "(int)IOframe">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -658,10 +677,10 @@
value = "Apple2_64K_AUX + 0xC600">
</PersistentString>
<PersistentString
value = "(void*)rom">
value = "Apple2_64K_RAM + 0xC600">
</PersistentString>
<PersistentString
value = "Apple2_64K_RAM + 0xC600">
value = "(void*)rom">
</PersistentString>
<PersistentString
value = "strlen(fullPath)">
@ -785,16 +804,16 @@
contextName = "DisplayScrollView.scrollWheel(with:):DisplayScrollView.swift">
<PersistentStrings>
<PersistentString
value = "documentView">
value = "textView.defaultParagraphStyle?.lineSpacing">
</PersistentString>
<PersistentString
value = "subviews">
</PersistentString>
<PersistentString
value = "textView.defaultParagraphStyle?.lineSpacing">
value = "subviews[1].subviews">
</PersistentString>
<PersistentString
value = "subviews[1].subviews">
value = "documentView">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -886,10 +905,10 @@
contextName = "_fetch_dbg:mmio.c">
<PersistentStrings>
<PersistentString
value = "memread8_low(m6502.PC)">
value = "disassembly.pOpcode">
</PersistentString>
<PersistentString
value = "disassembly.pOpcode">
value = "memread8_low(m6502.PC)">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -897,10 +916,13 @@
contextName = "m6502_dbg_bp_add:6502_bp.c">
<PersistentStrings>
<PersistentString
value = "mem_rd_bp">
value = "bp">
</PersistentString>
<PersistentString
value = "bp">
value = "bp_array">
</PersistentString>
<PersistentString
value = "mem_bp_arr">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -971,11 +993,20 @@
<ContextState
contextName = "DebuggerViewController.DisplayDisassembly(scrollY:):DebuggerViewController.swift">
<PersistentStrings>
<PersistentString
value = "scroll_line_number">
</PersistentString>
<PersistentString
value = "disass_addr">
</PersistentString>
<PersistentString
value = "scroll_line_number">
value = "highlighted_line_number">
</PersistentString>
<PersistentString
value = "Disass_Display.string.utf8CString">
</PersistentString>
<PersistentString
value = "Disass_Display">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -1091,7 +1122,7 @@
contextName = "LoRes.Update():LoRes.swift">
<PersistentStrings>
<PersistentString
value = "blockChanged[ screenIdx ]">
value = "UInt8( (block &gt;&gt; 4) &amp; 0x0F )">
</PersistentString>
<PersistentString
value = "UInt8(block)">
@ -1100,7 +1131,7 @@
value = "UInt8(block &amp; 4)">
</PersistentString>
<PersistentString
value = "UInt8( (block &gt;&gt; 4) &amp; 0x0F )">
value = "blockChanged[ screenIdx ]">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -1157,10 +1188,10 @@
value = "m6502">
</PersistentString>
<PersistentString
value = "(void*)Apple2_64K_RAM">
value = "Apple2_64K_AUX + 0x3600">
</PersistentString>
<PersistentString
value = "Apple2_64K_RAM + 0x3600">
value = "m6502.clkfrm">
</PersistentString>
<PersistentString
value = "m6502.ecoSpindown">
@ -1169,10 +1200,10 @@
value = "m6502.PC">
</PersistentString>
<PersistentString
value = "Apple2_64K_AUX + 0x3600">
value = "(void*)Apple2_64K_RAM">
</PersistentString>
<PersistentString
value = "m6502.clkfrm">
value = "Apple2_64K_RAM + 0x3600">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -1186,7 +1217,7 @@
value = "pdl_value[pdl]">
</PersistentString>
<PersistentString
value = "normalized_time &gt;= pdl_value[pdl] ? 255 : 0">
value = "normalized_time">
</PersistentString>
<PersistentString
value = "(3300 * 255/3300)">
@ -1198,7 +1229,15 @@
value = "1 * 512 * (1 - ( 3300 / 3300.0 ))">
</PersistentString>
<PersistentString
value = "normalized_time">
value = "normalized_time &gt;= pdl_value[pdl] ? 255 : 0">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "DebuggerViewController.remove_highlight(view:lineRange:):DebuggerViewController.swift">
<PersistentStrings>
<PersistentString
value = "view.layoutManager?.removeTemporaryAttribute">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -1209,10 +1248,10 @@
contextName = "ToolBarController.GamePort(_:):ToolBarController.swift">
<PersistentStrings>
<PersistentString
value = "ViewController.current?.mouseCursorJoystickEmulation">
value = "ViewController.current?.mouseCursorHidden">
</PersistentString>
<PersistentString
value = "ViewController.current?.mouseCursorHidden">
value = "ViewController.current?.mouseCursorJoystickEmulation">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -1247,10 +1286,16 @@
</PersistentStrings>
</ContextState>
<ContextState
contextName = "is_wr_enabled:mmio.c">
contextName = "m6502_Debug:6502_dbg.c">
<PersistentStrings>
<PersistentString
value = "MEMcfg.WR_RAM_cntr">
value = "m6502.PC">
</PersistentString>
<PersistentString
value = "m6502_saved.PC">
</PersistentString>
<PersistentString
value = "m6502_saved">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -1283,16 +1328,10 @@
</PersistentStrings>
</ContextState>
<ContextState
contextName = "m6502_Debug:6502_dbg.c">
contextName = "is_wr_enabled:mmio.c">
<PersistentStrings>
<PersistentString
value = "m6502.PC">
</PersistentString>
<PersistentString
value = "m6502_saved.PC">
</PersistentString>
<PersistentString
value = "m6502_saved">
value = "MEMcfg.WR_RAM_cntr">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -1435,7 +1474,7 @@
value = "m6502.PC">
</PersistentString>
<PersistentString
value = "m6502.clkfrm">
value = "m6502.debugger.on">
</PersistentString>
<PersistentString
value = "textLines * (textCols+1) + textCols">
@ -1444,7 +1483,7 @@
value = "frameCounter">
</PersistentString>
<PersistentString
value = "m6502.debugger.on">
value = "m6502.clkfrm">
</PersistentString>
<PersistentString
value = "spkr_play_disk_motor_time">
@ -1470,6 +1509,14 @@
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "ViewController.newUpdateTimer(timeInterval:):ViewController.swift">
<PersistentStrings>
<PersistentString
value = "upd">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "m6502_ColdReset:6502.c">
<PersistentStrings>
@ -1481,17 +1528,63 @@
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "woz_write:woz.c">
<PersistentStrings>
<PersistentString
value = "WOZwrite.data">
</PersistentString>
<PersistentString
value = "new">
</PersistentString>
<PersistentString
value = "WOZtmp.shift16">
</PersistentString>
<PersistentString
value = "WOZwrite.shift">
</PersistentString>
<PersistentString
value = "bitOffset">
</PersistentString>
<PersistentString
value = "(1 &lt;&lt; i) - 1">
</PersistentString>
<PersistentString
value = "WOZwrite.shift16">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "HiRes.initMetal():HiRes.swift">
<PersistentStrings>
<PersistentString
value = "mtlBufferB">
</PersistentString>
<PersistentString
value = "addFunction">
</PersistentString>
<PersistentString
value = "device">
</PersistentString>
<PersistentString
value = "mtlBufferA">
</PersistentString>
<PersistentString
value = "mtlBufferC">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "m6502_Debug:6502.c">
<PersistentStrings>
<PersistentString
value = "m6502.SP">
value = "m6502.debugger.SP">
</PersistentString>
<PersistentString
value = "m6502.debugger.mask.ret">
</PersistentString>
<PersistentString
value = "m6502.debugger.SP">
value = "m6502.SP">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -1502,7 +1595,7 @@
value = "default_MHz_6502 * 1000 * 1000 / spkr_sample_rate">
</PersistentString>
<PersistentString
value = "( (spkr_clk + m6502.clkfrm) / ( 1024000 / spkr_sample_rate ) ) * 2">
value = "( (spkr_clk + m6502.clkfrm) / ( default_MHz_6502 * 1000 * 1000 / spkr_sample_rate)) * 2">
</PersistentString>
<PersistentString
value = "(int16_t)28000 + (int16_t)-32768">
@ -1520,7 +1613,7 @@
value = "(spkr_clk + m6502.clkfrm)">
</PersistentString>
<PersistentString
value = "( (spkr_clk + m6502.clkfrm) / ( default_MHz_6502 * 1000 * 1000 / spkr_sample_rate)) * 2">
value = "( (spkr_clk + m6502.clkfrm) / ( 1024000 / spkr_sample_rate ) ) * 2">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -1538,53 +1631,5 @@
<ContextState
contextName = "AND:6502_instr_logic.h">
</ContextState>
<ContextState
contextName = "specialized closure #1 in DebuggerViewController.DisplayDisassembly():DebuggerViewController.swift">
<PersistentStrings>
<PersistentString
value = "line_number">
</PersistentString>
<PersistentString
value = "currentScrollLine">
</PersistentString>
<PersistentString
value = "current_line_number">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "ViewController.mouseMoved(with:):ViewController.swift">
<PersistentStrings>
<PersistentString
value = "oldLocation">
</PersistentString>
<PersistentString
value = "mouseLocation">
</PersistentString>
<PersistentString
value = "view.bounds">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "closure #1 in ViewController.Update():ViewController.swift">
<PersistentStrings>
<PersistentString
value = "txtArr">
</PersistentString>
<PersistentString
value = "self.shadowTxt">
</PersistentString>
<PersistentString
value = "txt">
</PersistentString>
<PersistentString
value = "MEMcfg.is_80STORE">
</PersistentString>
<PersistentString
value = "MEMcfg.txt_page_2">
</PersistentString>
</PersistentStrings>
</ContextState>
</ContextStates>
</VariablesViewState>

View File

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

View File

@ -34,17 +34,42 @@ class DebuggerViewController: NSViewController {
@IBOutlet weak var MemoryAddressField: NSTextField!
@IBOutlet weak var DisassAddressField: NSTextField!
@IBOutlet weak var DisassAddressPC: NSButton!
// @IBOutlet weak var test: NSTextField!
//
//
// // let bold14:NSFont = NSFont.boldSystemFontOfSize(14.0)
// let textFont : NSFont = NSFont(name: "Print Char 21", size: 10.0)!
// let textColor : NSColor = NSColor.white
// let textParagraph : NSMutableParagraphStyle = NSMutableParagraphStyle()
// // textParagraph.lineSpacing = 10.0 /*this sets the space BETWEEN lines to 10points*/
// // textParagraph.maximumLineHeight = 12.0/*this sets the MAXIMUM height of the lines to 12points*/
//// textParagraph.lineHeightMultiple = 1.15
// let textAttribs : [NSAttributedString.Key : NSObject]
required init?(coder: NSCoder) {
// textParagraph.lineHeightMultiple = 1.15
// textAttribs = [
// NSAttributedString.Key.font: textFont,
// NSAttributedString.Key.foregroundColor: textColor,
// NSAttributedString.Key.paragraphStyle: textParagraph
// ]
//
super.init(coder: coder)
DebuggerViewController.shared = self
}
// func testTextField(str : String) {
// let attrString:NSAttributedString = NSAttributedString.init(string: str, attributes: textAttribs)
// test.attributedStringValue = attrString
// }
//
//
override func viewDidLoad() {
super.viewDidLoad()
self.preferredContentSize = NSMakeSize(self.view.frame.size.width, self.view.frame.size.height)
// testTextField(str: "0000000\n0000000\n0000000\n0000000\n0000000\n0000000\n0000000\n0000000\n0000000\n")
}
@ -284,7 +309,7 @@ N V - B D I Z C
}
func getLineRange(inView view: NSTextView, forLine: Int) -> NSRange? {
func getLineRange_old(inView view: NSTextView, forLine: Int) -> NSRange? {
let layoutManager = view.layoutManager!
var numberOfLines = 0
let numberOfGlyphs = layoutManager.numberOfGlyphs
@ -308,10 +333,22 @@ N V - B D I Z C
}
func getLineRange(_ lineRange : [LineRange_t], forLine: Int) -> NSRange? {
// print("disassLineRange.count:", disassLineRange.count)
if 0 < forLine && forLine <= lineRange.count {
let disassRange = lineRange[forLine - 1]
return NSRange(location: disassRange.loc, length: disassRange.len)
}
// could not find line number
return nil
}
let lineFromTopToMiddle = 0
func scroll_to(view: NSTextView, line: Int) {
let line = line > 0 ? line : 0
if let lineRange = getLineRange(inView: view, forLine: line + lineFromTopToMiddle) {
if let lineRange = getLineRange(disassLineRange, forLine: line + lineFromTopToMiddle) {
view.scrollRangeToVisible(lineRange)
}
}
@ -328,11 +365,38 @@ N V - B D I Z C
]
func remove_highlight(view: NSTextView, line: Int) {
func remove_highlight(view : NSTextView, lineRange : NSRange) {
DispatchQueue.main.async {
if let layoutManager = view.layoutManager {
layoutManager.removeTemporaryAttribute(NSAttributedString.Key.backgroundColor, forCharacterRange: lineRange)
layoutManager.removeTemporaryAttribute(NSAttributedString.Key.foregroundColor, forCharacterRange: lineRange)
}
}
}
func remove_highlight(view : NSTextView, line : Int) {
if line > 0 {
if let lineRange = getLineRange(inView: view, forLine: line) {
view.layoutManager?.removeTemporaryAttribute(NSAttributedString.Key.backgroundColor, forCharacterRange: lineRange)
view.layoutManager?.removeTemporaryAttribute(NSAttributedString.Key.foregroundColor, forCharacterRange: lineRange)
if let lineRange = getLineRange(disassLineRange, forLine: line) {
remove_highlight(view: view, lineRange: lineRange)
}
}
}
func remove_highlight_(view: NSTextView) {
remove_highlight(view: view, line: highlighted_line_number)
highlighted_line_number = 0;
}
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 {
layoutManager.removeTemporaryAttribute(NSAttributedString.Key.backgroundColor, forCharacterRange: lineRange)
layoutManager.removeTemporaryAttribute(NSAttributedString.Key.foregroundColor, forCharacterRange: lineRange)
}
})
}
}
}
@ -342,12 +406,10 @@ N V - B D I Z C
if line > 0 {
// remove old highlighted line
remove_highlight(view: view, line: line)
if let lineRange = getLineRange(inView: view, forLine: line) {
// view.selectedRange = lineRange
// view.scrollRangeToVisible(lineRange)
// remove_highlight(view: view, line: line_number_cursor)
// line_number_cursor = 0
view.layoutManager?.addTemporaryAttributes(attr, forCharacterRange: lineRange)
if let lineRange = getLineRange(disassLineRange, forLine: line) {
DispatchQueue.main.async {
view.layoutManager?.addTemporaryAttributes(attr, forCharacterRange: lineRange)
}
}
}
}
@ -449,16 +511,22 @@ N V - B D I Z C
}
struct LineRange_t {
var loc : Int
var len : Int
}
var disassLineRange = [LineRange_t]()
func DisplayDisassembly( scrollY : CGFloat = -1 ) {
var disass = ""
var disass = "" // String(repeating: "\n", count: 0x1800)
var loc = 0
remove_highlight(view: Disass_Display)
line_number = 0
let highlighted = self.highlighted_line_number
DispatchQueue.main.async {
self.remove_highlight(view: self.Disass_Display, line: highlighted)
}
// let highlighted = self.highlighted_line_number
// TODO: Also check if memory area updated!
@ -474,6 +542,7 @@ N V - B D I Z C
// if disass_addr_pc > disass_addr && disass_addr_pc < disass_addr + disass_addr_max {
if scroll_line_number < 0 || need_disass {
disassLineRange.removeAll()
ViewController.shared?.UpdateSemaphore.wait()
let m6502_saved = m6502
@ -510,6 +579,11 @@ N V - B D I Z C
m6502_Disass_1_Instr()
let line = ASCII_to_Apple2( line: String(cString: disassemblyLine( isCurrentLine )!) )
// print("disassLineLength:", disassLineLength)
let len = disassLineLength + 1
let lineRange = LineRange_t(loc: loc, len: len)
disassLineRange.append(lineRange)
loc += len
if isCurrentLine {
// line = invertLine(line: line)
@ -529,11 +603,12 @@ N V - B D I Z C
DispatchQueue.main.async {
// let isEmpty = self.Disass_Display.string.isEmpty
if need_disass {
self.Disass_Display.string = disass
self.Disass_Display.string = disass // + String(repeating: "\n", count: 0x8000)
// self.testTextField(str: "")
}
let currentScrollLine = self.get_scroll_line(view: self.Disass_Display) + 1
if self.highlighted_line_number <= currentScrollLine || self.highlighted_line_number > currentScrollLine + 35 {
if self.highlighted_line_number <= currentScrollLine || self.highlighted_line_number > currentScrollLine + 25 {
if scrollY < 0 {
self.scroll_to(view: self.Disass_Display, line: self.scroll_line_number - 5)
@ -569,11 +644,13 @@ N V - B D I Z C
let UpdateSemaphore = DispatchSemaphore(value: 1)
func Update() {
DispatchQueue.global().async {
if self.UpdateSemaphore.wait(timeout: .now()) == .success {
self.UpdateImmediately()
self.UpdateSemaphore.signal()
if self.UpdateSemaphore.wait(timeout: .now()) == .success {
if Disass_Display != nil {
DispatchQueue.global().async {
self.UpdateImmediately()
}
}
self.UpdateSemaphore.signal()
}
}

View File

@ -1231,8 +1231,10 @@ class ViewController: NSViewController {
func diskButtonUpdate() {
DispatchQueue.main.async {
// Disk Motor LED
if ( self.frameCounter % DEF_DRV_LED_DIV == 0 ) {
// Disk Motor LED
if spkr_is_disk_motor_playing() {
if self.disk1_led.isHidden {
self.disk1_led.isHidden = false
@ -1243,10 +1245,8 @@ class ViewController: NSViewController {
self.disk1_led.isHidden = true
}
}
}
// Disk Loaded
if ( self.frameCounter % DEF_DRV_LED_DIV == 0 ) {
// Disk Loaded
if woz_is_loaded() > 0 {
if self.disk1_closed.isHidden {
self.disk1_closed.isHidden = false
@ -1257,6 +1257,7 @@ class ViewController: NSViewController {
self.disk1_closed.isHidden = true
}
}
}
}
}
@ -1295,9 +1296,9 @@ class ViewController: NSViewController {
clkCounter += Double(m6502.clkfrm)
// we start a new frame from here, so CPU is running even while rendering
// m6502.clkfrm = 0
frameCounter += 1
if ( frameCounter % fps == 0 ) {
let currentTime = CACurrentMediaTime() as Double
let elpasedTime = currentTime - lastFrameTime

View File

@ -173,6 +173,7 @@ void printDisassembly( FILE * f ) {
#endif // DISASS_TRACE
size_t disassLineLength = 0;
const char * disassemblyLine(_Bool highlight) {
static char line[256];
@ -191,6 +192,8 @@ const char * disassemblyLine(_Bool highlight) {
}
}
disassLineLength = strlen(line);
return line;
}

View File

@ -86,6 +86,7 @@ extern void printDisassembly( FILE * f );
#endif // DISASS_TRACE
extern size_t disassLineLength;
extern const char * disassemblyLine(_Bool higlight);

View File

@ -1022,6 +1022,9 @@ INLINE uint8_t memread8( uint16_t addr ) {
**/
INLINE uint16_t memread16_low( uint16_t addr ) {
return * (uint16_t*) ( Apple2_64K_MEM + addr );
// avoid unaligned memory access
// return (uint16_t)Apple2_64K_MEM[addr] | (uint16_t)Apple2_64K_MEM[addr+1] << 8;
}
//INLINE uint16_t memread16_high( uint16_t addr ) {
// return * (uint16_t*) ( RDHIMEM + addr );