Unlike a disassembly of code that is written in a higher-level language like C, these old NES and Gameboy games were written in the assembly language you're seeing disassembled. Obviously there are no comments and labels, but the actual <i>logic</i> and the intent of the original developer is clearly communicated.<p>This allows for a really special type of awesome when you're working on fan translations and ROM hacks. You actually have the opportunity to analyze the work of the developers you idolized when you were younger, and celebrate a their clever hacks or curse them for their spaghetti code, 15 to 25 years later. Furthermore, you can contribute your own clever hacks to the code base.
Two interesting fun facts about Pokemon Crystal:<p>1) Pokemon Gold/Silver, the prior versions of Crystal, was programmed by <i>four</i> people. (<a href="http://en.wikipedia.org/wiki/Pokémon_Gold_and_Silver#Development_and_release" rel="nofollow">http://en.wikipedia.org/wiki/Pokémon_Gold_and_Silver#Develop...</a>)<p>2) Crystal is 1MB in size. Yes, one megabyte.
This is certainly a thing of beauty.
See, for instance, the way the trainers are defined:<p><a href="https://github.com/kanzure/pokecrystal/blob/master/trainers/trainers.asm" rel="nofollow">https://github.com/kanzure/pokecrystal/blob/master/trainers/...</a><p>It almost looks like a high-level language.
Repo owner here. Yes, it's a disassembly, but also it compiles back into the original ROM if you follow the README (it's not a "dump and flee").
This made me wonder if it's possible to automatically reverse engineer a small binary file into human readable (and understandable) source code.
Assuming you know the language and compiler used (and all of its quirks and optimizations), and considering that human written programs aren't so random and their patterns are most likely predictable, I think it should be possible though not at all trivial.
Are there any projects attempting this?
I flagged this story because I don't like to see blatant copyright violations on HN. Instead, I would have loved to seen a tool that automatically disassembles a user-provided ROM to the equivalent of this repo.