Diness


Diness is a small 6502 disassembler intended for disassembling NES ROM. Its current technique for finding code to disassemble is to follow all possible flows of execution from the reset, NMI, and IRQ addresses embedded in the ROM. This is as opposed to the more naive method of disassembling each byte encountered as though it were code of many other simple disassemblers. Thus, barring any uncaught bugs, the code diness outputs should be correct. The downside of this method is that most commercial games do some tricks manipulating the stack and such to change the PC indirectly, so a fair bit of code is left embedded as data (in the .byte directives). I plan to eventually add in some methods to work around these limitations, but for now, the embedded code can usually be spotted pretty easily and hand disassembled.

Currently, Diness will only disassemble files in the iNES format, and only ROM's that use mapper 0. Additional options may come in future releases.

Diness is implemented in Python. To use it, unpack the tarball, move the contents to a directory in your path, and type:

./diness rom.nes

where "rom.nes" is the file name of the NES ROM you want to disassemble. The output will go to stdout, so the only current option to save to file is to redirect the output (e.g., ./diness rom.nes > savefile.p65).

The output is intended to be compatible with P65, though it's simple enough that it should be able to work with just about any 6502 assembler with only slight changes.

v0.4 fixes a bug with the data labels.

Download Diness v0.4