1
0
mirror of https://github.com/fadden/6502bench.git synced 2025-09-27 03:16:55 +00:00

Minor fixes

Change + save + undo + change was being treated as non-dirty.

Added link to "export" feature to documentation TOC.

Added keyboard shortcut for high part in data operand editor.

Corrected various things in the tutorial.
This commit is contained in:
Andy McFadden
2019-09-27 13:43:58 -07:00
parent 7739f640f5
commit e898ef9568
4 changed files with 57 additions and 32 deletions

View File

@@ -1657,6 +1657,14 @@ namespace SourceGen {
mUndoList.Add(changeSet); mUndoList.Add(changeSet);
mUndoTop = mUndoList.Count; mUndoTop = mUndoList.Count;
// If the user makes a change, saves the file, hits undo, then makes another change,
// the "undo top" and "save index" will be equal, which will make us think the
// file doesn't need to be saved. In reality there is no longer any undo index that
// matches the saved file state.
if (mUndoSaveIndex >= mUndoTop) {
mUndoSaveIndex = -1;
}
} }
public string DebugGetUndoRedoHistory() { public string DebugGetUndoRedoHistory() {

View File

@@ -103,6 +103,7 @@ and 65816 code. The official web site is
<li><a href="codegen.html#cc65">cc65</a></li> <li><a href="codegen.html#cc65">cc65</a></li>
<li><a href="codegen.html#merlin32">Merlin 32</a></li> <li><a href="codegen.html#merlin32">Merlin 32</a></li>
</ul></li> </ul></li>
<li><a href="codegen.html#export-source">Exporting Source Code</a>
</ul></li> </ul></li>
<li><a href="settings.html">Properties &amp; Settings</a> <li><a href="settings.html">Properties &amp; Settings</a>
@@ -171,7 +172,7 @@ and 65816 code. The official web site is
<div id="footer"> <div id="footer">
<hr/> <hr/>
<p>Copyright 2018 faddenSoft</p> <p>Copyright 2019 faddenSoft</p>
</div> </div>
</body> </body>
</html> </html>

View File

@@ -28,7 +28,7 @@ manual is recommended.</p>
<p>Start by launching SourceGen. The initial screen has a large <p>Start by launching SourceGen. The initial screen has a large
center area with some buttons, and some mostly-empty windows on the sides. center area with some buttons, and some mostly-empty windows on the sides.
The buttons are shortcuts for menu items in the File menu.</p> The buttons are shortcuts for items in the File menu.</p>
<h3>Create the project</h3> <h3>Create the project</h3>
@@ -63,7 +63,7 @@ or data. This is a standard Windows "list view", so you can select a row
by left-clicking anywhere in it. Use Ctrl+Click to toggle the selection by left-clicking anywhere in it. Use Ctrl+Click to toggle the selection
on individual lines, and Shift+Click to select a range of lines. You can on individual lines, and Shift+Click to select a range of lines. You can
move the selection around with the up/down arrow keys and PgUp/PgDn. Scroll move the selection around with the up/down arrow keys and PgUp/PgDn. Scroll
the window with the mouse wheel or by grabbing the scroll bar.</p> the window with the mouse wheel or by dragging the scroll bar.</p>
<p>Each row is divided into nine columns. You can adjust the column <p>Each row is divided into nine columns. You can adjust the column
widths by clicking and dragging the column dividers in the header. The widths by clicking and dragging the column dividers in the header. The
@@ -97,7 +97,7 @@ highlights and contents of other windows change.</p>
selection jumps to L1017. When an operand references an in-file address, selection jumps to L1017. When an operand references an in-file address,
double-clicking on the opcode will take you to it. (Double-clicking on double-clicking on the opcode will take you to it. (Double-clicking on
the operand itself opens a format editor; more on that later.)</p> the operand itself opens a format editor; more on that later.)</p>
<p>With L1017 highlighted, double-click on the line that appears in the <p>With line L1017 selected, double-click on the line that appears in the
References window. Note the selection jumps to L1002. You can immediately References window. Note the selection jumps to L1002. You can immediately
jump to any reference.</p> jump to any reference.</p>
<p>At the top of the Symbols window on the right side of the screen is a <p>At the top of the Symbols window on the right side of the screen is a
@@ -229,7 +229,9 @@ as a hexadecimal value.</p>
Actions &gt; Edit Label. Enter "IS_OK", and hit Enter. (NOTE: labels are Actions &gt; Edit Label. Enter "IS_OK", and hit Enter. (NOTE: labels are
case-sensitive, so it needs to match the operand at $2005 exactly.) You'll case-sensitive, so it needs to match the operand at $2005 exactly.) You'll
see the new label appear, and the operand at line $2005 will use it.</p> see the new label appear, and the operand at line $2005 will use it.</p>
<p>There's an easier way. Double-click on the "BCC" opcode at address <p>There's an easier way. Select Edit &gt; Undo twice, to get back to the
state where line $2005 says "BCC L2009", and line $2009 has the label
L2009. Now double-click on the "BCC" opcode (not operand) at address
$2005. This moves the selection to $2009. Double-click on the label field, $2005. This moves the selection to $2009. Double-click on the label field,
and enter "IS_OK". Hit "OK".</p> and enter "IS_OK". Hit "OK".</p>
<p>You should now see that both the operand at $2005 and the label at <p>You should now see that both the operand at $2005 and the label at
@@ -237,9 +239,19 @@ $2009 have changed to IS_OK, accomplishing what we wanted to do in a
single step. The key difference is that we haven't explicitly set a single step. The key difference is that we haven't explicitly set a
format for the BCC operand -- we just defined a label, and SourceGen format for the BCC operand -- we just defined a label, and SourceGen
used it automatically.</p> used it automatically.</p>
<p>We could do the exact same thing by using Edit Operand on <p>There's another way to do the same thing that is sometimes
the BCC line, clicking the "Create Label" button, and typing "IS_OK". more convenient. Double-click the "IS_OK" label on line $2009, hit
Sometimes one approach is more convenient than the other.</p> the Delete key to erase it, and click "OK". This removes the label,
so SourceGen generates L2009 again. Double-click on the operand on
line $2005 ("L2009") to open the operand editor, then in the bottom left
panel click "Create Label". Type "IS_OK", then click "OK". Make sure the
radio buttons are still set to Default format, and click "OK".</p>
<p>You should again have the IS_OK label at line $2009, just like it did
when you created the label on line $2009, because you did exactly the
same thing. You just opened the label editor from the Edit Operand dialog
instead of the code list. In many cases, particularly when operand's
target address is far off screen, it's more convenient to work through the
operand editor.</p>
<h3>Editing Data Operands</h3> <h3>Editing Data Operands</h3>
@@ -344,13 +356,14 @@ a bit more meaningful by loading an additional platform
symbol file. Select Edit &gt; Project Properties, then the Symbol Files symbol file. Select Edit &gt; Project Properties, then the Symbol Files
tab. Click Add Symbol Files. The file browser starts in the RuntimeData tab. Click Add Symbol Files. The file browser starts in the RuntimeData
directory. In the Apple folder, select <code>Applesoft.sym65</code>, and directory. In the Apple folder, select <code>Applesoft.sym65</code>, and
click Open. Click "OK" to close the project properties window.</p> click "Open". Click "OK" to close the project properties window.</p>
<p>The STA instructions now reference <code>AMPERV</code>, which is noted <p>The <code>STA</code> instructions now reference <code>BAS_AMPERV</code>,
as a call vector. We can see the code setting up a jump (opcode $4c) to which is noted as a code vector. We can see the code setting up a jump
$1d70. As it happens, the start address of the code is $1d60 -- the last (opcode $4c) to $1d70. As it happens, the start address of the code
four digits of the filename -- so let's make that change. Double-click is $1d60 -- the last four digits of the filename -- so let's make that
the initial .ORG statement, and change it from $2000 to $1d60. We can now change. Double-click the initial .ORG statement, and change it from
see that $1d70 starts right after this initial chunk of code.</p> $2000 to $1d60. We can now see that $1d70 starts right after this
initial chunk of code.</p>
<p>Select the line with address $1d70, then Actions &gt; Hint As Code <p>Select the line with address $1d70, then Actions &gt; Hint As Code
Entry Point. Entry Point.
@@ -359,9 +372,9 @@ of the file is still data. The code at $1d70 searches through a table at
$1d88 for a match with the contents of the accumulator. If it finds a match, $1d88 for a match with the contents of the accumulator. If it finds a match,
it loads bytes from tables at $1da6 and $1d97, pushes them on the stack, it loads bytes from tables at $1da6 and $1d97, pushes them on the stack,
and the JMPs away. This code is pushing a return address onto the stack. and the JMPs away. This code is pushing a return address onto the stack.
When the code at CHRGET returns, it'll return to that address. Because of When the code at <code>BAS_CHRGET</code> returns, it'll return to that
a quirk of the 6502 architecture, the address pushed must be the target address. Because of a quirk of the 6502 architecture, the address pushed
address minus one.</p> must be the desired address minus one.</p>
<p>The first byte in the first address table at $1d97 (which has the auto-label <p>The first byte in the first address table at $1d97 (which has the auto-label
L1D97) is $b4. The first byte in the second table is $1d. So the first L1D97) is $b4. The first byte in the second table is $1d. So the first
address we want is $1db4 + 1 = $1db5.</p> address we want is $1db4 + 1 = $1db5.</p>
@@ -408,7 +421,7 @@ SourceGen asks for confirmation, click Discard & Continue.</p>
<h3>Going Deeper</h3> <h3>Going Deeper</h3>
<p>Start a new project. Select "Generic 6502". For the data file, navigate <p>Start a new project. Select "Generic 6502". For the data file, navigate
to the Examples directory, then from the Tutorials directory to the Examples directory, then from the Tutorial directory
select "Tutorial2".</p> select "Tutorial2".</p>
<p>The first thing you'll notice is that we immediately ran into a BRK, <p>The first thing you'll notice is that we immediately ran into a BRK,
which is a pretty reliable sign that we're not in a code section. The which is a pretty reliable sign that we're not in a code section. The
@@ -470,7 +483,7 @@ as the dialog opens; you don't need to click around first.) If all
went well, the operands should now read <code>LDA #&lt;XDATA</code> went well, the operands should now read <code>LDA #&lt;XDATA</code>
and <code>LDA #&gt;XDATA</code>.</p> and <code>LDA #&gt;XDATA</code>.</p>
<p>Let's give the pointer a name. Select line $203d, and use <p>Let's give the pointer a name. Select line $203d, and use
Actions &gt; Edit Local Variable Table to create an empty table. Actions &gt; Create Local Variable Table to create an empty table.
Click "New Symbol" on the right side. Set the Label field to "PTR1", Click "New Symbol" on the right side. Set the Label field to "PTR1",
the Value field to $02, and the width to 2 (it's a 2-byte pointer). Leave the Value field to $02, and the width to 2 (it's a 2-byte pointer). Leave
the Address button selected. Click "OK" to create the entry, and then the Address button selected. Click "OK" to create the entry, and then
@@ -556,23 +569,26 @@ than the "nearby" logic.</p>
avoid explicitly labeling every part of a multi-byte data item. For now, avoid explicitly labeling every part of a multi-byte data item. For now,
use Edit &gt; Undo to switch it back on.</p> use Edit &gt; Undo to switch it back on.</p>
<p>The code at $2085 looks a bit strange. LDX, then a BIT with a weird <p>The code at $2085 looks a bit strange. <code>LDX</code>, then a
symbol, then another LDX. If you look at the "bytes" column, you'll notice <code>BIT</code> with a weird symbol, then another <code>LDX</code>. If
that the three-byte BIT instruction has only one byte on its line. The you look at the "bytes" column, you'll notice that the three-byte
trick here is that the <code>LDX #$01</code> is embedded inside the BIT <code>BIT</code> instruction has only one byte on its line. The
instruction. When the code runs through here, X is set to $00, then trick here is that the <code>LDX #$01</code> is embedded inside the
the BIT instruction sets some flags, then the STA runs. Several lines <code>BIT</code> instruction. When the code runs through here, X is set
down there's a BNE to $2088, which is in the middle of the BIT instruction. to $00, then the <code>BIT</code> instruction sets some flags, then the
It loads X with $01, then also continues to the STA.</p> <code>STA</code> runs. Several lines down there's a <code>BNE</code>
<p>Embedded instructions are unusual but not unheard-of. When you see the to $2088, which is in the middle of the <code>BIT</code> instruction.
It loads X with $01, then also continues to the <code>STA</code>.</p>
<p>Embedded instructions are unusual but not unheard-of. (This trick is
used extensively in Microsoft BASICs, such as Applesoft.) When you see the
extra symbol in the opcode field, you need to look closely at what's going extra symbol in the opcode field, you need to look closely at what's going
on.</p> on.</p>
<h3>Go Forth</h3> <h3>Go Forth</h3>
<p>That's it for the tutorials. There's significantly more detail on <p>That's it for the tutorials. Significantly more detail on
all aspects of SourceGen in the manual.</p> all aspects of SourceGen can be found in the manual.</p>
<p>While you can do some fancy things, nothing you do will alter the <p>While you can do some fancy things, nothing you do will alter the
data file. The assembled output will always match the original. So data file. The assembled output will always match the original. So
don't be afraid to play around.</p> don't be afraid to play around.</p>

View File

@@ -113,7 +113,7 @@ limitations under the License.
<StackPanel Orientation="Horizontal" Margin="20,4,0,0" <StackPanel Orientation="Horizontal" Margin="20,4,0,0"
IsEnabled="{Binding ElementName=radioSimpleDataSymbolic, Path=IsChecked}"> IsEnabled="{Binding ElementName=radioSimpleDataSymbolic, Path=IsChecked}">
<RadioButton Name="radioSymbolPartLow" GroupName="Part" Content="Low"/> <RadioButton Name="radioSymbolPartLow" GroupName="Part" Content="Low"/>
<RadioButton Name="radioSymbolPartHigh" GroupName="Part" Content="High" Margin="8,0,0,0"/> <RadioButton Name="radioSymbolPartHigh" GroupName="Part" Content="H_igh" Margin="8,0,0,0"/>
<RadioButton Name="radioSymbolPartBank" GroupName="Part" Content="Bank" Margin="8,0,8,0"/> <RadioButton Name="radioSymbolPartBank" GroupName="Part" Content="Bank" Margin="8,0,8,0"/>
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>