Hello, my first post here!
As doppelgangers excellent disasm of Super Mario Bros 1 is based on the original Japanese/US version, I have been pondering on how to disassemble the European version, mainly to find all the differences compared to the Japanese version (which I suspect is a bunch of timing value differences, since it has to compensate from running 50fps instead of 60fps) but also to see if some other portions of code has changed.
The question is how to do this effectively (as we're talking about 32k of code/data tables, which is a lot!)?
My disassembling skills are somewhat limited in the knowledge of how powerful disassemblers such as IDA are actually in terms of separating data and code automatically, labeling stuff etc. I have a few years of 6502 coding experience though. I've just played around with different tools such as Y0shi's tracer.exe to see what source material doppelganger started out with.
Doing a hexdiff on both versions source (between $8000-$ffff) shows that much of the data are the same. The parts that do differ though are probably a lot less than what a simple hexdiff shows since all absolute jumps (or the values that the JumpEngine uses) or even whole subroutines will differ even if the actual code in the routines are the same. This because they are assembled a bit offset compared to the Japanese version. Not strange really but this makes things more complicated.
Ideally, having an editor with 3 open tabs, doppelgangers source, a traced version of the Japanese version vs the European version could be a starting point. As the doppelganger-version doesn't contain the absolute memory positions anymore (but will still assemble the same) it's hard to follow the link between these files.
So yeah, basically, how would you guys go about it? What ideas springs to mind and what tools would be worth looking into?
As doppelgangers excellent disasm of Super Mario Bros 1 is based on the original Japanese/US version, I have been pondering on how to disassemble the European version, mainly to find all the differences compared to the Japanese version (which I suspect is a bunch of timing value differences, since it has to compensate from running 50fps instead of 60fps) but also to see if some other portions of code has changed.
The question is how to do this effectively (as we're talking about 32k of code/data tables, which is a lot!)?
My disassembling skills are somewhat limited in the knowledge of how powerful disassemblers such as IDA are actually in terms of separating data and code automatically, labeling stuff etc. I have a few years of 6502 coding experience though. I've just played around with different tools such as Y0shi's tracer.exe to see what source material doppelganger started out with.
Doing a hexdiff on both versions source (between $8000-$ffff) shows that much of the data are the same. The parts that do differ though are probably a lot less than what a simple hexdiff shows since all absolute jumps (or the values that the JumpEngine uses) or even whole subroutines will differ even if the actual code in the routines are the same. This because they are assembled a bit offset compared to the Japanese version. Not strange really but this makes things more complicated.
Ideally, having an editor with 3 open tabs, doppelgangers source, a traced version of the Japanese version vs the European version could be a starting point. As the doppelganger-version doesn't contain the absolute memory positions anymore (but will still assemble the same) it's hard to follow the link between these files.
So yeah, basically, how would you guys go about it? What ideas springs to mind and what tools would be worth looking into?