This is an ISO C99 implementation of a disassembler for the Texas Instruments "Graphic Programming Language", used in the TI-99/4A.
It disassembles both standard GPL opcodes and FMT opcodes. The mnemonics of FMT opcodes seem poorly standardized, but I'm using those from Thierry Nouspikel's GPL page.
Note that the operand order OPCODE src,dest is used by this
disassembler. This matches the order used by Thierry's assembler, but
differs from the disassemblies printed in the TI99/4A INTERN book by
Heiner Martin.
A trivial Makefile is included for building the disassembler, but
really just compiling the single source file with any C compiler should
do. :-)
The disgpl program takes two to four arguments:
disgpl file base_addr [start_addr] [func_info_file]
The first argument is the file containing the binary dump of the GROM(s) to disassemble. The second argument is the base address corresponding to the first byte of the file, in hexadecimal. The third argument specifies the address at which to start the disassembly, in hexadecimal. This argument is optional and if omitted the base address will be used as the address at which to start disassembly. Typically you will want to specify an address past the GROM headers.
The fourth and last argument is a file containing information about the
amount of FETC data various subroutines requires. This allows the
disassembler to display this data as DATA directives following the
CALL opcode, instead of incorrectly disassembling this data as GPL
instructions. The file should contain lines each containing first
the address of a GPL subroutine, as hexadecimal, and then a colon,
and finally the number of bytes of data that follows a call to the
subroutine at that address. An example of such a file follows:
0010 : 1
001e : 4
14a9 : 1
2010 : 4
284c : 2
284e : 2
2d99 : 2
30b9 : 1
4cb9 : 1
The fourth argument can be omitted, in which case no special handling
of FETC data is performed.