CPU 65C02 bugfixes

This commit is contained in:
Tamas Rudnai 2024-01-05 07:56:03 -08:00
parent 822f0eebae
commit 647a3fed66
16 changed files with 301 additions and 163 deletions

View File

@ -2022,7 +2022,7 @@
GCC_ENABLE_CPP_RTTI = YES;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_FAST_MATH = YES;
GCC_OPTIMIZATION_LEVEL = g;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_UNROLL_LOOPS = NO;
HEADER_SEARCH_PATHS = src/cpu;
INFOPLIST_FILE = "A2Mac/Debug-Info.plist";

View File

@ -3,53 +3,64 @@
version = "1.0">
<ContextStates>
<ContextState
contextName = "AND:6502_instr_logic.h">
contextName = "ViewController.newUpdateTimer(timeInterval:):ViewController.swift">
<PersistentStrings>
<PersistentString
value = "upd">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "HiRes.compute():HiRes.swift">
<PersistentStrings>
<PersistentString
value = "UnsafeRawBufferPointer(result)">
value = "computePipelineState.maxTotalThreadsPerThreadgroup">
</PersistentString>
<PersistentString
value = "result[2]">
</PersistentString>
<PersistentString
value = "computePipelineState.maxTotalThreadsPerThreadgroup">
value = "UnsafeRawBufferPointer(result)">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "ViewController.mouseMoved(with:):ViewController.swift">
contextName = "spkr_toggle:speaker.c">
<PersistentStrings>
<PersistentString
value = "oldLocation">
value = "default_MHz_6502 * 1000 * 1000 / spkr_sample_rate">
</PersistentString>
<PersistentString
value = "mouseLocation">
value = "( (spkr_clk + m6502.clkfrm) / ( 1024000 / spkr_sample_rate ) ) * 2">
</PersistentString>
<PersistentString
value = "view.bounds">
value = "(int16_t)28000 + (int16_t)-32768">
</PersistentString>
<PersistentString
value = "spkr_samples[spkr_sample_last_idx]">
</PersistentString>
<PersistentString
value = "(int)spkr_sample_idx_diff">
</PersistentString>
<PersistentString
value = "m6502.clkfrm">
</PersistentString>
<PersistentString
value = "(spkr_clk + m6502.clkfrm)">
</PersistentString>
<PersistentString
value = "( (spkr_clk + m6502.clkfrm) / ( default_MHz_6502 * 1000 * 1000 / spkr_sample_rate)) * 2">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "closure #1 in ViewController.Update():ViewController.swift">
contextName = "m6502_ColdReset:6502.c">
<PersistentStrings>
<PersistentString
value = "MEMcfg.txt_page_2">
value = "m6502">
</PersistentString>
<PersistentString
value = "self.shadowTxt">
</PersistentString>
<PersistentString
value = "txt">
</PersistentString>
<PersistentString
value = "MEMcfg.is_80STORE">
</PersistentString>
<PersistentString
value = "txtArr">
value = "RAM_PG_RD_TBL">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -73,6 +84,14 @@
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "BIT:6502_instr_compare_test.h">
<PersistentStrings>
<PersistentString
value = "m6502.A">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "specialized closure #2 in DebuggerViewController.DisplayDisassembly(scrollY:):DebuggerViewController.swift">
<PersistentStrings>
@ -88,10 +107,10 @@
value = "disassLineRange[forLine]">
</PersistentString>
<PersistentString
value = "disassLineRange.count">
value = "disassLineRange">
</PersistentString>
<PersistentString
value = "disassLineRange">
value = "disassLineRange.count">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -131,10 +150,10 @@
contextName = "HiRes.draw(_:):HiRes.swift">
<PersistentStrings>
<PersistentString
value = "ctx?.bitsPerComponent">
value = "linAddr">
</PersistentString>
<PersistentString
value = "ctx?.data">
value = "ctx?.height">
</PersistentString>
<PersistentString
value = "ctx?.width">
@ -157,14 +176,14 @@
<PersistentString
value = "(blockH7 | ( block &amp; bitMask ))">
</PersistentString>
<PersistentString
value = "ctx?.bitsPerComponent">
</PersistentString>
<PersistentString
value = "HiRes.blockCols">
</PersistentString>
<PersistentString
value = "linAddr">
</PersistentString>
<PersistentString
value = "ctx?.height">
value = "ctx?.data">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -192,7 +211,7 @@
contextName = "DebuggerViewController.DisplayDisassembly():DebuggerViewController.swift">
<PersistentStrings>
<PersistentString
value = "disass_addr_min">
value = "line_number">
</PersistentString>
<PersistentString
value = "disass_addr">
@ -201,7 +220,7 @@
value = "m6502.PC">
</PersistentString>
<PersistentString
value = "line_number">
value = "disass_addr_min">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -266,10 +285,10 @@
</PersistentStrings>
</ContextState>
<ContextState
contextName = "dest_ind_Y:Apple2_mmio.h">
contextName = "mach_msg2_trap:(null)">
<PersistentStrings>
<PersistentString
value = "disassembly">
value = "m6502">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -290,6 +309,14 @@
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "dest_ind_Y:Apple2_mmio.h">
<PersistentStrings>
<PersistentString
value = "disassembly">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "auxMemorySelect:mmio.h">
<PersistentStrings>
@ -335,14 +362,6 @@
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "mach_msg2_trap:(null)">
<PersistentStrings>
<PersistentString
value = "m6502">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "ViewController.Reset(_:):ViewController.swift">
<PersistentStrings>
@ -351,6 +370,9 @@
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "TXS [inlined]:6502_instr_transfer.h">
</ContextState>
<ContextState
contextName = "ViewController.currentContext.getter:ViewController.swift">
<PersistentStrings>
@ -476,7 +498,7 @@
value = "m6502_saved.PC">
</PersistentString>
<PersistentString
value = "isCurrentLine">
value = "scroll_line_number">
</PersistentString>
<PersistentString
value = "highlighted_line_number">
@ -485,7 +507,7 @@
value = "m6502.PC">
</PersistentString>
<PersistentString
value = "scroll_line_number">
value = "isCurrentLine">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -498,6 +520,9 @@
<PersistentString
value = "textDisplay_height_diff">
</PersistentString>
<PersistentString
value = "textDisplay.frame">
</PersistentString>
<PersistentString
value = "MonitorView.textViewBounds">
</PersistentString>
@ -510,9 +535,6 @@
<PersistentString
value = "textDisplay_width_diff">
</PersistentString>
<PersistentString
value = "textDisplay.frame">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
@ -577,10 +599,10 @@
contextName = "set_flags_NZC:common.h">
<PersistentStrings>
<PersistentString
value = "(unsigned)0xFF">
value = "(unsigned)test ">
</PersistentString>
<PersistentString
value = "(unsigned)test ">
value = "(unsigned)0xFF">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -603,6 +625,11 @@
</ContextState>
<ContextState
contextName = "set_flags_Z:6502.c">
<PersistentStrings>
<PersistentString
value = "!test">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "DebuggerViewController.scrollWheel(with:):DebuggerViewController.swift">
@ -685,10 +712,10 @@
value = "MEMcfg.int_Cx_ROM">
</PersistentString>
<PersistentString
value = "m6502.clkfrm">
value = "(int)IOframe">
</PersistentString>
<PersistentString
value = "(int)IOframe">
value = "m6502.clkfrm">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -699,10 +726,10 @@
value = "Apple2_64K_AUX + 0xC600">
</PersistentString>
<PersistentString
value = "Apple2_64K_RAM + 0xC600">
value = "(void*)rom">
</PersistentString>
<PersistentString
value = "(void*)rom">
value = "Apple2_64K_RAM + 0xC600">
</PersistentString>
<PersistentString
value = "strlen(fullPath)">
@ -808,6 +835,14 @@
<ContextState
contextName = "POP:6502_instr_stack.h">
</ContextState>
<ContextState
contextName = "memread8_low [inlined]:mmio.c">
<PersistentStrings>
<PersistentString
value = "m6502.PC">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "ToolBarController.windowWillEnterFullScreen(_:):ToolBarController.swift">
<PersistentStrings>
@ -826,16 +861,16 @@
contextName = "DisplayScrollView.scrollWheel(with:):DisplayScrollView.swift">
<PersistentStrings>
<PersistentString
value = "subviews[1].subviews">
value = "documentView">
</PersistentString>
<PersistentString
value = "subviews">
</PersistentString>
<PersistentString
value = "documentView">
value = "textView.defaultParagraphStyle?.lineSpacing">
</PersistentString>
<PersistentString
value = "textView.defaultParagraphStyle?.lineSpacing">
value = "subviews[1].subviews">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -871,6 +906,14 @@
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "m6502_Step:6502_C.h">
<PersistentStrings>
<PersistentString
value = "m6502.PC">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "ioRead:Apple2_mmio.h">
<PersistentStrings>
@ -927,10 +970,10 @@
contextName = "_fetch_dbg:mmio.c">
<PersistentStrings>
<PersistentString
value = "disassembly.pOpcode">
value = "memread8_low(m6502.PC)">
</PersistentString>
<PersistentString
value = "memread8_low(m6502.PC)">
value = "disassembly.pOpcode">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -938,16 +981,19 @@
contextName = "m6502_dbg_bp_add:6502_bp.c">
<PersistentStrings>
<PersistentString
value = "bp">
value = "mem_bp_arr">
</PersistentString>
<PersistentString
value = "bp_array">
</PersistentString>
<PersistentString
value = "mem_bp_arr">
value = "bp">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "m6502_Step_dbg:6502_dbg.c">
</ContextState>
<ContextState
contextName = "ioRead:mmio.h">
<PersistentStrings>
@ -1016,7 +1062,7 @@
contextName = "DebuggerViewController.DisplayDisassembly(scrollY:):DebuggerViewController.swift">
<PersistentStrings>
<PersistentString
value = "scroll_line_number">
value = "isCurrentLine">
</PersistentString>
<PersistentString
value = "highlighted_line_number">
@ -1025,7 +1071,7 @@
value = "m6502.PC">
</PersistentString>
<PersistentString
value = "isCurrentLine">
value = "scroll_line_number">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -1141,7 +1187,7 @@
contextName = "LoRes.Update():LoRes.swift">
<PersistentStrings>
<PersistentString
value = "UInt8( (block &gt;&gt; 4) &amp; 0x0F )">
value = "blockChanged[ screenIdx ]">
</PersistentString>
<PersistentString
value = "UInt8(block)">
@ -1150,7 +1196,7 @@
value = "UInt8(block &amp; 4)">
</PersistentString>
<PersistentString
value = "blockChanged[ screenIdx ]">
value = "UInt8( (block &gt;&gt; 4) &amp; 0x0F )">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -1207,22 +1253,22 @@
value = "m6502">
</PersistentString>
<PersistentString
value = "Apple2_64K_AUX + 0x3600">
value = "(void*)Apple2_64K_RAM">
</PersistentString>
<PersistentString
value = "m6502.clkfrm">
value = "Apple2_64K_RAM + 0x3600">
</PersistentString>
<PersistentString
value = "m6502.ecoSpindown">
</PersistentString>
<PersistentString
value = "Apple2_64K_AUX + 0x3600">
</PersistentString>
<PersistentString
value = "m6502.PC">
</PersistentString>
<PersistentString
value = "(void*)Apple2_64K_RAM">
</PersistentString>
<PersistentString
value = "Apple2_64K_RAM + 0x3600">
value = "m6502.clkfrm">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -1236,7 +1282,7 @@
value = "pdl_value[pdl]">
</PersistentString>
<PersistentString
value = "normalized_time">
value = "normalized_time &gt;= pdl_value[pdl] ? 255 : 0">
</PersistentString>
<PersistentString
value = "(3300 * 255/3300)">
@ -1248,7 +1294,7 @@
value = "1 * 512 * (1 - ( 3300 / 3300.0 ))">
</PersistentString>
<PersistentString
value = "normalized_time &gt;= pdl_value[pdl] ? 255 : 0">
value = "normalized_time">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -1267,10 +1313,10 @@
contextName = "ToolBarController.GamePort(_:):ToolBarController.swift">
<PersistentStrings>
<PersistentString
value = "ViewController.current?.mouseCursorHidden">
value = "ViewController.current?.mouseCursorJoystickEmulation">
</PersistentString>
<PersistentString
value = "ViewController.current?.mouseCursorJoystickEmulation">
value = "ViewController.current?.mouseCursorHidden">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -1493,7 +1539,7 @@
value = "m6502.PC">
</PersistentString>
<PersistentString
value = "m6502.debugger.on">
value = "m6502.clkfrm">
</PersistentString>
<PersistentString
value = "textLines * (textCols+1) + textCols">
@ -1502,7 +1548,7 @@
value = "frameCounter">
</PersistentString>
<PersistentString
value = "m6502.clkfrm">
value = "m6502.debugger.on">
</PersistentString>
<PersistentString
value = "spkr_play_disk_motor_time">
@ -1532,13 +1578,13 @@
contextName = "m6502_Debug:6502.c">
<PersistentStrings>
<PersistentString
value = "m6502.debugger.SP">
value = "m6502.SP">
</PersistentString>
<PersistentString
value = "m6502.debugger.mask.ret">
</PersistentString>
<PersistentString
value = "m6502.SP">
value = "m6502.debugger.SP">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -1563,7 +1609,7 @@
value = "new">
</PersistentString>
<PersistentString
value = "WOZtmp.shift16">
value = "WOZwrite.shift16">
</PersistentString>
<PersistentString
value = "WOZwrite.shift">
@ -1575,7 +1621,7 @@
value = "(1 &lt;&lt; i) - 1">
</PersistentString>
<PersistentString
value = "WOZwrite.shift16">
value = "WOZtmp.shift16">
</PersistentString>
</PersistentStrings>
</ContextState>
@ -1599,6 +1645,9 @@
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "AND:6502_instr_logic.h">
</ContextState>
<ContextState
contextName = "specialized closure #1 in DebuggerViewController.DisplayDisassembly():DebuggerViewController.swift">
<PersistentStrings>
@ -1614,50 +1663,36 @@
</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 = "spkr_toggle:speaker.c">
contextName = "closure #1 in ViewController.Update():ViewController.swift">
<PersistentStrings>
<PersistentString
value = "default_MHz_6502 * 1000 * 1000 / spkr_sample_rate">
value = "txtArr">
</PersistentString>
<PersistentString
value = "( (spkr_clk + m6502.clkfrm) / ( default_MHz_6502 * 1000 * 1000 / spkr_sample_rate)) * 2">
value = "self.shadowTxt">
</PersistentString>
<PersistentString
value = "(int16_t)28000 + (int16_t)-32768">
value = "txt">
</PersistentString>
<PersistentString
value = "spkr_samples[spkr_sample_last_idx]">
value = "MEMcfg.txt_page_2">
</PersistentString>
<PersistentString
value = "(int)spkr_sample_idx_diff">
</PersistentString>
<PersistentString
value = "m6502.clkfrm">
</PersistentString>
<PersistentString
value = "(spkr_clk + m6502.clkfrm)">
</PersistentString>
<PersistentString
value = "( (spkr_clk + m6502.clkfrm) / ( 1024000 / spkr_sample_rate ) ) * 2">
</PersistentString>
</PersistentStrings>
</ContextState>
<ContextState
contextName = "m6502_ColdReset:6502.c">
<PersistentStrings>
<PersistentString
value = "m6502">
</PersistentString>
<PersistentString
value = "RAM_PG_RD_TBL">
value = "MEMcfg.is_80STORE">
</PersistentString>
</PersistentStrings>
</ContextState>

View File

@ -428,7 +428,7 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textView editable="NO" selectable="NO" drawsBackground="NO" importsGraphics="NO" richText="NO" horizontallyResizable="YES" verticallyResizable="YES" baseWritingDirection="leftToRight" findStyle="bar" allowsCharacterPickerTouchBarItem="NO" textCompletion="NO" id="Hwx-Gd-XW1" userLabel="Disass Display" customClass="DisassView" customModule="A2MacTests" customModuleProvider="target">
<rect key="frame" x="0.0" y="-807" width="364" height="754"/>
<rect key="frame" x="0.0" y="-807" width="366" height="754"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" red="0.12549019610000001" green="0.12549019610000001" blue="0.12549019610000001" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
@ -541,7 +541,7 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textView editable="NO" selectable="NO" drawsBackground="NO" importsGraphics="NO" richText="NO" horizontallyResizable="YES" verticallyResizable="YES" baseWritingDirection="leftToRight" findStyle="bar" allowsCharacterPickerTouchBarItem="NO" textCompletion="NO" id="Wrs-Qt-Kmd" userLabel="CPU Display" customClass="DisplayView" customModule="A2MacTests" customModuleProvider="target">
<rect key="frame" x="0.0" y="-12" width="298" height="270"/>
<rect key="frame" x="0.0" y="-34" width="298" height="270"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>

View File

@ -1415,9 +1415,9 @@ Gw
<toolbarItem implicitItemIdentifier="34201AE0-6358-4CC1-A7D5-BEB45E6353C8" label="Pause" paletteLabel="Pause" image="NSTouchBarPlayTemplate" id="QIP-vh-jcn">
<nil key="toolTip"/>
<size key="minSize" width="30" height="17"/>
<size key="maxSize" width="30" height="43"/>
<size key="maxSize" width="30.5" height="43"/>
<button key="view" verticalHuggingPriority="750" id="s08-fv-vSO">
<rect key="frame" x="5" y="14" width="30" height="30"/>
<rect key="frame" x="4" y="14" width="30.5" height="30.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="bevel" bezelStyle="rounded" image="NSTouchBarPlayTemplate" imagePosition="overlaps" alignment="center" alternateImage="NSTouchBarPauseTemplate" refusesFirstResponder="YES" state="on" imageScaling="proportionallyUpOrDown" inset="2" id="knw-Ib-jcb">
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
@ -1525,7 +1525,7 @@ Gw
<popUpButton key="view" id="rfS-6q-EKe">
<rect key="frame" x="0.0" y="14" width="43" height="30"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<popUpButtonCell key="cell" type="bevel" bezelStyle="regularSquare" image="popUpButtonCell:8bV-Aa-zHf:image" imagePosition="only" alignment="right" lineBreakMode="truncatingTail" refusesFirstResponder="YES" imageScaling="proportionallyUpOrDown" inset="2" pullsDown="YES" arrowPosition="noArrow" id="8bV-Aa-zHf">
<popUpButtonCell key="cell" type="bevel" bezelStyle="regularSquare" image="Quick Disk" imagePosition="only" alignment="right" lineBreakMode="truncatingTail" refusesFirstResponder="YES" imageScaling="proportionallyUpOrDown" inset="2" pullsDown="YES" arrowPosition="noArrow" id="8bV-Aa-zHf">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="7Vp-Rc-UbT">
@ -1548,7 +1548,7 @@ Gw
<popUpButton key="view" id="MAv-S5-diZ">
<rect key="frame" x="0.0" y="14" width="43" height="30"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<popUpButtonCell key="cell" type="bevel" bezelStyle="regularSquare" image="popUpButtonCell:8bV-Aa-zHf:image" imagePosition="only" alignment="right" lineBreakMode="truncatingTail" refusesFirstResponder="YES" imageScaling="proportionallyUpOrDown" inset="2" pullsDown="YES" arrowPosition="noArrow" id="WVW-Wo-mc9">
<popUpButtonCell key="cell" type="bevel" bezelStyle="regularSquare" image="Chip" imagePosition="only" alignment="right" lineBreakMode="truncatingTail" refusesFirstResponder="YES" imageScaling="proportionallyUpOrDown" inset="2" pullsDown="YES" arrowPosition="noArrow" id="WVW-Wo-mc9">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="Gc4-Or-LMB">
@ -1678,9 +1678,9 @@ Gw
<toolbarItem implicitItemIdentifier="F5BAA7C3-C922-4726-B2A8-8A0DE12714FC" label="▬" paletteLabel="Vol Dn" image="NSTouchBarAudioOutputVolumeLowTemplate" id="hS6-wo-pAT">
<nil key="toolTip"/>
<size key="minSize" width="30" height="17"/>
<size key="maxSize" width="30" height="43"/>
<size key="maxSize" width="30.5" height="43"/>
<button key="view" verticalHuggingPriority="750" id="amQ-uj-Tj3">
<rect key="frame" x="6" y="14" width="30" height="30"/>
<rect key="frame" x="6" y="14" width="30.5" height="30"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="bevel" bezelStyle="rounded" image="NSTouchBarAudioOutputVolumeLowTemplate" imagePosition="only" alignment="center" refusesFirstResponder="YES" imageScaling="proportionallyUpOrDown" inset="2" id="lNO-83-703">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
@ -1694,9 +1694,9 @@ Gw
<toolbarItem implicitItemIdentifier="0228EA55-4F19-4473-A924-6F4C7A50EB97" label="" paletteLabel="Vol Up" image="NSTouchBarAudioOutputVolumeMediumTemplate" id="AMa-TQ-7Ol">
<nil key="toolTip"/>
<size key="minSize" width="30" height="17"/>
<size key="maxSize" width="30" height="43"/>
<size key="maxSize" width="30.5" height="43"/>
<button key="view" verticalHuggingPriority="750" id="5X8-Hl-B1g">
<rect key="frame" x="6" y="14" width="30" height="30"/>
<rect key="frame" x="6" y="14" width="30.5" height="30"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="bevel" bezelStyle="rounded" image="NSTouchBarAudioOutputVolumeMediumTemplate" imagePosition="only" alignment="center" refusesFirstResponder="YES" imageScaling="proportionallyUpOrDown" inset="2" id="jbz-XG-aU0">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
@ -1724,7 +1724,7 @@ Gw
<toolbarItem implicitItemIdentifier="75D731EB-3958-43CF-B41F-E9B3CF3DB013" label="Mode" paletteLabel="Mode" title="Normal" sizingBehavior="auto" id="eSg-vU-9jb">
<nil key="toolTip"/>
<popUpButton key="view" verticalHuggingPriority="750" id="zbq-Ya-yng">
<rect key="frame" x="0.0" y="14" width="100" height="24"/>
<rect key="frame" x="0.0" y="14" width="79" height="25"/>
<autoresizingMask key="autoresizingMask"/>
<popUpButtonCell key="cell" type="roundTextured" title="Normal" bezelStyle="texturedRounded" alignment="left" lineBreakMode="truncatingTail" refusesFirstResponder="YES" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" selectedItem="GOP-dB-hxr" id="gvK-7N-vUR">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
@ -1948,7 +1948,7 @@ Gw
<subviews>
<popUpButton translatesAutoresizingMaskIntoConstraints="NO" id="49f-8R-QCc" userLabel="Disk1 Button">
<rect key="frame" x="-5" y="75" width="109" height="99"/>
<popUpButtonCell key="cell" type="bevel" bezelStyle="regularSquare" image="popUpButtonCell:8bV-Aa-zHf:image" imagePosition="only" alignment="left" lineBreakMode="truncatingTail" refusesFirstResponder="YES" imageScaling="proportionallyUpOrDown" inset="2" pullsDown="YES" arrowPosition="noArrow" altersStateOfSelectedItem="NO" id="CNs-lh-urM" userLabel="Disk1 Pop Up Button Cell">
<popUpButtonCell key="cell" type="bevel" bezelStyle="regularSquare" image="popUpButtonCell:CNs-lh-urM:image" imagePosition="only" alignment="left" lineBreakMode="truncatingTail" refusesFirstResponder="YES" imageScaling="proportionallyUpOrDown" inset="2" pullsDown="YES" arrowPosition="noArrow" altersStateOfSelectedItem="NO" id="CNs-lh-urM" userLabel="Disk1 Pop Up Button Cell">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="N33-K0-nba" userLabel="Disk1 Menu">
@ -2000,7 +2000,7 @@ Gw
</popUpButton>
<popUpButton translatesAutoresizingMaskIntoConstraints="NO" id="QDr-Cp-9QQ" userLabel="Disk2 Button">
<rect key="frame" x="-5" y="0.0" width="109" height="99"/>
<popUpButtonCell key="cell" type="bevel" bezelStyle="regularSquare" image="popUpButtonCell:8bV-Aa-zHf:image" imagePosition="only" alignment="left" lineBreakMode="truncatingTail" refusesFirstResponder="YES" imageScaling="proportionallyUpOrDown" inset="2" pullsDown="YES" arrowPosition="noArrow" altersStateOfSelectedItem="NO" selectedItem="28N-X8-n7Q" id="8FA-1D-k8p">
<popUpButtonCell key="cell" type="bevel" bezelStyle="regularSquare" image="popUpButtonCell:CNs-lh-urM:image" imagePosition="only" alignment="left" lineBreakMode="truncatingTail" refusesFirstResponder="YES" imageScaling="proportionallyUpOrDown" inset="2" pullsDown="YES" arrowPosition="noArrow" altersStateOfSelectedItem="NO" selectedItem="28N-X8-n7Q" id="8FA-1D-k8p">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="8He-mk-LVI">
@ -139134,7 +139134,7 @@ fRFJAH0RSwB9EU0AfSLtAH0i8gB9Iv8AfSMCAH0jDwB9IxQAfSMcAH0jHwB9IyQAfSMsAAAAAAAABAEA
AAAAAAAAUQAAAAAAAAAAAAAAAAB9Iy8
</mutableData>
</image>
<image name="popUpButtonCell:8bV-Aa-zHf:image" width="1" height="1">
<image name="popUpButtonCell:CNs-lh-urM:image" width="1" height="1">
<mutableData key="keyedArchiveRepresentation">
YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMSAAGGoF8QD05T
S2V5ZWRBcmNoaXZlctEICVRyb290gAGvEBcLDBkaIRQmKywzNjs+P0RHSEtVXV5iZVUkbnVsbNYNDg8Q

View File

@ -299,8 +299,8 @@ KEY TXT MIX HGR 80C ALT
func DisplayMemory() {
var memory = ""
for i : UInt16 in stride(from: mem_1_addr, to: mem_1_addr + 0x21F, by: 16) {
memory += hexLine16(addr: i) + " " + textLine16(addr: i) + "\n"
for i : UInt32 in stride(from: UInt32(mem_1_addr), to: UInt32(mem_1_addr) + 0x21F, by: 16) {
memory += hexLine16(addr: UInt16(i & 0xFFFF)) + " " + textLine16(addr: UInt16(i & 0xFFFF)) + "\n"
}
DispatchQueue.main.async {

View File

@ -264,12 +264,14 @@ INLINE int m6502_Step(void) {
disNewInstruction();
switch ( fetch() ) {
#include "6502_std.h" // Standard 6502 instructions
//#include "6502_und.h" // Undocumented 6502 instructions
#include "6502_C.h" // Extended 65C02 instructions
#include "6502_std.h" // Standard 6502 instructions
//#include "6502_und.h" // Undocumented 6502 instructions
#include "6502_C.h" // Extended 65C02 instructions
#include "6502_C_Rockwell.h" // Extended 65C02 instructions
default:
dbgPrintf("%04X: Unimplemented Instruction 0x%02X\n", m6502.PC -1, memread( m6502.PC -1 ));
// printf("%04X: Unimplemented Instruction 0x%02X\n", m6502.PC -1, memread( m6502.PC -1 ));
m6502.interrupt = INV;
return 2;
} // switch fetch16

View File

@ -235,16 +235,19 @@ extern double * pdl_diffarr;
extern double mips;
extern double mhz;
#define DEFAULT_FPS 30U
#define DEFAULT_FPS 60U
#define DEF_VIDEO_DIV 1U
#define DEF_SPKR_DIV 1U
#define DEF_DRV_LED_DIV 4U
#define ECO_VIDEO_DIV 2U
#define ECO_VIDEO_DIV 4U
#define GAME_FPS 180U // 90U // 120U // 180U // 240U // 480U // 600U
#define GAME_VIDEO_DIV 1U // (GAME_FPS / DEFAULT_FPS)
#define GAME_SPKR_DIV 6U // 16U
//#define GAME_FPS 180U // 90U // 120U // 180U // 240U // 480U // 600U
//#define GAME_VIDEO_DIV 1U // (GAME_FPS / DEFAULT_FPS)
//#define GAME_SPKR_DIV 6U // 16U
#define GAME_FPS 180U // 300U // 240U // 180U // 120U
#define GAME_VIDEO_DIV 1U // 4U // (GAME_FPS / DEFAULT_FPS)
#define GAME_SPKR_DIV 1U // 8U // 16U
extern unsigned int video_fps_divider;
extern unsigned int fps;

View File

@ -1,4 +1,4 @@
//
//
// 6502_und.h
// A2Mac
//
@ -63,7 +63,7 @@
case 0x32: AND( src_ind() ); return 5; // AND (zpg)
case 0x52: EOR( src_ind() ); return 5; // EOR (zpg)
case 0x72: ADC( src_ind() ); return 5; // ADC (zpg)
case 0x92: STA( src_ind() ); return 5; // STA (zpg)
case 0x92: STA( addr_ind() ); return 5; // STA (zpg)
case 0xB2: LDA( src_ind() ); return 5; // LDA (zpg)
case 0xD2: CMP( src_ind() ); return 5; // CMP (zpg)
case 0xF2: SBC( src_ind() ); return 5; // SBC (zpg)
@ -71,14 +71,14 @@
// BIT - imm abs,X zp,X addressing modes
case 0x34: BIT( src_zp_X() ); return 4; // BIT zpg,X
case 0x3C: BIT( src_abs_X() ); return 4; // BIT abs,X
case 0x89: BIT( imm() ); return 2; // BIT imm
case 0x89: BITI( imm() ); return 2; // BIT imm
// DEC INC - acc addressing mode
case 0x1A: INA(); return 2; // INA imm (INC A)
case 0x3A: DEA(); return 2; // DEA imm (DEC A)
// JMP - (abs,X) addressing mode
case 0x7C: JMP( abs_addr_X() ); return 6; // JMP abs,X
case 0x7C: JMP( addr_ind_ind_X()); return 6; // abs_addr_X() ); return 6; // JMP abs,X
// Additional instructions
@ -104,5 +104,59 @@
case 0x1C: TRB( addr_abs() ); return 6; // TRB abs
/// Undocumented NOPs
case 0x02:
case 0x22:
case 0x42:
case 0x62:
case 0x82:
case 0xC2:
case 0xE2: NOP(); fetch(); return 2; // NOP* (2 bytes) (undocumented)
case 0x44: NOP(); fetch(); return 3; // NOP* (2 bytes) (undocumented)
case 0x54:
case 0xD4:
case 0xF4: NOP(); fetch(); return 4; // NOP* (2 bytes) (undocumented)
case 0x5C: NOP(); fetch16(); return 8; // NOP* (3 bytes) (undocumented)
case 0xDC:
case 0xFC: NOP(); fetch16(); return 4; // NOP* (3 bytes) (undocumented)
case 0x03:
case 0x13:
case 0x23:
case 0x33:
case 0x43:
case 0x53:
case 0x63:
case 0x73:
case 0x83:
case 0x93:
case 0xA3:
case 0xB3:
case 0xC3:
case 0xD3:
case 0xE3:
case 0xF3:
case 0x0B:
case 0x1B:
case 0x2B:
case 0x3B:
case 0x4B:
case 0x5B:
case 0x6B:
case 0x7B:
case 0x8B:
case 0x9B:
case 0xAB:
case 0xBB:
case 0xEB:
case 0xFB: NOP(); return 1; // NOP* (1 byte) (undocumented)
#endif /* _6502_C_h */

View File

@ -55,23 +55,23 @@
// RMB SMB - Reset or Set Memory Bit
case 0x07: RMB0( src_zp() ); return 5; // RMB0 zpg, rel
case 0x17: RMB1( src_zp() ); return 5; // RMB1 zpg, rel
case 0x27: RMB2( src_zp() ); return 5; // RMB2 zpg, rel
case 0x37: RMB3( src_zp() ); return 5; // RMB3 zpg, rel
case 0x47: RMB4( src_zp() ); return 5; // RMB4 zpg, rel
case 0x57: RMB5( src_zp() ); return 5; // RMB5 zpg, rel
case 0x67: RMB6( src_zp() ); return 5; // RMB6 zpg, rel
case 0x77: RMB7( src_zp() ); return 5; // RMB7 zpg, rel
case 0x07: RMB0( addr_zp() ); return 5; // RMB0 zpg, rel
case 0x17: RMB1( addr_zp() ); return 5; // RMB1 zpg, rel
case 0x27: RMB2( addr_zp() ); return 5; // RMB2 zpg, rel
case 0x37: RMB3( addr_zp() ); return 5; // RMB3 zpg, rel
case 0x47: RMB4( addr_zp() ); return 5; // RMB4 zpg, rel
case 0x57: RMB5( addr_zp() ); return 5; // RMB5 zpg, rel
case 0x67: RMB6( addr_zp() ); return 5; // RMB6 zpg, rel
case 0x77: RMB7( addr_zp() ); return 5; // RMB7 zpg, rel
case 0x87: SMB0( src_zp() ); return 5; // SMB0 zpg, rel
case 0x97: SMB1( src_zp() ); return 5; // SMB1 zpg, rel
case 0xA7: SMB2( src_zp() ); return 5; // SMB2 zpg, rel
case 0xB7: SMB3( src_zp() ); return 5; // SMB3 zpg, rel
case 0xC7: SMB4( src_zp() ); return 5; // SMB4 zpg, rel
case 0xD7: SMB5( src_zp() ); return 5; // SMB5 zpg, rel
case 0xE7: SMB6( src_zp() ); return 5; // SMB6 zpg, rel
case 0xF7: SMB7( src_zp() ); return 5; // SMB7 zpg, rel
case 0x87: SMB0( addr_zp() ); return 5; // SMB0 zpg, rel
case 0x97: SMB1( addr_zp() ); return 5; // SMB1 zpg, rel
case 0xA7: SMB2( addr_zp() ); return 5; // SMB2 zpg, rel
case 0xB7: SMB3( addr_zp() ); return 5; // SMB3 zpg, rel
case 0xC7: SMB4( addr_zp() ); return 5; // SMB4 zpg, rel
case 0xD7: SMB5( addr_zp() ); return 5; // SMB5 zpg, rel
case 0xE7: SMB6( addr_zp() ); return 5; // SMB6 zpg, rel
case 0xF7: SMB7( addr_zp() ); return 5; // SMB7 zpg, rel

View File

@ -31,7 +31,7 @@
#define CLK_WAIT
#define DEBUGGER
//#define DISASSEMBLER
#undef DISASSEMBLER
#define FETCH_ADDR disass_addr
@ -85,9 +85,10 @@ INLINE int m6502_Step_dbg(void) {
disNewInstruction();
switch ( fetch() ) {
#include "6502_std.h" // Standard 6502 instructions
//#include "6502_und.h" // Undocumented 6502 instructions
#include "6502_C.h" // Extended 65C02 instructions
#include "6502_std.h" // Standard 6502 instructions
//#include "6502_und.h" // Undocumented 6502 instructions
#include "6502_C.h" // Extended 65C02 instructions
#include "6502_C_Rockwell.h" // Extended 65C02 instructions
default:
dbgPrintf("%04X: Unimplemented Instruction 0x%02X\n", m6502.PC -1, memread( m6502.PC -1 ));

View File

@ -17,9 +17,10 @@ INLINE int m6502_Disass_1_Instr(void) {
_disNewInstruction();
switch ( _fetch_dis() ) {
#include "6502_std.h" // Standard 6502 instructions
//#include "6502_und.h" // Undocumented 6502 instructions
#include "6502_C.h" // Extended 65C02 instructions
#include "6502_std.h" // Standard 6502 instructions
//#include "6502_und.h" // Undocumented 6502 instructions
#include "6502_C.h" // Extended 65C02 instructions
#include "6502_C_Rockwell.h" // Extended 65C02 instructions
default:
dbgPrintf("%04X: Unimplemented Instruction 0x%02X\n", m6502.PC -1, _memread_dis( m6502.PC -1 ));

View File

@ -48,6 +48,14 @@ INSTR void BIT( uint8_t src ) {
set_flags_Z(m6502.A & src);
#endif
}
INSTR void BITI( uint8_t src ) {
dbgPrintf("BIT(%02X) ", src);
disPrintf(disassembly.inst, "BIT");
#ifndef DISASSEMBLER
set_flags_Z(m6502.A & src);
#endif
}
/**
TRB - Test and Reset Bits

View File

@ -45,8 +45,9 @@ INSTR int BRK(void) {
m6502.B = 1;
PUSH( getFlags().SR );
m6502.I = 1;
m6502.PC = memread16(IRQ_VECTOR);
m6502.interrupt = BREAK;
m6502.D = 0;
m6502.PC = memread16_high(IRQ_VECTOR);
// m6502.interrupt = BREAK;
#endif
return 7;
}

View File

@ -1028,9 +1028,9 @@ INLINE uint16_t memread16_low( uint16_t 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 );
//}
INLINE uint16_t memread16_high( uint16_t addr ) {
return * (uint16_t*) ( RDHIMEM + addr );
}
INLINE uint16_t memread16( uint16_t addr ) {
// if (addr >= 0xC000) {
@ -1380,7 +1380,7 @@ INLINE uint16_t _addr_ind_dbg(void) {
return addr;
}
INLINE uint16_t _addr_ind_dis(void) {
_disPrintf(disassembly.oper, sizeof(disassembly.oper), "($%02X,X)", memread8(m6502.PC) );
_disPrintf(disassembly.oper, sizeof(disassembly.oper), "($%02X)", memread8(m6502.PC) );
_disPrintf(disassembly.comment, sizeof(disassembly.comment), "ind_addr:%04X", memread16( memread8(m6502.PC)) );
return memread16( _fetch_dis() );
@ -1430,6 +1430,32 @@ INLINE uint8_t _src_X_ind_dis(void) {
// return WRLOMEM + addr_ind_X();
//}
/**
Used only by [0x7C] JMP (ind,X) in 65C02)
X,ind .... X-indexed, indirect OPC ($LL,X)
operand is zeropage address;
effective address is word in (LL + X, LL + X + 1), inc. without carry: C.w($00LL + X)
**/
INLINE uint16_t _addr_ind_ind_X(void) {
return memread16( (uint16_t)(_fetch16() + m6502.X) );
}
INLINE uint16_t _addr_ind_ind_X_rd_dbg(void) {
return _memread16_dbg( (uint16_t)(_fetch16() + m6502.X) );
}
INLINE uint16_t _addr_ind_ind_X_dbg(void) {
uint16_t addr = _memread16_dbg( (uint16_t)(_fetch16() + m6502.X));
check_mem_wr_bp(addr); // write debug on the target address
return addr;
}
INLINE uint16_t _addr_ind_ind_X_dis(void) {
_disPrintf(disassembly.oper, sizeof(disassembly.oper), "($%02X,X)", memread16(m6502.PC) );
_disPrintf(disassembly.comment, sizeof(disassembly.comment), "ind_addr:%04X", memread16( memread16(m6502.PC) + m6502.X) );
return memread16( (uint16_t)(_fetch16_dis() + m6502.X) );
}
/**
ind,Y .... indirect, Y-indexed OPC ($LL),Y
operand is zeropage address;

View File

@ -408,6 +408,7 @@ INLINE void ioWrite( uint16_t addr, uint8_t val );
INLINE uint8_t memread8_low( uint16_t addr );
INLINE uint8_t memread8_high( uint16_t addr );
INLINE uint8_t memread8( uint16_t addr );
INLINE uint16_t memread16_high( uint16_t addr );
INLINE uint16_t memread16_low( uint16_t addr );
INLINE uint16_t memread16( uint16_t addr );
INLINE uint8_t _memread( uint16_t addr );
@ -465,6 +466,9 @@ INLINE uint8_t _src_ind_dis(void);
INLINE uint16_t _addr_ind_X(void);
INLINE uint16_t _addr_ind_X_dbg(void);
INLINE uint16_t _addr_ind_X_dis(void);
INLINE uint16_t _addr_ind_ind_X(void);
INLINE uint16_t _addr_ind_ind_X_dbg(void);
INLINE uint16_t _addr_ind_ind_X_dis(void);
INLINE uint8_t _src_X_ind(void);
INLINE uint8_t _src_X_ind_dbg(void);
INLINE uint8_t _src_X_ind_dis(void);
@ -513,6 +517,7 @@ INLINE uint8_t _src_zp_Y_dis(void);
#define addr_ind() _addr_ind_dis()
#define src_ind() _src_ind_dis()
#define addr_ind_X() _addr_ind_X_dis()
#define addr_ind_ind_X() _addr_ind_ind_X_dis()
#define src_X_ind() _src_X_ind_dis()
#define addr_ind_Y() _addr_ind_Y_dis()
#define src_ind_Y() _src_ind_Y_dis()
@ -546,6 +551,7 @@ INLINE uint8_t _src_zp_Y_dis(void);
#define addr_ind() _addr_ind_dbg()
#define src_ind() _src_ind_dbg()
#define addr_ind_X() _addr_ind_X_dbg()
#define addr_ind_ind_X() _addr_ind_ind_X_dbg()
#define src_X_ind() _src_X_ind_dbg()
#define addr_ind_Y() _addr_ind_Y_dbg()
#define src_ind_Y() _src_ind_Y_dbg()
@ -579,6 +585,7 @@ INLINE uint8_t _src_zp_Y_dis(void);
#define addr_ind() _addr_ind()
#define src_ind() _src_ind()
#define addr_ind_X() _addr_ind_X()
#define addr_ind_ind_X() _addr_ind_ind_X()
#define src_X_ind() _src_X_ind()
#define addr_ind_Y() _addr_ind_Y()
#define src_ind_Y() _src_ind_Y()