byuu wrote:
It seems I am doomed to explain this every three months to a new person for the rest of my life

$007f52 is a Cx4 register that tells it whether only one ROM chip is needed (value = $00) or whether there are two ROM chips on the board (value = $01)
At power reset, the value is initialized to 0. Mega Man X2 has two ROMs. So because of this, you can't read from the second ROM and the last 4mbits is dumped as 0x00s. It works with Mega Man X3 because that board only has one ROM chip.
So to dump MMX2, write $007f52 = #$01 first. To dump MMX3, you don't have to do anything, but you may as well write $007f52 = #$00 just in case.
If you can't write to the bus with your dumper, then you're out of luck. But rest assured, a dozen people have dumped MMX2 and RMX2, the dumps out there are perfect copies.
byuu, you are the man! You have it backwards though. I found that $007f52 read 1 in Mega Man X 2. I was able to write to it, change it to 0, and that did the trick. I suppose if Mega Man X3 is 8megs, going by your analysis the value should be kept at 1.
To write to the register, I held /RD and RESET high, and held /CS, and /WR low. I changed direction of the data I/O to output, and wrote the value, and then changed the control values back, and ripped. The checksums match now. This should be stickied. I searched the web after you made your post, and I still couldn't find any information elsewhere on this register. If it's out there, provide me with a link. If I missed it I'd like to know so I could Google better next time.