Именная подборка для РЭШ РЭС

Я пишу эмулятор для NES и пытаюсь запустить Super Mario Bros. Все работает нормально, за исключением некоторого мерцания экрана, которое происходит, когда игра использует nametable 1.

Если вы не в курсе, в верхней части экрана SMB отображается строка с постоянным счетом (около 31 строки развертки), а остальная часть экрана под ним прокручивается горизонтально. Это отображение результатов находится только в Nametable 0 (и nametable 2, поскольку картограф использует вертикальное зеркальное отображение).

Игра устанавливает PPUCTRL на имя таблицы 0 в начале NMI, а затем ожидает попадания спрайта 0 (что происходит около строки 30), а затем устанавливает таблицу имен на 0 или 1, как того требует остальная часть экрана.

Что происходит с моим эмулятором, когда для PPUCTRL задано нечетное число еще до отображения первой строки сканирования. В результате он отображает шкалу очков из таблиц правильных имен, и я получаю мерцание.

Я подтвердил поведение стандартным эмулятором fceux. Там также PPUCTRL установлен на значение, которое является нечетным. Но там эмулятор все равно рисует слева от таблички.

Мое понимание PPUCTRL не правильно? Всегда ли PPU использует name table 0 до попадания спрайта 0?

0 ответов

Другие вопросы по тегам