daskrabs wrote:I guess I was hoping that someone here had already decompiled the Gimmick program ROM and could look at it a little easier than I could. Maybe that's pretty far out, I don't know. I do know that there are people here with much more knowledge on NES programming than I.
It can't simply be "decompiled". Converting the machine code to text is very easy, but then you have to do an intense amount of analysis to find out what that code actually means. It's like if someone gave you a book that was originally written in English but every single word has been substituted with a completely different word. It would eventually be readable but it's going to take a lot of time, and some very good understanding of the language.
Anyhow, that part can be done given enough time and the right skills. There's well made annotated disassemblies of Super Mario Bros. 1
, for example. This isn't enough
by itself though.
If it's a bug, that means that the original programmer who wrote it, who already had the original source code, was familiar with it and worked on it every day for a long time, had looked closely at it and still missed something. If a bug "might" exist, no part of the code is off limits, a bug anywhere has the potential to affect the entire system. Gimmick probably has at least a hundred thousand lines of code, and any one of them could be a culprit.
That's if the bug even exists! If it doesn't exist, there's really no practical way to prove it; "I've never seen it, and haven't been able to make it happen" is as good as it gets here.
There must be a tool out there than would allow me to visually trace through the code to see if under some odd set of circumstances, that extra track plays at the end. I wouldn't put it past the Sunsoft devs to do something like that.
If it was done deliberately, there's probably a slightly better chance of finding it. You still have the problem that it could be literally anywhere
in the code, but at least it should be something you can identify once you see it, and not obscured. Again, the problem is that if you can't find it you still have no way to prove it isn't in there. There's no end to such a search, you just have to give up when you become exhausted by it.
From the perspective of an intentional way to play this hidden track, they did
in fact leave a very well known and intentional way to be able to be able to listen to it (i.e. the sound test). You're talking about it playing very rarely after the end of the credits, though. Does that really seem intentional to you? (I admit, it is very hard to speculate about intent. Not too long ago koitsu demonstrated that an exploit in Bomber King / Robowarrior was intentional
, which I was wrongly certain must have been a bug.)
There's also a known copy-protection measure in Gimmick! that involves a block of code in the ROM that has been encrypted (to hide it from reverse engineers) being decoded to RAM and run there.
These things were findable though, because we could make them happen. If you can cause the BLACK HOLE copy protection screen, you can trace it and debug it and find out what caused it. No problem. Even their deliberate attempt to hide it via encryption was not much of a problem for people to figure out.
My point is, searching for something that is known to exist, and especially for something that you can reliably cause to happen is something you can reasonably expect to be able to do. Searching for something you think might have happened once but aren't sure... you're really not likely to find anything, and there's no condition where you can say "I'm sure I've looked everywhere and I know it doesn't exist".
There's also the possibility that something like this could be caused by a rare and unreproducable hardware error. NES/Famicom hardware is hardly the most reliable stuff in the world. People regularly have "glitches" happen that have nothing to do with software errors, and they will never be able to cause again. Vibrations, power fluctiations, environmental interference, dirty cartridge pins, etc. are all real things that can occasional throw an NES out of whack and cause strange things to occur. Making something happen more than once can go a long way to ruling this out.
Anyhow, FWIW, I'd actually love to produce a complete annotated disassembly/analysis of Gimmick! (or any other NES game) for a professional rate. I would never guarantee being able to find your bug as described, though. I guess that's really what I'm saying: you couldn't pay me to do what you asked. ;P (Not unless it can be demonstrated that it exists.)