
Спустя месяц разработки, а то и не весь месяц я разрабатывал, я смог добиться корректной работы эмулятора. В перерывах в разработке и я почитывал книги разные и думал о том, где могут быть баги. Всего было два бага:
Коллизия
Неправильное отображение спрайта, если он смотрит влево
До чего же сложно было понять в чём баг коллизии, особенно, если я даже не любитель писать игры для NES. Я проверял, перепроверял код и исправлял мелкие баги, но ничего не выходило. Я думал, что такой сложный баг мне придется искать, разбирая каждую крупицу код, пока я не дойду до столкновения, но в то же время я боялся этого; кода было очень много и я не знал как найти код столкновения спрайта. И мне случайно вдруг возникла идея, а что если ppu_addr не нужно увеличивать, если считываешь его значение. Этот баг был у меня в коде, я не думал, что допущу этого, но читая документацию, я видимо не правильно понял суть. Когда пофиксил баг, то всё заработало. Вот как было до бага.
Вот как стало.
Следующий баг, который я не мог очень долго решить, это некорректное отображение спрайта, если он смотрит справа налево.
В рендере я видел, что спрайт рисуется сначала с правой стороны, а потом с левой. В fceux наоборот. В итоге я нашел функцию, где я не учёл смещения. Сколько раз проверял весь код, но на условные операторы не обращал внимания, оказалось, что там не было перехода на нужный адрес.
Теперь, когда у меня получилось сделать это и игра работает, я хотел бы запустить это на arduino. Сначала, прежде этого, мне нужно оптимизировать так, чтобы работало шустро на моём нетбуке, потому что реальный эмулятор работает на нетбуке без проблем, а мой работает медленно.
Я думаю, что вместе с поиском оптимизаций, буду строить схему на arduino вместе с SRAM LCD SD-CARD и демультиплексора. Все эти элементы работают через SPI интерфейс и я хочу заморочиться и сделать своё первое творение, эмулятор NES на arduino, до чего прекрасна эта нота! Надеюсь у меня всё получиться и я отпишусь как всё это реализовал, а пока, вот как сейчас работает эмулятор.