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.
+ +Quick links:
+-
+
- Watch a 9-minute video of + basic product features (from v1.0) +
- See an 8-minute + demonstration of visualizers + in a disassembly of the Apple II game Space Eggs +
- Download source & binaries for the latest version + from the Releases page +
- Check out the + GitHub project +
- SourceGen has been used to disassemble software for the Apple II, + NES (Nintendo Entertainment System), Atari 2600 VCS, and coin-op arcade + systems. Visit 6502disassembly.com to see some + disassembly project examples. +
+ +
SourceGen is an industrial-strength disassembler for 6502, +65C02, and 65816 programs. It runs on Windows 7 or later. 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. Create inline visualizations of + embedded bitmaps and wireframe data, and define animated sequences. +
- Sophisticated static analysis. 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 easier analysis of 65816 code with + variable-width registers. +
- Easy generation of assembly source code in popular formats (currently + 64tass, ACME, 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 (Apple, Atari, Commodore, others). +
- Project files are designed for sharing and collaboration. +
Features in Detail:
+-
+
- Analyzer:
+
-
+
- Support for 6502, 65C02, and 65816, including undocumented + opcodes and the W65C02 extensions. +
- Code tagging mechanism allows manual identification of code start/stop + points and inline data. +
- Editable labels are generated for every branch destination and data + target. +
- Automatic detection and classification of character 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 loaded at runtime. +
- Extension scripts can be defined that automatically reformat code and + identify inline data that follows a JSR, JSL, or BRK. +
+ - 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, character, 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. + Multiple character encodings are supported, including ASCII, high ASCII, + C64 PETSCII, and C64 screen codes. +
- Zero-page variables can be given different labels at different points + in the program. +
- 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. Similarly, symbols can be marked as uncertain by + adding a '?' that is automatically stripped away during code generation. +
- Instruction reference data, such as CPU cycles and flags modified, are + shown along with a description of the opcode's function. Very useful when + encountering rarely-used undocumented instructions. +
- 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 global or local. Use non-unique labels like "@Loop" + for clarity. Labels will be promoted from local to global or renamed to + be unique as required by each assembler. +
- Symbols may be exported from one project and imported into another + to facilitate multi-binary disassembly. +
- Listings can be generated in HTML form for publication on the web. Many + aspects of the output format can be configured. Inline visualizations + are exported as GIF or animated GIF. +
+ - Miscellaneous:
+
-
+
- All project data is stored in text formats (primarily 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). +
- Handy tools: file slicer, file concatenator, CPU instruction reference + chart, ASCII chart, file hex dump. +
- The OMF converter tool can be used to disassemble Apple IIgs executables. +
+
SourceGen is written in C# .NET, using the (free to download) Visual +Studio Community 2019 IDE as the primary development environment. +The user interface uses the Windows Presentation Foundation (WPF) API. +The full source code for the project is available on GitHub, licensed under Apache 2.0.
+ +