There was a forum post on the J+ forums today asking why his Progear fails the ROM checks in the test menu.
This reminded me that I had made a little fix for this a while ago so thought Id write it up.
NOTE: No modified ROM’s will be available for download on my site but instructions to help DIY are here
The ROM tests fail on this version of the game because it looks like this version was once the Phoenix edition but has been hacked a little to remove the Phoenix screen at boot up. Since Razoola already fixed the checksum value in his releases, the modification changed the end result slightly which make the test fail.
So, basically I started off looking at disassembly of the code.
The code that checks the ROM’s is at location $395c
The checksum loads the first HEX value into a register then sequentially adds the rest of the HEX values into it. The final result will be the ROM checksum.
It looks like Razoola also modified the code to incorporate a more thorough test routine. The original started its checksum after the point where the expected checksum value is stored where as Raz’s code checks the whole thing.
This left me with a couple of ways to modify the code. I could either revert back to starting the checks after the stored value or I could add some filler values in an unused section of ROM in order to modify the final value.
I chose the first method for no particular reason.
The start address of the checksum is defined at address $3962 and original reads LEA ($1, A0), A0
This loads address $1 into register A0 as the starting address.
I changed this to read LEA $FFF, A0
Now the game will pass its tests on ROM 0. The same process was used to fix the ROM 1 issue too.