# Disassemblers

Some CPUs (6502 and 6809 for now) have a disassembler in
addition to an assembler. The loader word follows the same
pattern as the assemblers and ends with "d".
Examples: 6502d 6809d

All disassemblers require the corresponding assembler to be
loaded first.

Once loaded, they supply the word "dis ( addr -- )" which prints
"discnt" lines (by default 20) of disassembled memory starting
at "addr". "discnt" is a value.

Disassembly formatting tries to stay close to the "manufacturer
language" rather than the assembler language. For example,
the 6809 disassembly of "$42 X+N ADDA," is "ADDA 42,X".

We lose symmetry with assembler, but we gain general readabili-
ty. During assembly, we are constrained by Forth semantics, but
with disassembly, we aren't. We can afford to make ourselves
closer to manufacturer language.

Numbers are always hexadecimal and width matter. "2a" means that
an 8b literal was extracted from the opcode and "002a" means
that a 16b literal was.

Some opcodes are invalid, so you'll get "???" outputs. From the
first of these that you get, you can consider the rest of the
output to be garbage because opcodes are "out of sync".
