(You'll need all files from that folder ending in .py, or just click on "zip" in the left-hand sidebar to download a zipped version of the whole project.)

This is not an IDA Pro replacement. That being said, my motivation was not having to point folks who are interested in ECU development toward a $1000 code analysis package that they'll only end up using 1% of. And let's be honest: those people I pointed at IDA probably just ended up pirating it. :(

As of now it has no user interface at all, simply a demo application (dis.py) that, given a ROM image from an Evo VIII or IX (and probably most other 7052- or 7055-based platforms, such as the Hayabusa ECU), tries to perform an automatic disassembly by following interrupt vectors.

Segment handling is modeled after IDA, and I've tried not to torpedo the possibility of implementing other processors (specifically, H8/500, HC11, and HC16, all of which I have a personal interest in), but I just haven't had the time to think about that yet. The output doesn't currently include IDA's comment-based cross-references, although that information is tracked and could be added pretty easily. It automatically labels "known" (ie. from the platform docs) vectors and registers, and can follow most branches; it's not smart enough to recognize a few known jsr/jmp table patterns, but it's on the to-do list. Branch handling is done by doing very basic register assignment tracking, and there's a ton of room for improvement here (but it seems to be good enough for "in the wild" Evo ROMs right now).

It requires Python 2.6. Python 2.5 and 3.0 will not work, period, full-stop. I'm not interested in porting to Py3k just yet (it needs a little wider adoption first), and I'm making pretty heavy use of 2.6/3.0 string formatting, making it a PITA to make it compatible with 2.5 at this point.

In case it's not completely obvious yet: this is NOT end-user software. The target audience for this is other Evo developers right now, and probably only those with a solid working knowledge of both IDA and python. Knowing SH2 assembly wouldn't hurt, either. ;)

Performance is not quite where I'd like it to be right now; it takes about 30 seconds on my old dev machine (Dual PIII 1GHz, Linux) to run through a complete disassembly and output, which feels a bit slower than IDA's automated analysis. I'll be very honest, I'm not worrying much about that just yet, since there's so much additional work to be done elsewhere. (If anyone reading this feels like tackling the main bottleneck, it's in sh2.py, in disasm_single(); a short-circuiting instruction matching scheme in there, perhaps along with better opcode storage in sh2opcodes.py, would probably cut runtime by more than half.)

It's probably extremely buggy, and the source is certainly a mess as it sits right now. Bug reports and patches are welcome.