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.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.
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.
| CPU | Flag | Notes |
|---|---|---|
| TMS9900 | --cpu 9900 (default) | Standard 16-bit TI CPU used in the TI-99/4A home computer and related hardware |
| TMS9995 | --cpu 9995 | Enhanced variant with additional instructions and on-chip RAM |
--cpu flag is provided, 9900dis defaults to 9900.
Output format
Every disassembled line follows this structure:- Label column — empty unless you have defined a label for this address.
- Mnemonic — the TMS9900 instruction (
SOCBin 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.
f:data— format hint you add to forceDATAtreatment 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.