6502bench SourceGen
6502bench is a code development "workbench" for the 65xx family of processors, including the 6502, 65C02, and 65802/65816. It currently features one tool, the SourceGen disassembler.
- Watch demo: see the product in action
- Download source & binaries: 6502bench Releases
- GitHub project: github.com/fadden/6502bench
SourceGen is an industrial-strength disassembler for 6502, 65C02, and 65816 programs. Key features include:
- Fully interactive point-and-click GUI. Define labels, set addresses, add comments, and see the results immediately. Add multi-line comments and have them word-wrapped automatically.
- The disassembly engine traces code execution, automatically finding all instructions reachable from a given starting point. Changes to the processor status flags are tracked, allowing identification of branches that are always/never taken, accurate cycle count listings, and correct analysis of 65816 code with variable-width registers.
- Easy generation of assembly source code in populate formats (currently cc65 and Merlin 32). Cross-assemblers can be invoked from the GUI to verify correctness.
- Symbols and constants are provided for ROM and operating system entry points on several popular systems.
Additional features:
- Analyzer:
- Support for 6502, 65C02, and 65816, including undocumented opcodes.
- Hinting mechanism allows manual identification of code, data, and inline data.
- Editable labels are generated for every branch destination and data target.
- Automatic detection and classification of ASCII strings and runs of identical bytes.
- Symbol files for ROM entry points, operating system constants, and other platform-specific data are stored in plain text files.
- Extension scripts can be defined that automatically reformat code and identify inline data that follows a JSR/JSL.
- User interface:
- "Infinite" undo/redo of all operations.
- Cross-reference tables are generated for every branch and data target address, as well as for external platform symbols.
- Instruction operand formats (hex, decimal, binary, ASCII, symbol) can be set for individual instructions. References to nearby symbols are offset, allowing simple expressions like "addr + 1".
- Data areas can be formatted in various formats, including individual bytes, 16-bit and 24-bit words, addresses, or strings.
- Multi-line comments can be "boxed" for an authentic retro feel.
- Notes can be added that aren't included in generated output. These also function as color-coded bookmarks. Very useful for marking up a work in progress.
- Instruction summaries, including CPU cycles and flags modified, are shown along with a description of the opcode's function.
- Various aspects of the code display can be reconfigured, including upper/lower case, pseudo-opcode naming, and expression formats. These choices are not part of the project definition, so everyone can view a project according to their own personal preferences.
- Code generation:
- Labels can be coaxed from global to local as allowed by the assembler.
- Symbols may be exported from one project and imported into another to facilitate multi-binary disassembly.
- Miscellaneous:
- All data files are stored in text formats (primarly JSON).
- The project file includes nothing from the data file but a CRC. This may allow the project to be shared without violating copyrights (subject to local laws).
SourceGen is written in C# .NET, with the WinForms API for the user interface. The full source code for the project is available on GitHub, licensed under Apache 2.0.