OK,
My code fills all 128K CHR RAM with data from bank 0-16, then reads back and compares byte for byte the data in CHR RAM. 100% match.
So why doesn't Bugs Bunny birthday blowout or Mario2 work on this cart?
megaman 3+4 works fine. MM4 doesn't rely on CHR RAM on the cart, and MM3 is 128k/128k, H mirroring and is more or less identical to Mario2/bugs...
I'm thinking mario/bugs could be writing to a different address to swap banks? That could explain what is going wrong on these games and not others. Or it could be a mirroring thing? Forcing bad mirroring in fcuex can simulate some of the artifacts I'm seeing on the real NES which makes me think it could be related.
The NES ALU is pretty cool though, comparing a value from an indirect memory location using an 8bit pointer, with an offset.
All without modifying the accumulator. Very cool.
Edit:
I had a look at the mapper access of SMB2, it sets A12 inversion for all its writes. This could be the cause. I then looked into Bugs, there is absolutely nothing odd with any of its mapper access. All standard addresses, Mirroring is set to 1, 3 times throughout the startup into the game. Pretty lost in all this!
I changed all mirror writes from 1 to 0 to see the effect in the emulator. It changed the starting location of bugs in his crazy world, but otherwise completely playable.