Теория всегда проверяется практикой. Вот Кулхард, запустил Wai Wai World на Mesen, у него в летательном уровне вылезла эта кашица, перешёл на Mednafen, то же самое, потом ещё третий был какой-то модный, вроде бы BizHawk, то же самое. А у "дедушки" FCEUX таких проблем не наблюдается. И таких игр не одна и не две.
Я про практику и писал, у FCEUX много проблем и он уже плохо обновляется. Это не ошибка Mesen, дело в том, как задаётся маппер и как эмулятор обрабатывает его, когда он чётко не задан. Повторю, проблем бы не было, если бы Кулхард запустил оригинальный ром на Mesen 0.9.9 или последнем Mesen с заголовком рома iNES 1.0 или любую версию рома с заголовком рома NES 2.0 на последнем Mesen.
Если исправите заголовок Wai Wai World (J) [T+Rus Shedevr (11.06.2005)]
https://www.emu-land.net/consoles/dendy/roms/wai-wai-world (приложил), то Кулхард больше не будет страдать в последнем Mesen. В обоих английских переводах уже NES 2.0 и работает правильно.
UPD: Я открыл код FCEUX, они специально игнорируют запись 0xFF в Mirroring Control регистр
https://github.com/TASEmulators/fceux/blob/2b8f6e76271341616920bb7e0c54ee48570783d3/src/boards/vrc2and4.cpp#L114. Для тех кто не понял, этот костыль для конкретной игры Wai Wai World не даст записать в регистр 0xFF, если вдруг вам захочется в другой игре или хаке, обычно такое не нужно - только 2 бита учитываются, но при оптимизации нормально писать типа такого LDA #$FF STA $xx STA $9000 и сам факт костыля огорчает.
UPD2: Так же можно обмануть эмулятор, изменив файл так, чтобы контрольная сумма совпала с оригиналом, с Mesen 0.9.9 и новым такое сработает, но не BizHawk. Вот ром (CRC32Hack) с правильным полётом на Mesen 0.9.9 и новее. Использовал
https://github.com/rr-/CRC-manipulator:
crcmanip-cli.exe p "Wai Wai World (J) [T+Rus Shedevr (11.06.2005)].bin" hack.bin 8A96E00D -o -p 131062
Предварительно убрал заголовок. Программа изменила 4 байта в свободном месте.
Для перехода на уровень с полётом Game Genie - AANAPSLA. Если вводить чит в эмуляторе, ром не будет изменён.
Так, например, можно исправить работу хаков на ужасном эмуляторе NesterJ для PSP, который вручную задаёт CYCLES_PER_LINE (
https://github.com/PSP-Archive/NesterJ-AoEX/blob/main/nesterj/nes/nes_set_cycles.cpp).