z80dasm - Z80 assembly generating disassembler
z80dasm disassembles a binary file containing Z80 machine
code into Z80 assembly language source (including a number of undocumented
opcodes). It can try to guess locations of labels in the code or the labels
can be specified by hand in the form of a symbol file. If given proper
information the disassembler can also split the binary file into code and
data sections of several different types.
Generated source file can be assembled back into the original
binary using z80asm, zasm or the original Zilog assembler (when the
--zilog option was used).
- -a, --address
- Print the address of the memory location corresponding to each line of
assembly code in a comment at the end of the line.
- -b,
--block-def=FILE
- Read block information from a file. If this option is not specified the
default is for the entire file to contain machine code. See BLOCK
FILE below.
- -g, --origin=ORG
- Specify the start address of the binary code being disassembled. A
corresponding org directive is generated in the output file. The
argument is read in hexadecimal if it begins with 0x or 0X, in octal if it
begins with 0, and in base 10 otherwise. Default is 0x0100.
- -h, --help
- Show summary of options and exit.
- -l, --labels
- Try to guess label locations from jump instructions and add them to the
assembly code.
- -o, --output=FILE
- Specify the output file. Default is to write to standard output.
- -r,
--sym-order=SORT
- Ordering of symbols in the symbol file. SORT can be default (sort
by value) or frequency (sort by usage frequency).
- -s,
--sym-output=FILE
- Write symbol information into a file.
- -S,
--sym-input=FILE
- Read symbol information from a file. See SYMBOL FILE below.
- -t, --source
- Print the binary data corresponding to each line of assembly code in a
comment at the end of the line. Data is printed in hex and ASCII. This is
useful for identifying data sections in the first disassembly.
- -u, --undoc
- By default, all undocumented instructions are disassembled as defb
directives with the instruction name in a comment. This is due to missing
or buggy support for many of these instructions in z80asm. If this option
is specified, undocumented instructions are written directly into the
disassembly.
- -v, --verbose
- Increase verbosity level. Specify multiple times to be more verbose.
Messages are sent to standard error.
- -V, --version
- Display version information and exit.
- -z, --zilog
- Enable compatibility mode for the original Zilog Z80 assembler. This
currently only changes the syntax of relative jumps.
Symbol files written by z80dasm can be directly used as
input symbol files with the --sym-input option. The following
directives are recognized in input symbol files and are propagated to the
output symbol files:
- include
"filename"
- Include another symbol file. Double quotes are mandatory. Included files
must be in the current directory.
- symbol: equ value
- Define a symbol with a value. The value is read in hexadecimal if it
begins with 0x or 0X, in octal if it begins with 0, and in base 10
otherwise. Default is 0x0100.
- ; comment
- All characters between a semi-colon and end of line are ignored.
Block files specify the boundaries between different blocks
(sections) of binary data in the disassembler input file. The following
directives are recognized:
- name: [ unlabeled ] [ start | first ] address [ unlabeled
] [ end | last ] address type type
- Define a block with the start and end address that contains a certain type
of binary data.
Start address is the 16 bit address of the first byte in the
block. Keywords "start" and "first" are synonymous.
If the keyword "end" is used, the end address is the 16 bit
address of the last byte in the block plus one. If the keyword
"last" is used, the end address is the 16 bit address of the
last byte in block.
Normally labels are defined at the addresses specified in the
block definition. This can be suppressed by adding the keyword
"unlabeled" before the address.
- ; comment
- All characters between a semi-colon and end of line are ignored.
The following block types are supported:
- code
- Block containing Z80 machine code. Data in this block will be written in
Z80 assembly language.
- bytedata
- Data block containing separate bytes. Data in this block will be written
with defb directives.
- worddata
- Data block containing 16 bit words (low order byte first). Data in this
block will be written with defw directives.
- pointers
- Data block containing 16 bit pointers (low order byte first). This type is
equivalent to worddata except that values will be replaced with
labels where that is possible.
If disassembly was successful z80dasm returns 0. On error
diagnostic messages are printed to standard error and z80dasm returns
1.
Please report bugs to tomaz.solc@tablix.org
z80dasm is based largely on dz80 , written by Jan
Panteltje. Feature enhancements and bug fixes were made by Tomaz Solc.