Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/caljer1/9900dis/llms.txt

Use this file to discover all available pages before exploring further.

9900dis is an iterative disassembler for TMS9900 and TMS9995 CPUs. It reads a binary ROM file and produces an assembly listing that is compatible with the xas99 assembler from the xdt99 tool suite. The tool is designed specifically for annotating system ROMs: you run the disassembler, mark up entry points and data regions in the output file, then re-run it to incorporate your annotations into a cleaner listing. Repeat until the output is as readable as you need it to be.

Key features

Iterative workflow

Output files are fed back as input. Labels, equates, format hints, and comments you add are preserved and used on every subsequent run.

TMS9900 and TMS9995 support

Disassemble ROMs targeting either the TMS9900 or the TMS9995 CPU. Select the target with the --cpu option.

Label and equate substitution

Define symbolic labels at any program counter address and equates for memory-mapped addresses. References throughout the listing are rewritten to use those symbols automatically.

Data format hints

Mark any word as DATA with an f:data annotation. On the next run, the disassembler treats it as a data word instead of an instruction, freeing up subsequent bytes for correct decoding.

Comment preservation

Inline comments appended after a second semicolon are captured and reproduced on every run, so your notes follow the code through each iteration.

Binary releases via PyInstaller

Pre-built single-file executables are available for each platform. No Python installation required to run the binary release.

Supported CPUs

9900dis supports two CPU variants selected with the --cpu flag.
CPUFlagNotes
TMS9900--cpu 9900 (default)Standard 16-bit TI CPU used in the TI-99/4A home computer and related hardware
TMS9995--cpu 9995Enhanced variant with additional instructions and on-chip RAM
When no --cpu flag is provided, 9900dis defaults to 9900.

Output format

Every disassembled line follows this structure:
      	SOCB    @>028a,r2        ; pc:>0000 w:>f0a0
The fields are:
  • Label column — empty unless you have defined a label for this address.
  • Mnemonic — the TMS9900 instruction (SOCB in this example).
  • Operands — the decoded operands (@>028a,r2).
  • pc:>xxxx — the program counter value (ROM offset + base address) for this instruction.
  • w:>xxxx — the raw 16-bit word at that address in the ROM.
Optional fields appended to the comment:
  • f:data — format hint you add to force DATA treatment on the next run.
  • ; your comment — free-form comment after a second semicolon, preserved across runs.
The output is designed to assemble without modification using xas99.py from the xdt99 tool suite. Labels, equates, and mnemonics all follow xas99 syntax conventions.

Build docs developers (and LLMs) love