How exactly does the bankswitching for Bill & Ted's Excellent Video Game adventure work? I noticed that the interrupt handler(?) was performing INC FFFF. Does that write FF (value in rom at FFFF) then write 00 (FF+1)? Any other surprise writes to ROM areas?
That particular game doesn't seem to work properly unless I have my MMC1 either ignore the second write OR reset when switching registers. Since the former is exceedingly difficult in my current mapper interface, I ended up having to go with the 2nd method just to get that game to run.
Though, if I removed that hack (and made said game unplayable), I doubt anybody would ever notice... ^_^
(well, other than you)
Is there any simple ASM modification that can be applied to the rom to use a much saner method of bankswitching?
If I recall, it does an RMW on one of the bank registers - something like INC $FFFF. This means resetting the mapper and then writing 0 to the buffer (unless the emulator does what Q described).
Perhaps you could replace it with a lda $80/sta $FFFF ? However, that would mean inserting extra bytes in the middle of things, it could mess up other parts of the game.
-Martin
A better solution would be to change the address/data incremented so it's between 0x80 and 0xFE (inclusive).
Could there be some manditory time delay between register writes for them to have effect? Kind of like how the MMC3 needs to have 9 or so PPU cycles between A12 rising edges for the counter to decrement... maybe MMC1 needs at least 2 CPU cycles between register writes?