Цветной фон
Цветной фон

Спустя месяц разработки, а то и не весь месяц я разрабатывал, я смог добиться корректной работы эмулятора. В перерывах в разработке и я почитывал книги разные и думал о том, где могут быть баги. Всего было два бага:

  1. Коллизия

  2. Неправильное отображение спрайта, если он смотрит влево

До чего же сложно было понять в чём баг коллизии, особенно, если я даже не любитель писать игры для NES. Я проверял, перепроверял код и исправлял мелкие баги, но ничего не выходило. Я думал, что такой сложный баг мне придется искать, разбирая каждую крупицу код, пока я не дойду до столкновения, но в то же время я боялся этого; кода было очень много и я не знал как найти код столкновения спрайта. И мне случайно вдруг возникла идея, а что если ppu_addr не нужно увеличивать, если считываешь его значение. Этот баг был у меня в коде, я не думал, что допущу этого, но читая документацию, я видимо не правильно понял суть. Когда пофиксил баг, то всё заработало. Вот как было до бага.

Вот как стало.

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

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

Теперь, когда у меня получилось сделать это и игра работает, я хотел бы запустить это на arduino. Сначала, прежде этого, мне нужно оптимизировать так, чтобы работало шустро на моём нетбуке, потому что реальный эмулятор работает на нетбуке без проблем, а мой работает медленно.

Я думаю, что вместе с поиском оптимизаций, буду строить схему на arduino вместе с SRAM LCD SD-CARD и демультиплексора. Все эти элементы работают через SPI интерфейс и я хочу заморочиться и сделать своё первое творение, эмулятор NES на arduino, до чего прекрасна эта нота! Надеюсь у меня всё получиться и я отпишусь как всё это реализовал, а пока, вот как сейчас работает эмулятор.

Комментарии (8)


  1. sic
    20.02.2025 00:51

    А эмулятор будет nes romы грузить и стараться максимально приблеженно эмулировать то железо? Тогда круто, удачи.


    1. xverizex Автор
      20.02.2025 00:51

      Да, ещё задумка такая, что я реализую её в виде библиотеки. Её можно даже в свою игру встроить будет или на железо, arm, arduino, pic, думаю, что научусь для них это делать.


  1. Firelander
    20.02.2025 00:51

    Классическая Ардуино не сильно-то ушла от самой nes по производительности. Особенно с учетом того, что надо эмулировать ещё PPU. Даже если допустить, что это теоретически возможно, то там будет даже уже не эмуляция а исполнение прекомпилированного кода, который надо ещё успевать откуда-то читать и класть в кеш. На стмке о 168 МГц это выглядит уже чуть более реалистично, но там нужно будет очень хорошо погрузиться в пучину низкоуровневых оптимизаций и активного использования DMA. Если код тормозит даже на ноуте, то дорога обещает быть долгой.


    1. Jijiki
      20.02.2025 00:51

      можно попробовать фрибсд, он работает не как линукс(на ПК точно), по памяти поменьше потребляет, и архитектура ОС интересная, может получится


      1. Firelander
        20.02.2025 00:51

        А какое отношение имеет FreeBSD к bare-metal системам? Тем более там где надо выжимать каждый такт, и уж точно не до прослоек в виде OC (причём даже не RTOS)


        1. Jijiki
          20.02.2025 00:51

          ну на ардуино же можно сегодня поставить линукс я видел

          а ой простите я путаю ардуино и raspbery pi

          прошу прощения


  1. Jijiki
    20.02.2025 00:51

    интересно, вы молодец сделали эмулятор, он работает по всем тем законам эмуляции это круто тоесть он кодирует в логику, а вы бы не хотели сделать для пк версии хотябы для себя, чтобы не боятся этого кода и тестов последствий от изменения - правок, такую штуку как обертка на ПК уровень, но работающий от вашей VM если вы это сделаете поидее вам будет проще креативить и проверять/изменять, а поддержку НЕС оставить как фишку поидее в этом случае вы получите все преимущества эмуляции и высокого уровня программирования, тоесть у вас будет своя система сборки основаная на VM, там поидее надо прикрутить систему сборки и бинд библиотеку к вашему асемблерно подобному коду, хотя я могу ошибаться может вы это и сделали, просто вы пишите что кода много и поидее как я понял вы смотрите в стек ассемблерно-подобного кода


  1. FridayJew
    20.02.2025 00:51

    Звучит круто. Помочь наверное ничем не смогу. Но повторить, если это будет возможно запустить на условной esp32 или ещё где то, очень бы хотел ;D