Thanks for checking, guys
I'm not crazy after all, the corruption I was seeing was actually caused by an overlapping src/dest address in memcpy();
Technical info:
Here's the deal, when using memcpy(), the destination address cannot overlap the source address, if it does, "unexpected results" may happen. I didn't come up with this rule, I guess some sort of [lib]C standard did..perhaps?
in imgfightRomLoadCallback();
...
memcpy (DrvV30ROM + 0x40000, DrvV30ROM + 0x20000, 0x40000);
I quick change to memmove() solves the problem! It allows for overlapping addresses. I guess this is specific to certain versions of gcc.. mine is 4.6.1. Curious what version iq_132 and JacKc is using?