Search the Community
Showing results for tags 'distella'.
Found 2 results
Good Morning, I used Distella to disassemble Chopper Command but the bin didn't run when recompiled with DASM. I found missing assembler instructions such as ORGs SEGs and the Processor spec. It runs now with issues. I'll continue fixing it up but I'm curious- Did I use Stella wrong? Is there a switch I should have added? I used -a only. I made notes of my changes in the attached asm- just search for semicolons to see them. The second attachment is my current .bin. The third attachment is the original .bin if someone wants to disassemble to compare results. Thanks! CPRCMD.asm CPRCMD.asm.bin Choprcmd.bin
OK, first a little context. For the next major release of Stella, I'm planning to add support for generating DASM-compatible assembly source code which can be output to a file. The ideal end result would be producing assembly code that, when re-compiled, is byte-exact to the original ROM. I have this pretty much working 100% for 4K and smaller ROMs. In the process, I also improved the the actual in-debugger disassembly, since it wasn't always absolutely correct (and it was impossible to tell that until a recompile of the actual output was attempted). The main impetus for this is that Distella isn't really maintained, is simply a static analysis, and doesn't work with multi-bank ROMs without manual intervention. The first two of these issues are addressed in Stella, since (a) it is maintained, and (b) it augments the static disassembly with runtime analysis. The third issue is what I'm addressing here. So, I'm looking for advice on how to disassemble multi-bank ROMs. For now I'm considering the simple cases, so F8/F6/F4 schemes only (8K/16K/32K, respectively). Eventually, if I can get the previous ones working, I'll consider the Superchip variants, and then possibly the more esoteric schemes. But that will probably take several releases to get right. My first question is how to accurately determine the ORG/RORG addresses to use? My first guess was to look at the reset vector in each bank, and use that directly. Many ROMs, such as Battle Zone and Moon Patrol, do set this up correctly, and use $D000 for bank 0, and $F000 for bank 1. To me, the disassembly there seems straightforward. Others, however, seem to use $F000 for all banks. So how would such a file be disassembled? How would you differentiate between banks?? I guess I'd like some feedback from people that have done manual Distella disassembly for F8/F6/F4 ROMs, and suggestions on how to automate the procedure. Also, some very simple test ROMs with source would be extremely useful, since I could use them as test cases to verify that my code is doing an accurate disassembly. Ideally, I'd need test ROMs for both the normal case (each bank has a clearly differentiated reset vector/ORG address), and the other case (all banks seem to use the same ORG address). Thanks in advance for any help you can provide. This feature has been requested for years, and if it comes to fruition, will make disassembly of ROMs much easier.