load81 wrote:
My goal is to be able to disassemble C64 programs and work backwards until I have a fully functional code base that I can use to reassemble the original binary byte-for-byte accurately.
This isn't necessarily hard with a decent start using a tracing disassembler.
But on complicated systems, using overlays and such, these can be much more difficult.
It's also potentially difficult to get the data organized in to anything remotely human, rather than as an opaque data blob that still assembles properly. Because, in the end, the assembler doesn't really care.
But even if you get that far doesn't mean that you understand the code, as there are several idioms that manifest in different ways within the program. Grasping these larger concepts can require more than what most of the assembly books will teach you, as they're more about data encoding, data structures, and other things not necessarily specific to assembly language programming.
Arguably, the best thing to look at next is any documented assembly code and try to suss that out -- which can be difficult even when it's documented -- so that you can try to apply what you see in those programs to the blob of bytes and pages of instructions that a disassembly will start you with.