1
0
mirror of https://github.com/fadden/6502bench.git synced 2025-08-10 12:24:58 +00:00
This commit is contained in:
Andy McFadden
2021-06-08 13:14:24 -07:00

View File

@@ -1,180 +1,208 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8"/> <meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"
integrity="sha384-vtXRMe3mGCbOeY7l30aIg8H9p3GdeSe4IFlP6G8JMa7o7lXvnz3GFKzPxzJdPfGK" crossorigin="anonymous"></script> integrity="sha384-vtXRMe3mGCbOeY7l30aIg8H9p3GdeSe4IFlP6G8JMa7o7lXvnz3GFKzPxzJdPfGK" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"/> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"/>
<link rel="stylesheet" href="/main.css"/> <link rel="stylesheet" href="/main.css"/>
<style> <style>
img { img {
/* add a border so image thumbnails look clickable */ /* add a border so image thumbnails look clickable */
border: 2px solid; border: 2px solid;
} }
</style> </style>
<title>6502bench Tools</title> <title>6502bench Tools</title>
</head> </head>
<body> <body>
<div id="masthead"> <div id="masthead">
<!-- START: /masthead-incl.html --> <!-- START: /masthead-incl.html -->
<script>$("#masthead").load("/masthead-incl.html");</script> <!--<div class="masthead-title" style="background-image: url('images/screenshot-mainwin.png');">-->
<!-- END: /masthead-incl.html --> <div class="masthead-title">
</div> 6502bench
</div>
<div id="topnav"> <!-- END: /masthead-incl.html -->
<!-- START: /topnav-incl.html active:#topnav-home --> </div>
<script>
// Load global topnav content, and mark current page active. <div id="topnav">
$("#topnav").load("/topnav-incl.html", function() { <!-- START: /topnav-incl.html active:#topnav-home -->
$("#topnav-home").addClass("active") <!-- top navigation bar contents -->
}); <nav>
</script> <a id="topnav-home" class="active" href="/">HOME</a>
<!-- END: /topnav-incl.html --> <a id="topnav-sgtutorial" href="/sgtutorial">SourceGen Tutorial</a>
</div> <a id="topnav-menuicon" href="javascript:void(0);" class="icon" onclick="toggleSidenav()">
<i class="fa fa-bars"></i>
<div id="main" class="no-sidenav"> </a>
</nav>
<p>6502bench is a code development "workbench" for the 65xx family <script>
of processors, including the 6502, 65C02, and 65802/65816. It currently // If page has no sidenav, don't show the sidenav toggle button.
features one tool, the SourceGen disassembler.</p> if (document.getElementById("sidenav") == undefined) {
$("#topnav-menuicon").hide();
<p><strong>SourceGen</strong> is an industrial-strength disassembler for 6502, }
65C02, and 65816 programs. It runs on Windows 7 or later.</p>
// Sidenav toggle function.
<p>Demos and information:</p> //
<ul> // Use a jQuery function to toggle the sidenav bar. The initial state
<li>Watch a 9-minute // is undefined / inherited, so it will pop in and out as the screen
<a href="https://youtu.be/dalISyBPQq8">product introduction video</a> (from v1.0).</li> // resizes around the "large" breakpoint.
<li>See an 8-minute function toggleSidenav() {
<a href="https://youtu.be/lSvEr5nCHbY">demonstration of visualizers</a> $("#sidenav").toggle("fast");
in a disassembly of the Apple II game <i>Space Eggs</i>.</li> }
<li>SourceGen has been used to disassemble software for the Apple II, </script>
NES (Nintendo Entertainment System), Atari 2600 VCS, and coin-op arcade <!-- END: /topnav-incl.html -->
systems. Visit 6502disassembly.com to see examples of </div>
<a href="https://6502disassembly.com/">completed disassembly projects</a>.</li>
</ul> <div id="main" class="no-sidenav">
<p>Check out the <p>6502bench is a code development "workbench" for the 65xx family
<a href="https://github.com/fadden/6502bench/">GitHub project</a>, of processors, including the 6502, 65C02, and 65802/65816. It currently
where you can download source &amp; binaries for the latest version from the features one tool, the SourceGen disassembler.</p>
<a href="https://github.com/fadden/6502bench/releases/">Releases page</a>.
</p> <p><strong>SourceGen</strong> is an industrial-strength disassembler for 6502,
65C02, and 65816 programs. It runs on Windows 7 or later.</p>
<p>Key features include:</p>
<ul> <p>Demos and information:</p>
<li>Fully interactive point-and-click GUI. Define labels, set addresses, <ul>
add comments, and see the results immediately. Add multi-line comments <li>Watch a 9-minute
and have them word-wrapped automatically. Create inline visualizations of <a href="https://youtu.be/dalISyBPQq8">product introduction video</a> (from v1.0).</li>
embedded bitmaps and wireframe data, and define animated sequences.</li> <li>See an 8-minute
<li>Sophisticated static analysis. The disassembly engine traces code <a href="https://youtu.be/lSvEr5nCHbY">demonstration of visualizers</a>
execution, automatically finding all instructions reachable from a given in a disassembly of the Apple II game <i>Space Eggs</i>.</li>
starting point. Changes to the processor status flags are tracked, <li>SourceGen has been used to disassemble software for the Apple II,
allowing identification of branches that are always/never taken, NES (Nintendo Entertainment System), Atari 2600 VCS, and coin-op arcade
accurate cycle count listings, and easier analysis of 65816 code with systems. Visit 6502disassembly.com to see examples of
variable-width registers.</li> <a href="https://6502disassembly.com/">completed disassembly projects</a>.</li>
<li>Easy generation of assembly source code in popular formats (currently </ul>
64tass, ACME, cc65, and Merlin 32). Cross-assemblers can be invoked from the GUI to
verify correctness.</li> <p>Check out the
<li>Symbols and constants are provided for ROM and operating system entry <a href="https://github.com/fadden/6502bench/">GitHub project</a>,
points on several popular systems (Apple, Atari, Commodore, others).</li> where you can download source &amp; binaries for the latest version from the
<li>Project files are designed for sharing and collaboration.</li> <a href="https://github.com/fadden/6502bench/releases/">Releases page</a>.
</ul> </p>
<p> <p>Key features include:</p>
<a href="images/screenshot-15-mainwin.png"><img src="images/screenshot-15-mainwin-small.png" alt="Main Window Screenshot" width="320" height="180"/></a> <ul>
<a href="images/screenshot-15-asmwin.png"><img src="images/screenshot-15-asmwin-small.png" alt="Gen/Asm Dialog Screenshot" width="320" height="180"/></a> <li>Fully interactive point-and-click GUI. Define labels, set addresses,
<a href="images/screenshot-15-vis.png"><img src="images/screenshot-15-vis-small.png" alt="Gen/Asm Dialog Screenshot" width="320" height="180"/></a> add comments, and see the results immediately. Add multi-line comments
</p> and have them word-wrapped automatically. Create inline visualizations of
embedded bitmaps and wireframe data, and define animated sequences.</li>
<h4>Features in Detail:</h4> <li>Sophisticated static analysis. The disassembly engine traces code
<ul> execution, automatically finding all instructions reachable from a given
<li>Analyzer: starting point. Changes to the processor status flags are tracked,
<ul> allowing identification of branches that are always/never taken,
<li>Support for 6502, 65C02, and 65816, including undocumented accurate cycle count listings, and easier analysis of 65816 code with
opcodes and the W65C02 extensions.</li> variable-width registers.</li>
<li>Code tagging mechanism allows manual identification of code start/stop <li>Easy generation of assembly source code in popular formats (currently
points and inline data.</li> 64tass, ACME, cc65, and Merlin 32). Cross-assemblers can be invoked from the GUI to
<li>Editable labels are generated for every branch destination and data verify correctness.</li>
target.</li> <li>Symbols and constants are provided for ROM and operating system entry
<li>Automatic detection and classification of character strings and runs points on several popular systems (Apple, Atari, Commodore, others).</li>
of identical bytes.</li> <li>Project files are designed for sharing and collaboration.</li>
<li>Symbol files for ROM entry points, operating system constants, and </ul>
other platform-specific data are stored in plain text files loaded at runtime.</li>
<li>Extension scripts can be defined that automatically reformat code and <p>
identify inline data that follows a JSR, JSL, or BRK.</li> <a href="images/screenshot-15-mainwin.png"><img src="images/screenshot-15-mainwin-small.png" alt="Main Window Screenshot" width="320" height="180"/></a>
</ul></li> <a href="images/screenshot-15-asmwin.png"><img src="images/screenshot-15-asmwin-small.png" alt="Gen/Asm Dialog Screenshot" width="320" height="180"/></a>
<li>User interface: <a href="images/screenshot-15-vis.png"><img src="images/screenshot-15-vis-small.png" alt="Gen/Asm Dialog Screenshot" width="320" height="180"/></a>
<ul> </p>
<li>"Infinite" undo/redo of all operations.</li>
<li>Cross-reference tables are generated for every branch and data target <h4>Features in Detail:</h4>
address, as well as for external platform symbols.</li> <ul>
<li>Instruction operand formats (hex, decimal, binary, character, symbol) can <li>Analyzer:
be set for individual instructions. References to nearby symbols are <ul>
offset, allowing simple expressions like "addr + 1".</li> <li>Support for 6502, 65C02, and 65816, including undocumented
<li>Data areas can be formatted in various formats, including individual opcodes and the W65C02 extensions.</li>
bytes, 16-bit and 24-bit words, addresses, or strings. <li>Code tagging mechanism allows manual identification of code start/stop
Multiple character encodings are supported, including ASCII, high ASCII, points and inline data.</li>
C64 PETSCII, and C64 screen codes.</li> <li>Editable labels are generated for every branch destination and data
<li>Zero-page variables can be given different labels at different points target.</li>
in the program.</li> <li>Automatic detection and classification of character strings and runs
<li>Multi-line comments can be "boxed" for an authentic retro feel.</li> of identical bytes.</li>
<li>Notes can be added that aren't included in generated output. These <li>Symbol files for ROM entry points, operating system constants, and
also function as color-coded bookmarks. Very useful for marking up a other platform-specific data are stored in plain text files loaded at runtime.</li>
work in progress. Similarly, symbols can be marked as uncertain by <li>Extension scripts can be defined that automatically reformat code and
adding a '?' that is automatically stripped away during code generation.</li> identify inline data that follows a JSR, JSL, or BRK.</li>
<li>Instruction reference data, such as CPU cycles and flags modified, are </ul></li>
shown along with a description of the opcode's function. Very useful when <li>User interface:
encountering rarely-used undocumented instructions.</li> <ul>
<li>Various aspects of the code display can be reconfigured, including <li>"Infinite" undo/redo of all operations.</li>
upper/lower case, pseudo-opcode naming, and expression formats. These <li>Cross-reference tables are generated for every branch and data target
choices are not part of the project definition, so everyone can view a address, as well as for external platform symbols.</li>
project according to their own personal preferences.</li> <li>Instruction operand formats (hex, decimal, binary, character, symbol) can
</ul></li> be set for individual instructions. References to nearby symbols are
<li>Code generation: offset, allowing simple expressions like "addr + 1".</li>
<ul> <li>Data areas can be formatted in various formats, including individual
<li>Labels can be global or local. Use non-unique labels like "@Loop" bytes, 16-bit and 24-bit words, addresses, or strings.
for clarity. Labels will be promoted from local to global or renamed to Multiple character encodings are supported, including ASCII, high ASCII,
be unique as required by each assembler.</li> C64 PETSCII, and C64 screen codes.</li>
<li>Symbols may be exported from one project and imported into another <li>Zero-page variables can be given different labels at different points
to facilitate multi-binary disassembly.</li> in the program.</li>
<li>Listings can be generated in HTML form for publication on the web. Many <li>Multi-line comments can be "boxed" for an authentic retro feel.</li>
aspects of the output format can be configured. Inline visualizations <li>Notes can be added that aren't included in generated output. These
are exported as GIF or animated GIF.</li> also function as color-coded bookmarks. Very useful for marking up a
</ul></li> work in progress. Similarly, symbols can be marked as uncertain by
<li>Miscellaneous: adding a '?' that is automatically stripped away during code generation.</li>
<ul> <li>Instruction reference data, such as CPU cycles and flags modified, are
<li>All project data is stored in text formats (primarily JSON).</li> shown along with a description of the opcode's function. Very useful when
<li>The project file includes nothing from the data file but a CRC. This encountering rarely-used undocumented instructions.</li>
may allow the project to be shared without violating copyrights (subject <li>Various aspects of the code display can be reconfigured, including
to local laws).</li> upper/lower case, pseudo-opcode naming, and expression formats. These
<li>Handy tools: file slicer, file concatenator, CPU instruction reference choices are not part of the project definition, so everyone can view a
chart, ASCII chart, file hex dump.</li> project according to their own personal preferences.</li>
<li>The OMF converter tool can be used to disassemble Apple IIgs executables.</li> </ul></li>
</ul></li> <li>Code generation:
</ul> <ul>
<li>Labels can be global or local. Use non-unique labels like "@Loop"
<h4>Open Source</h4> for clarity. Labels will be promoted from local to global or renamed to
be unique as required by each assembler.</li>
<p>6502bench is written in C# .NET, using the (free to download) Visual <li>Symbols may be exported from one project and imported into another
Studio Community 2019 IDE as the primary development environment. to facilitate multi-binary disassembly.</li>
The user interface uses the Windows Presentation Foundation (WPF) API. <li>Listings can be generated in HTML form for publication on the web. Many
6502bench is an open-source project, licensed under Apache 2.0. aspects of the output format can be configured. Inline visualizations
The full source code is available on are exported as GIF or animated GIF.</li>
<a href="https://github.com/fadden/6502bench/">GitHub</a>.</p> </ul></li>
<li>Miscellaneous:
</div> <ul>
<li>All project data is stored in text formats (primarily JSON).</li>
<div id="footer"> <li>The project file includes nothing from the data file but a CRC. This
<!-- START: /footer-incl.html --> may allow the project to be shared without violating copyrights (subject
<script>$("#footer").load("/footer-incl.html");</script> to local laws).</li>
<!-- END: /footer-incl.html --> <li>Handy tools: file slicer, file concatenator, CPU instruction reference
</div> chart, ASCII chart, file hex dump.</li>
<li>The OMF converter tool can be used to disassemble Apple IIgs executables.</li>
</body> </ul></li>
</html> </ul>
<h4>Open Source</h4>
<p>6502bench 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.
6502bench is an open-source project, licensed under Apache 2.0.
The full source code is available on
<a href="https://github.com/fadden/6502bench/">GitHub</a>.</p>
</div>
<div id="footer">
<!-- START: /footer-incl.html -->
<hr/>
<p>Copyright 2021 faddenSoft</p>
<!-- <p id="screen-size"></p>
<script>
var w = window.innerWidth;
var h = window.innerHeight;
var x = document.getElementById("screen-size");
x.innerHTML = "DEBUG: initial window size " + w + "x" + h;
</script> -->
<!-- END: /footer-incl.html -->
</div>
</body>
</html>