Реклама

[Перевод] Эмулятор Game Boy Color на MicroPython: Pokémon Crystal на конференц-бейдже с RP2350

#Перевод #Эмулятор #Game #Color #MicroPython
[Перевод] Эмулятор Game Boy Color на MicroPython: Pokémon Crystal на конференц-бейдже с RP2350

Стив Франсиа, автор Hugo и Cobra, после эмулятора NES запустил на конференц-бейдже GitHub Universe с RP2350 эмулятор Game Boy Color — на MicroPython с генератором кода Viper. Процессор SM83 с его восемью регистрами и 512 опкодами не влез в четыре быстрые локальные переменные Viper, и декодер пришлось строить на восьмеричной раскладке опкода. Ветвления по адресу заменила таблица из 16 страниц по 4 КБ, двухмегабайтные картриджи подгружаются по банку при первом обращении, а разгон до 300 МГц вешал общую шину QSPI. Плюс три бага из реальных игр: окно диалога в Oracle of Ages, «вывернутый» Линк в режиме двойной скорости и указатель стека, который Pokémon Crystal направляет прямо в ROM. Читать далее

Закончив эмулятор NES, я перепробовал на нём кучу игр, и все шли нормально. На бейдже я даже прошёл первые несколько подземелий Zelda. И тут меня зацепило: в Zelda поиграть хотелось, но по форме бейдж куда больше похож на Game Boy, чем на NES. А на Game Boy тоже есть и Zelda, и Pokémon. Интересно, насколько это сложно, если про железо Game Boy я толком ничего не знаю? Оказалось, довольно сложно.

Так что я снова взял в напарники Gemini и решил проверить, потянет ли та же плата Badger на RP2350 Game Boy и Game Boy Color. Генератор кода Viper в MicroPython и 8 МБ QSPI PSRAM остались прежними, а вот головоломка со стороны процессора и картриджа оказалась совсем другой.

Опыт написания эмуляторов для чтения не нужен: каждый термин я объясню по ходу дела.

Я думал, что SM83 будет проще. Не тут-то было