Интересна его причина
В Dendy режиме начало заставки (после ожидания) как на скриншоте:
Это из-за NMI, которое прерывает установку PPU адреса для записи индексов тайлов фона. В NTSC из-за других таймингов нет попадания в это место. Код такой:
CADC:
LDA $30
AND #$FB ; NMI включается, выше был отключен. AND #$7B для исправления
STA PpuControl_2000
LDA $CD
STA PpuAddr_2006
; Прерывание NMI
LDA $CC
STA PpuAddr_2006
Между двумя записями в $2006 происходит прерывание. Выше NMI отключалось, но почти сразу включается, возможно по ошибке, замена AND #$FB на AND #$7F отключает NMI и это решает проблему.
Заметные артефакты в PAL режиме во время ожидания Sprit 0 Hit. В оригинале в нескольких местах:
LDA PpuStatus_2002
-:
LDA PpuStatus_2002
AND #$40
BEQ -
Такой код при вызове в VBlank не будет ждать, что и происходит у PAL с долгим VBlank. Замена на типичный код исправляет:
-:
BIT PpuStatus_2002
BVS -
-:
BIT PpuStatus_2002
BVC -
Прикладываю исправленный ром, теперь на Dendy должно быть нормально, на PAL есть артефакты, но не такие заметные, также скрыл нулевой спрайт в Battle Mode. Всё не проверял.
Есть MMC3 конверсия от Evgenykz:
http://bootleg.games/BGC_Forum/index.php?topic=3206.msg22787#msg22787, там на Dendy нет проблемы, но похоже просто из-за тайминга.