Thanks a lot for the response. I spent a lot of time on this and still haven't got it working. I really didn't think that it was dirty contacts because I cleaned them thoroughly and the problem only comes up roughly once every three of four thousand bytes and seems to be the mostly the same bits each time that are erroneous. The error seems to be always erronneous high bits and they occur by themselves, not in clusters. out of 128 MegaBits of data in the ROM, I found there to be roughly 44,000 erroneous bits spread throughout my dumped ROM. As a result, a given data pin will read correctly thousands of times before it encounters an error and so I do not believe that this is a contact or a soldering issue. It's possible that my cart is a repro (It's a very convincing copy if it is) but the weird thing is that the cart runs perfectly in my GCN Gameboy Player. That said, the dumped ROM will not run in any emulator, I assume because of the 44,000 bit errors.
I think that the error might be due to too much pull-down resistance on the game cart data pins causing a 1 bit not to be brought down to 0 on occasion. Maybe this is the result of a defect or abnormality in the ROM, itself. I do not believe that the Arduino has built in pull-down resistors and the Sanni board does not implement any external pull-down resistors on the data bus. That said, maybe the Gameboy player has them(?) This might explain why the error seems to come up as a single erroneous high bit but works fine in the Gameboy Player.
I tried re-coding the GBA read word function to use sequential ROM reads instead of inputting a data-address for each word read. I thought that the addressing phase of the read-word might be contributing to pins not getting pulled down during the word output phase. Based on my reading of the GBA programming architecture, you can sequentially read the entire cart by toggling the Rd pin and only addressing at the beginning. Unfortunately, sequential reading didn't resolve the errors either.
The one thing that I haven't tried is adding pull-down resistors to the cart reader. If I get the chance, maybe I can print a cartridge adapter board that can be plugged into the cart reader GBA slot that has 16x10k resistors. The reason why I haven't done so is because it is a bit of work and I am not 100% sure that it will work. That being said, I for now I opted to just buy a used DS for now and I will try dumping the cart with the GBA backup tool on a R4 card. I have 1 or 2 other GBA games that won't run in emulators but I think are having this problem as well because the short checksum that the cart reader checks is coming back as correct for these as well.
Thanks again for the post, though. The fact that you can dump this game rules out the following possibilities that I was considering:
- That there is some kind of weird copy protection implemented on the cart.
- That this is a problem that is present on all Mother1+2 GBA carts.