Итак, я скачал пару картриджей, чтобы посмотреть, запускаются ли они внутри моего эмулятора, и, в отличие от прошлых дней, все они по крайней мере показывают титульный экран и, возможно, часть внутренней игры:

У нас 539 опкодов, и это число не так сильно выросло за последние дни. Я все еще нахожу некоторые нереализованные, не волнуйтесь. Но это значит, что для написания хоть сколько-нибудь функционального эмулятора Sega Master System нужно реализовать как минимум 550–600 опкодов Z80.

Это делает эту систему намного сложнее, чем системы на базе 6502, где вам нужно реализовать, скажем, 100 кодов операций, чтобы увидеть что-то на экране (я думаю, что C64 требует еще меньше кодов операций для отображения экрана загрузки).

Я спрашивал в эмуляции Discord, и кажется, что мои ромы, которые показывают черный экран, не используют режим M4, поэтому имеют фиксированную палитру и не используют CRAM. Кто-то сказал также, что у них может быть корейский маппер. Это многое объясняет (и то, что когда-нибудь мы должны внедрить банковские операции и картографы).

Итак, я решил внедрить банковское обслуживание сейчас.
Начнем с этого:

Проверьте имя рома.
Ааааа БУМ!

Запуск Соника был одной из вех, к которой я стремился, и мы добились этого. Конечно, ему очень нужен звук. Идя дальше в игре, он также остро нуждается в прокрутке x/y:

Но посмотрите, какой он милый!
(к сожалению, я заметил, что в этой игре экран гаснет каждые 2 секунды или около того. Я проверю позже)

«Новые» банковские игры требуют намного больше кодов операций. И на 570 реализованных инструкциях вы начинаете видеть это:

Все еще извиняюсь за нереализованный переворот плитки.
Хорошо, переворачивание плитки реализовано. Это было похоже на 4 строки кода:

Провели утро, рассматривая титульные экраны известных игр во всей их красе:

Но и:

Но даже:

В этом и есть радость эмуляции: смотреть на все титульные экраны.

Невероятно, насколько симпатичны и искусно сделаны эти титульные экраны. Между прочим, эмуляция также является средством для обнаружения графики и звука, которые вы бы пропустили, если бы не эмуляция.

600 опкодов.
Я чувствую, что достиг плато. Мотивация продолжать разработку снижается, но я постараюсь оставаться сильным. В конце концов, конечная цель этого эмулятора — подражать Сонику с приличным звуком, и я постараюсь добиться этого.

Реализована прокрутка фона x/y.
Это работает. Соник красиво прокручивается:

Мне все еще нужно понять, как работать с крайней левой колонкой.

О, вы заметили усеченные ладони справа. После получения всех 28 строк карты экрана, вот лучший снимок экрана:

Мне срочно нужна большая визуализация для моего эмулятора. Теперь, поскольку он запускался как отладчик, экран выглядит так:

(да, эмулируемый экран — это та маленькая штучка справа).

Хорошо, теперь у нас есть мегаэкран, когда эмулятор находится в рабочем режиме.

Я думаю, что столкнулся с (еще одной?) ошибкой «showstopper». Спрайты в Final Bubble Bobble, кажется, мерцают каждые 2 секунды или около того. О боже, это пугающе. Кажется, это связано с vcounter, который мы обновляем в каждой строке, поэтому, поскольку у меня еще нет линейного рендерера, это может быть связано с нашим рендерером…?

Несмотря на это, у нас есть хороший прогресс в некоторых других ромах, например:

Заметили, что тоже появилась новая красивая иконка для нашего эмулятора?

Я реализовал регистр прерывания строки, и вот эта великолепная красотка валяется:

Хорошо, исправляю тесты для кучи опкодов.

Кажется, есть свет в конце туннеля: один из коллег на канале Discord подтвердил, что Соник включает и выключает дисплей в каждом кадре, но между строками развертки 194 и 220. Поэтому мне нужно реализовать рендерер строк развертки, чтобы увидеть, как он работает. правильно.

Итак, да: следующим шагом будет рендеринг строки сканирования.