6502bench SourceGen: Advanced Topics
@@ -263,7 +263,7 @@ not help you debug 6502 projects.6502bench SourceGen: Instruction and Data Analysis
@@ -137,22 +137,22 @@ the changes are made, the Anattrib array and other data structures are regenerated.Data format editing can create some tricky situations. For example, -suppose you have 8 bytes that have been formatted as two 32-bit words: +suppose you have 8 bytes that have been formatted as two 32-bit words:
1000: 68690074 .dd4 $74006968 1004: 65737400 .dd4 $00747365-You realize these are null-terminated strings, select both words, and -reformat them: +
You realize these are null-terminated strings, select both words, and +reformat them:
1000: 686900 .zstr "hi" 1003: 74657374+ .zstr "test"-Seems simple enough. Under the hood, SourceGen created three changes: +
Seems simple enough. Under the hood, SourceGen created three changes:
- At offset +000000, replace the current format descriptor (4-byte numeric) with a 3-byte null-terminated string descriptor. @@ -176,21 +176,21 @@ for every instruction:
- Continue. Execution always continues at the next instruction.
Examples:
LDA
,STA
,AND
, -NOP
. +NOP
. - Don't continue. The next instruction to be executed can't be
determined from the file data (unless you're disassembling the
system ROM around the BRK vector).
- Examples:
RTS
,BRK
. + Examples:RTS
,BRK
. - Branch always. The operand specifies the next instruction address.
- Examples:
JMP
,BRA
,BRL
. + Examples:JMP
,BRA
,BRL
. - Branch sometimes. Execution may continue at the operand address,
or may execute the following instruction. If we know the value of
the flags in the processor status register, we can eliminate one
possibility. Examples:
BCC
,BEQ
, -BVS
. +BVS
. - Call subroutine. Execution will continue at the operand address,
and is expected to also continue at the following instruction.
- Examples:
JSR
,JSL
. + Examples:JSR
,JSL
. - Jumping indirectly through an address outside the file, e.g. - storing an address in zero-page memory and jumping through it. + storing an address in zero-page memory and jumping through it.
- Jumping to an address by pushing the location onto the stack,
- then executing an
RTS
. - - Self-modifying code, e.g. overwriting a
JMP
instruction. + then executing anRTS
.
+ - Self-modifying code, e.g. overwriting a
JMP
instruction.
Branch targets are added to a list. When the current run of instructions @@ -247,10 +247,10 @@ override on the instruction following the PLP fixes things.)
Some other things that the code analyzer can't recognize automatically:
Sometimes the indirect jump targets are coming from a table of addresses in the file. If so, these can be formatted as addresses, @@ -311,7 +311,7 @@ byte values.
6502bench SourceGen: Code Generation & Assembly
@@ -65,7 +65,7 @@ will be shown with the detected version number. If the assembler executable isn't configured, "[latest version]" will be shown instead of a version number.The Settings button will take you directly to the assembler configuration -tab in the application settings dialog. +tab in the application settings dialog.
Hit the Generate button to generate the source code into a file on disk. The file will use the project name, with the ".dis65" replaced by "_<assembler>.S".
@@ -107,7 +107,7 @@ so any failure is an opportunity for improvement.6502bench SourceGen: Editors
@@ -92,7 +92,7 @@ to format. For example, to format two bytes as a 16-bit word, you must select both bytes in the editor. (If you click on the first item, then Shift+double-click on the operand field of the last item, you can do this very quickly.) The selection does not need to be contiguous: you -can use Control+click to select scattered items.) +can use Control+click to select scattered items.)If the range is discontiguous, or crosses a visual boundary such as a change in address, a user-specified label, or a long comment or note, the selection will be split into smaller regions. A message at the @@ -247,7 +247,7 @@ marked as "constant" will not, though you can still specify them manually.
6502bench SourceGen: End Notes
@@ -76,7 +76,7 @@ are solid enough to excuse the excesses.6502bench SourceGen
SourceGen is an interactive disassembler for 6502, 65C02, 65802, and 65816 code. The official web site is @@ -20,31 +20,31 @@ and 65816 code. The official web site is
Contents
- Starting a New Project
- Opening an Existing Project -
- Working With a Project +
- Working With a Project
- Code List
- Undo & Redo @@ -58,10 +58,10 @@ and 65816 code. The official web site is
- Quick Format Toggle
- Toggle Data Scan
- Copying to Clipboard -
- Edit Address
- Edit Status Flags @@ -72,77 +72,77 @@ and 65816 code. The official web site is
- Edit Long Comment
- Edit Note
- Edit Project Symbol -
-
+
Copyright 2018 faddenSoft
6502bench SourceGen: Intro
@@ -148,7 +148,7 @@ disassembly of the instruction stream will come out wrong.SourceGen employs a partial emulation technique that traces the flow of execution. Most of what a given instruction does isn't important; -only its effect on the flow of execution matters. +only its effect on the flow of execution matters.
The code tracing has to start somewhere, so SourceGen uses "code entry point hints" to identify places where execution may begin. By default, @@ -231,7 +231,7 @@ L1009 CLC assumes those are data. Further, the functions at those addresses may also be considered data unless some bit of code reachable from L1009 calls into them. If you add a code hint to $1003 and $1006, -you'll get better results: +you'll get better results:
.ORG $1000 JMP L1009 @@ -343,13 +343,13 @@ to add comments explaining it. SourceGen projects have three kinds of comments:
- End-of-line comments. As the name implies, these appear at the - end of a line, to the right of the opcode or operand. + end of a line, to the right of the opcode or operand.
- Long comments, also known as multi-line comments. These get a - line all to themselves, and may span multiple lines. + line all to themselves, and may span multiple lines.
- Notes. Like long comments, these get a line to themselves. Unlike long comments, these do not appear in generated assembly code. They are a way for you to leave notes to yourself, perhaps "don't forget - to figure this out" or "this is the cool part". + to figure this out" or "this is the cool part".
Every file offset can have one of each.
@@ -372,9 +372,9 @@ different ways.The label syntax is restricted to a format that should be compatible with most assemblers:
-
-
- 2-32 characters long. -
- Starts with a letter or underscore. -
- Comprised of ASCII letters, numbers, and the underscore. +
- 2-32 characters long. +
- Starts with a letter or underscore. +
- Comprised of ASCII letters, numbers, and the underscore.
Label comparisons are case-sensitive, as is customary for programming languages.
@@ -442,7 +442,7 @@ symbol exists, the reference is used. If the symbol can't be found, the operand is formatted in hex instead.It's important to know this when editing a project. Consider the -following trivial chunk of code: +following trivial chunk of code:
1000: 4c0310 JMP $1003 @@ -596,7 +596,7 @@ L1012 .DD1 $00 the code is actually setting up a single 24-bit address. For clarity, you'd like the output to reflect the fact that it's a single, multi-byte variable. So, if you set a label at $1010, SourceGen removes the -nearby auto labels, and sets the numeric references to use your label: +nearby auto labels, and sets the numeric references to use your label:.ORG $1000 @@ -684,7 +684,7 @@ represent hundreds of bytes and span multiple lines.
In addition, several pseudo-ops are defined for string constants:
@@ -708,7 +708,7 @@ uses in the6502bench SourceGen: Main Window
@@ -68,11 +68,11 @@ most-recently-opened projects will be available.The main project window is divided into five areas:
- Center: the code list. If no project is open, this will instead - have clickable links to open a new or existing project. -
- Top left: cross-reference list. -
- Bottom left: notes list. -
- Top right: symbols list. -
- Bottom right: info on selected line. + have clickable links to open a new or existing project. +
- Top left: cross-reference list. +
- Bottom left: notes list. +
- Top right: symbols list. +
- Bottom right: info on selected line.
Most of the action takes place in the center code list.
@@ -431,7 +431,7 @@ to put the data into individual cells.6502bench SourceGen: Properties & Settings
@@ -63,7 +63,7 @@ or the other. copied to the clipboard. The "Assembler Source" format includes the rightmost columns (label, opcode, operand, and comment), like assembly source code does. The -"Disassembly" format adds the address and bytes on the left. +"Disassembly" format adds the address and bytes on the left.Asm Config
@@ -148,7 +148,7 @@ you later hit Cancel, but the changes are not applied immediately.The choice of CPU determines the set of available instructions, as well as cycle costs and register widths. There are many variations on the 6502, but from the perspective of a disassembler most can be -treated as one of these three: +treated as one of these three:
- MOS 6502. The original 8-bit instruction set.
- WDC W65C02S. Expanded the instruction set and smoothed @@ -244,7 +244,7 @@ you will receive a warning.
6502bench SourceGen: Tools
Hex Dump Viewer
@@ -59,7 +59,7 @@ ASCII.6502bench SourceGen: Tutorials
@@ -43,7 +43,7 @@ window will have some information about the data file, once we choose one. open the Examples folder, then open the "Tutorial" folder. Select the file named "Tutorial1", and click "Open".The filename now appears in the bottom window, along with an indication -of the file's size. +of the file's size.
Click OK to create the project.
@@ -176,7 +176,7 @@ In the Edit Address dialog, type "2000", and hit Enter.)Note the way the code list has changed. When you changed the address, the "JMP $2000" at L1014 found a home inside the bounds of the file, so -the code tracer was able to find the instructions there.
+the code tracer was able to find the instructions there.
From the menu, select Edit > Undo. Notice how everything reverts to the way it was. Now, select Edit > Redo. You can undo any change you make to the project. (The undo history is not saved in @@ -281,7 +281,7 @@ the "Address" radio button. Click "OK".
We just told SourceGen that those 10 bytes are actually five numeric references. SourceGen determined that the addresses are contained in the file, and created labels for each of them. Labels only work if they're -on their own line, so each string is now in a separate ".STR" statement. +on their own line, so each string is now in a separate ".STR" statement.
Use File > Save (or hit Ctrl+S) to save your hard work.
@@ -329,7 +329,7 @@ and navigate to the Examples directory. In A2-Amper-fdraw, selectNot a lot to see here -- just half a dozen lines of loads and stores.
This particular program interfaces with Applesoft BASIC, so we can make it
a bit more meaningful by loading an additional platform
-symbol file. Select Edit > Project Properties, then the Symbol Files
+symbol file. Select Edit > Project Properties, then the Symbol Files
tab. Click Add Symbol Files. The file browser starts in the RuntimeData
directory. In the Apple folder, select Applesoft.sym65
, and
click Open. Click OK to close the project properties window.
Select the line with address $1d70, then Actions > Hint As Code Entry Point. +
Select the line with address $1d70, then Actions > Hint As Code Entry Point. More code appears, but not much -- if you scroll down you'll see that most 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, @@ -352,7 +352,7 @@ address minus one.
The first byte in the first table at $1d97 (which has the auto-label L1D97) is $b4. The first byte in the second table is $1d. So the first address we want is $1db4 + 1 = $1db5.
-Select the line at $1db5, and use Actions > Hint As Code Entry Point. +
Select the line at $1db5, and use Actions > Hint As Code Entry Point. More code appears, but again it's only a few lines. Let's dress this one up a bit. Set a label on the code at $1db5 called "FUNC". At $1d97, edit the data item (double-click on "$b4"), click "Single bytes", then type "FUNC" @@ -380,13 +380,13 @@ we know that they're all code entry points.
Click OK. The table of address bytes should now all be references to symbols -- 15 low parts followed by 15 high parts. If you scroll down, you should see nothing but instructions until you get to the last dozen -bytes at the end of the file. (If this isn't the case, use Edit > Undo, +bytes at the end of the file. (If this isn't the case, use Edit > Undo, then work through the steps again.)
The formatter did the same steps you went through earlier -- set a label, apply the label to the low and high bytes in the table, add a code entry point hint -- but did several of them at once.
-We don't want to save this project, so select File > Close. When +
We don't want to save this project, so select File > Close. When SourceGen asks if you want to continue, click OK.
@@ -395,7 +395,7 @@ SourceGen asks if you want to continue, click OK.