1
0
mirror of https://github.com/fadden/6502bench.git synced 2024-11-29 10:50:28 +00:00
A workbench for developing 6502 code
Go to file
Andy McFadden 96a92f0335 Load/save app settings
This change pulls in the settings file code, which is mostly
unchanged except when it comes to saving and restoring the window
location and size.

The old system has been replaced with a PInvoke-based version that
calls the underlying Win32 window placement code.  This is more
likely to be correct when multiple displays are in use, and can
record the un-maximized size of a maximized window.  It leaves a
nasty XML string embedded in the config file, but it's not really
meant to be human-readable anyway.

The sub-window dividers all work completely differently from the way
they did in WinForms, and some of the behavior is a bit obscure
(like noticing when a splitter moves due to keyboard input, and
setting the position in a way that doesn't break the auto-sizing).
Yay WPF.

Still need to preserve column widths.
2019-06-19 18:09:55 -07:00
Asm65 Add more detail to cross references 2019-04-11 16:23:02 -07:00
CodeLab Initial file commit 2018-09-28 10:05:11 -07:00
CommonUtil Experiment on uncategorized data analysis 2019-04-18 15:58:43 -07:00
CommonWinForms Replace BUILD_FOR_WINDOWS with a runtime check 2018-10-01 10:44:24 -07:00
CommonWPF Load/save app settings 2019-06-19 18:09:55 -07:00
ImageSrc Initial file commit 2018-09-28 10:05:11 -07:00
MakeDist Initial file commit 2018-09-28 10:05:11 -07:00
PluginCommon Initial file commit 2018-09-28 10:05:11 -07:00
SourceGen Populate symbol table, with filtering and sorting 2019-06-12 15:14:21 -07:00
SourceGenWPF Load/save app settings 2019-06-19 18:09:55 -07:00
.gitignore Framework for Apple /// (#4) 2018-09-28 16:10:05 -07:00
LICENSE Initial commit 2018-09-26 16:42:52 -07:00
NOTICE.txt Add a NOTICE 2018-10-02 15:16:21 -07:00
README.md Fix crash on asm gen when no settings file exists 2019-04-19 14:43:33 -07:00
WorkBench.sln Add multi-key combo handling for hints 2019-06-04 16:10:55 -07:00

6502bench

Features - Installation - Getting Started - About the Code

6502bench is a code development "workbench" for 6502, 65C02, and 65802/65816 code. It currently features one tool, the SourceGen disassembler.

You can download the source code and build it yourself, or click the Releases tab for pre-built downloads.

NEEDED: ROM/OS symbols for various systems, notably Commodore and Atari home computers.

SourceGen

SourceGen converts machine-language programs to assembly-language source code. It has most of the features you will find in other 6502 disassemblers, as well as many less-common ones.

Key Features

  • 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 for popular cross-assemblers (currently cc65, 64tass, 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.
  • Project files are designed for sharing and collaboration.

A demo video is available on YouTube.

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 (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).

Some planned features are not yet implemented. Notable among them are support for multi-bank 65816 files (IIgs OMF, SNES), and alternate character sets (e.g. PETSCII). Visit the wiki section for the current "TO DO" list.

To learn about the past, check the change log.

Installation

There is currently no installer -- just unzip the archive and run the executable. The data files used by the program are found automatically based on the path to the .EXE file.

SourceGen relies on the .NET Framework. For Windows, you need to have Microsoft .NET Framework v4.6.2 or later installed. Many people will already have this installed. If SourceGen doesn't seem to want to start, download the latest version (v4.7.2) directly from Microsoft. The framework requires Win7 SP1, Win8.1, or Win10 updated through at least the Anniversary Update (1607). (One user who had trouble with the 4.7.2 installer was able to get the 4.6.2 installer to work.)

In theory, SourceGen can work with Mono under Linux and Mac OS X. There appear to be many incompatibilities between .NET and Mono, which have to be worked around in SourceGen. Sometimes these are straightforward, sometimes they're a little weird. Until these issues are handled, running SourceGen under Mono is not recommended.

Getting Started

The best way to get started is by working through the tutorial. Launch SourceGen, hit F1 to open the user manual in your web browser, then look for the Tutorial link in the index. Click it and follow the instructions there.

The tutorial is one of several examples included in the SourceGen distribution. The other directories contain project and data files for completed disassembly projects alongside the original source code, allowing a direct comparison between how the code was written and how SourceGen can display it.

About the Code

All of the code is written in C# .NET, using the (free to download) Visual Studio Community 2017 IDE as the primary development environment. The user interface uses the WinForms API. Efforts have been made to avoid doing anything Windows-specific, in the hope of running it under Mono.

The Solution file is called "WorkBench.sln" rather than "6502bench.sln" because some things in Visual Studio got weird when it didn't start with a letter.

The code style is closer to what Android uses than "standard" C#. Lines are folded to fit 100 columns.

The source code is licensed under Apache 2.0 (http://www.apache.org/licenses/LICENSE-2.0), which makes it free for use in both open-source programs and closed-source commercial software. The license terms are similar to BSD or MIT, but with some additional constraints on patent licensing. (This is the same license Google uses for the Android Open Source Project.)

Images are licensed under Creative Commons ShareAlike 4.0 International (https://creativecommons.org/licenses/by-sa/4.0/).