TRS-80 Miscellaneous Utilities – Z80Disasm

Z80Disasm – A TRS-80 Disassembler for Microsoft Windows

Z80Disasm is a freeware command-line Z80 disassembler for Windows. It is a symbolic labeling disassembler that supports all Z80 instructions and can read either TRS-80 CMD files or Intel HEX files.

Usage

The Z80Disasm command line looks like this:

Z80DISASM [options] [file]

The following options are supported:

-v:
Read file from a TRS-80 virtual disk instead of a Windows directory.
-s:
Use as a screening data file.
-o:
Write disassembly to instead of screen.
-r
Don’t generate symbolic labels during disassembly.

For example, to disassemble the program SCRIPSIT.CMD to the screen, the command line would look like this:

Z80DISASM SCRIPSIT.CMD

To disassemble the program ROBOT.CMD to the file ROBOT.ASM, using the screening file ROBOT.SCR, the command line would look like this:

Z80DISASM -o:ROBOT.ASM -s:ROBOT.SCR ROBOT.CMD

To disassemble the program VC/CMD which is contained on VISICALC.DSK, the command line would look like this:

Z80DISASM -v:VISICALC.DSK VC/CMD

Screening Files

Z80Disasm supports the use of screening files to separate data from code. By using a well designed screening file, data areas can be properly marked using DB and DW pseudo-ops instead of meaningless instructions.

A screening file follows a well-defined format, consisting of address ranges separated by commas. (Long time TRS-80 users may remember this format as similar to that used by DSMBLR, the MISOSYS disassembler for the TRS-80.)

Four different types of address ranges are supported:

aaaa
one byte at aaaa
bbbb-cccc
a range from bbbb to cccc
-dddd
a range from 0x0000 to dddd
eeee-
a range from eeee to 0xFFFE

Two types of prefixes are supported for ranges:

$
identify as byte data (the default)
#
identify as word data

For example, here is a valid (albeit meaningless) sample screening file:

$3000,$3A1B-3A1D
#3010-3014,#E000-
$-1000

That screening file indicates the following areas of data:

  • One byte of data at 0x3000
  • Byte data between 0x3A1B and 0x3A1D
  • Word data between 0x3010 and 0x3014
  • Word data between 0xE000 and 0xFFFE
  • Byte data between 0x0000 and 0x1000