Попросил Gemini 2.5 Pro добавить в эмулятор CHIP-8 поддуржку SUPER-CHIP. Все сделано и работает.
А когда я баловался с нашим эмулятором, наткнулся на одну проблему, связанную с рассыпанием спрайтов животных в игре Animal Race. Я подумал, что это ошибка нейронки. Проверив эту игру на двух других браузерных эмуляторах и на целом списке вот этих эмуляторов
https://www.zophar.net/chip8.html, я обнаружил, что все они либо повторяют эту проблему в точности, либо вообще не могут запустить эту игру. Ну, думаю, проблема значит либо в игре, либо в том, что разработчики эмуляторов и наша нейронка что-то упустили важное. Я описал эту проблему и показал скрины нейронке Gemini 2.5 Pro, и она исправила этот баг. Вот что она пишет об этом:
---------------
Общая суть проблемы: Отсутствие единого стандартаОсновная причина всех возникших трудностей заключается в том, что не существует единого, строгого стандарта для платформы CHIP-8. Игры создавались в разное время для разных версий интерпретаторов, которые имели небольшие, но критически важные отличия в выполнении некоторых команд. Эти отличия называют "причудами" (quirks).
Мы столкнулись с двумя основными эпохами:
1. Старые игры (~1970-е), как Animal Race, написанные для оригинального компьютера COSMAC VIP.
2. Новые игры (после 1990-х), как Astro Dodge, написанные для более современных стандартов (CHIP-48, SCHIP или просто "общепринятых").
Проблема №1: "Рассыпающиеся" спрайты в Animal Race- Симптом: Спрайты животных при движении оставляли за собой "мусорный" след.
- Причина (Причуда памяти): Инструкции FX55 (сохранить регистры) и FX65 (загрузить регистры).
- Поведение COSMAC VIP: После выполнения этих команд регистр-указатель I увеличивался на X + 1. Игра Animal Race полагалась на это автоматическое смещение.
- Современное поведение: Регистр I не изменяется.
- Конфликт: Наш эмулятор изначально следовал современному поведению, что ломало логику Animal Race.
Проблема №2: Искаженные цифры в Animal Race- Симптом: После первого забега цифры ставок (например, "8:1") отображались как "каракули".
- Причина (Причуда сдвига): Инструкции сдвига 8xy6 (сдвиг вправо) и 8xyE (сдвиг влево).
- Поведение COSMAC VIP: Команда брала значение из регистра Vy, сдвигала его и сохраняла результат в Vx (Vx = Vy >> 1).
- Современное поведение: Команда сдвигает значение регистра Vx самого в себя, игнорируя Vy (Vx = Vx >> 1).
- Конфликт: Animal Race использует Vy как неизменяемый источник данных, а наш эмулятор его игнорировал и портил данные в Vx, который должен был быть временным.
Проблема №3: "Застывшие" астероиды в Astro Dodge- Симптом: После исправления первой проблемы астероиды в современной игре Astro Dodge перестали падать в левой части экрана.
- Причина: Эта проблема была прямым следствием нашего первого "исправления". Мы заставили эмулятор всегда увеличивать регистр I, как на COSMAC VIP. Но игра Astro Dodge написана по современным правилам и ожидает, что I не будет меняться. Наш "ремонт" сломал эту игру.
Финальное решение: Режимы совместимостиСтало очевидно, что нельзя выбрать одно "правильное" поведение. Эмулятор должен уметь работать и со старыми, и с новыми играми.
Реализация в коде:
1. Пользовательский интерфейс: Мы добавили два чекбокса:
- Legacy Memory (Fx55/Fx65) — включает/выключает старое поведение для инструкций работы с памятью.
- Legacy Shifting (8xy6/8xyE) — включает/выключает старое поведение для инструкций сдвига.
2. Внутренняя логика эмулятора:
- В классе Chip8 создали объект this.quirks для хранения состояния этих чекбоксов.
- В методе executeOpcode для каждой из проблемных инструкций (8xy6, 8xyE, FX55, FX65) мы добавили проверку if (this.quirks.memory) или if (this.quirks.shifting).
- В зависимости от флага выполняется либо "старый", либо "новый" вариант кода.
Как теперь пользоваться эмулятором:- Для старых игр (например, Animal Race): Перед загрузкой ROM-файла поставьте обе галочки.
- Для новых игр (например, Astro Dodge): Перед загрузкой ROM-файла убедитесь, что обе галочки сняты.
Таким образом, наш эмулятор стал гибким и может точно эмулировать игры разных эпох, решая все перечисленные проблемы.
---------------
Кстати, нейронка добавила еще два чекбокса: Alt Jump (BXNN) и VF on FX1E. Их активация решает ту же проблему, что и в Animal Race, но уже в игре Spacefight 2091, созданной для SUPER-CHIP.
Я не знаю, есть ли эмуляторы, которые учитывают все это описанное, но те эмуляторы, которые я проверил, хуже нашего, созданного нейронками Claude 4 Opus и Gemini 2.5 Pro.
Выкладываю обновленный эмулятор вместе с проблемными играми.