|Platform||Nintendo Entertainment System|
|OS||Mac OS X|
|Release Date||12 July 2009|
|Last Modified||28 August 2017|
Well-crafted, ready-to-run tools for the PPC Mac are increasingly difficult to find. But this command-line disassembler, NESMacDASM, runs out-of-the-box for PPC Mac users, and it features a function-identification ability not seen in other disassemblers. It was tested on OS X 10.4 “Tiger” on a G4 eMac. Source code is included. An example of its work is also included in the .zip file so that non-PPC-Mac users may see what it is capable of without needing a PPC Mac themselves.
NESMacDASM can identify where functions begin and end with about 95% accuracy. It will mark these boundaries with a blank line. Opcodes that usually end a function – RTS, JMP, RTI – but do not in a particular instance are instead marked with a brief comment. For an example, see the two RTS opcodes in the function at $C461.
Occasionally, a function will be given an auto-generated name if the disassembler is fairly sure about it. Some “functions” however are reached only via a JMP from a zero-page function, which can only be checked for at runtime. Likewise jump tables: the included example has a jump table at $C3A8, clearly showing (to the human observer) that $C3BF, $C334, etc., are “function” entry points, but NESMacDASM can’t (yet) understand this.
Embedded data frequently cause a opcode/operand misalignment, but NESMacDASM frequently can correct for it. An example of correction can be seen at $C770, wherein the first opcode of the function was actually already eaten by the preceding ORA, which was actually data, not code.
False positives, though rare, do occasionally occur. An example of such a false function start point is at $C804 – the function actually began many bytes back at $C786, and this new entry point is spurious. This happens infrequently, but please remain aware of it.
NESMacDASM also has some auto-commenting features seen in other disassemblers, such as when we access hardware I/O ports or save-RAM. Nothing special there. The three interrupt vectors are listed in the output file’s header for convenience.
I hope you find NESMacDASM useful. Thoughts are welcome.