2021-10-19 00:56:08 +00:00
|
|
|
<!DOCTYPE html>
|
|
|
|
<html lang="en">
|
2018-09-28 17:05:11 +00:00
|
|
|
|
|
|
|
<head>
|
2021-10-19 00:56:08 +00:00
|
|
|
<meta charset="utf-8"/>
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="main.css"/>
|
|
|
|
<title>End notes - 6502bench SourceGen</title>
|
2018-09-28 17:05:11 +00:00
|
|
|
</head>
|
|
|
|
|
|
|
|
<body>
|
2018-10-09 17:04:10 +00:00
|
|
|
<div id="content">
|
2021-10-19 00:56:08 +00:00
|
|
|
<h1>SourceGen: End Notes</h1>
|
2018-09-28 17:05:11 +00:00
|
|
|
<p><a href="index.html">Back to index</a></p>
|
|
|
|
|
2021-10-19 00:56:08 +00:00
|
|
|
<h2 id="origins">Origins</h2>
|
2018-09-28 17:05:11 +00:00
|
|
|
<p>The inspiration for SourceGen goes a long way back. While in high
|
|
|
|
school in the late 1980s, I read Don Lancaster's
|
|
|
|
<i>Enhancing Your Apple II, Vol. 1</i> (available for download
|
|
|
|
<a href="https://www.tinaja.com/ebksamp1.shtml">here</a>). This
|
2019-11-02 01:44:22 +00:00
|
|
|
included a very detailed methodology for disassembling 6502 software
|
|
|
|
(nicely reformatted
|
|
|
|
<a href="https://www.tinaja.com/ebooks/tearing_rework.pdf">here</a>).
|
2018-10-04 01:03:04 +00:00
|
|
|
I wanted to give it a try, so I generated a monitor listing of an
|
2021-10-19 00:56:08 +00:00
|
|
|
operating system called "RDOS" that SSI used on their games, and
|
2018-10-04 01:03:04 +00:00
|
|
|
printed it out on my Epson RX-80 -- tractor feed paper was helpful for
|
|
|
|
this sort of thing -- then set to work.</p>
|
2018-09-28 17:05:11 +00:00
|
|
|
|
|
|
|
<p>Lancaster's methodology involved highlighting different types of
|
|
|
|
instructions with different colors, making notes, and adding labels.
|
|
|
|
All this being done with felt-tip and colored highlighter pens. The
|
|
|
|
process worked remarkably well: by the time I was finished marking
|
|
|
|
things up, I knew how everything in the code worked.</p>
|
|
|
|
|
|
|
|
<p>I really wanted a better system though. The disassembler built into
|
|
|
|
the Apple II could get out of sync when it walked through a data area,
|
|
|
|
so sometimes you had to hand-write in the correct instruction. Applying
|
|
|
|
a label to every place that referenced it was tedious. When you got to
|
|
|
|
the end, you had a colorful print out, but you can't run that through
|
|
|
|
an assembler.</p>
|
|
|
|
|
|
|
|
<p>There were commercially-available disassemblers that generated source
|
|
|
|
code and removed some of the tedium from the process, and for many tasks
|
|
|
|
they solved the problem nicely. What I really wanted, though, looked more
|
|
|
|
like a modern IDE, because I didn't just want it to translate machine code
|
|
|
|
into readable form. I wanted it to help me with the process of
|
|
|
|
understanding the code, by providing cross-reference tables and symbol
|
|
|
|
lists and giving me a place to scribble notes to myself while I worked.
|
2018-10-04 01:03:04 +00:00
|
|
|
I especially wanted the note-scribbling, because learning how something
|
|
|
|
works is usually an iterative process, where the function of a chunk of
|
|
|
|
code gradually reveals itself over time.</p>
|
2018-09-28 17:05:11 +00:00
|
|
|
|
|
|
|
<p>In 2002, while writing the 6502/65816 disassembler for CiderPress, I
|
|
|
|
ran into the same problems I had with the original Apple II monitor: it
|
|
|
|
blundered through data sections and got lost briefly when a new code
|
2018-10-04 01:03:04 +00:00
|
|
|
section started. You had to pick long or short registers for the entire
|
|
|
|
diassembly, which made 65816 code something of a disaster. I
|
2018-09-28 17:05:11 +00:00
|
|
|
jotted down some notes on what I thought the core features of a good
|
2018-10-04 01:03:04 +00:00
|
|
|
6502 disassembler should be, then moved on to work on other features. It
|
2018-09-28 17:05:11 +00:00
|
|
|
was another 15 years before I picked up the idea again.</p>
|
|
|
|
|
|
|
|
<p>More recently, I disassembled some code by dumping it to a text
|
|
|
|
file with CiderPress and then fiddling with it in a text editor. I could
|
|
|
|
leave free-form notes, but when I found some code that I wanted to
|
|
|
|
exercise a bit I realized that getting it into an assembler was going
|
|
|
|
to take some effort. Raw addresses needed to be converted to labels,
|
|
|
|
the address and byte dump in the left column needed to be stripped out --
|
|
|
|
really just some basic text and string replace operations, but tedious
|
|
|
|
to do by hand.</p>
|
|
|
|
|
|
|
|
<p>The original design for SourceGen was substantially less feature-rich
|
|
|
|
than the final result. I kept discovering opportunities for features
|
|
|
|
that I wanted to have, or at least wanted to write. The result is
|
|
|
|
something of a monument to creeping featurism. Hopefully the core features
|
|
|
|
are solid enough to excuse the excesses.</p>
|
|
|
|
|
|
|
|
<p>-- Andy McFadden, September 2018</p>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
2018-10-09 17:04:10 +00:00
|
|
|
<div id="footer">
|
2018-09-28 17:05:11 +00:00
|
|
|
<p><a href="index.html">Back to index</a></p>
|
|
|
|
</div>
|
|
|
|
</body>
|
|
|
|
<!-- Copyright 2018 faddenSoft -->
|
|
|
|
</html>
|