Rise Out для Агата

Друг И. прислал интересную ссылку: We Pointed an AI at Raw Binary Files From 1986.

Там Claude Code натравили на ROM файлы от игрового автомата Bubble Bobble, очень успешно.

A conversational AI was given raw binary files with no context beyond their
filenames. Through iterative analysis and reasoning, it produced a complete
reverse-engineering of a commercial software product: architecture
documentation, full disassembly, decoded graphics, extracted level data, gameplay
mechanics, audio system mapping, and hidden content discovery.

В комментариях предположили, что полный анализ Bubble Bobble уже был в данных, на которых тренировался Claude, так что он фактически вспомнил и подогнал под известный ответ.

Решил проверить.

В конце 1980'х я много программировал на Агате. Наверное самыми большими достижениями были MT DOS (сравнительно полная операционная система, писалась вместе с Сашей Турченковым) и переписанная для Агата любимая игра Rise Out с "Ямахи" (MSX-2). Переписанная в смысле без какого-то разбора Ямаховской игры, просто по внешнему виду.

В 2012 году несколько оставшихся с тех времён 5-дюймовых дискет я послал Игорю и энтузиастам из https://t.me/agatcomp. Они сделали собственное устройство, но даже им восстановить удалось не всё, и на собственно Агате почти ничего не заработало (что не удивительно, диски где только не лежали 20+ лет).

Ну что-ж. Ещё 14 лет спустя, и через 37 лет после того как это писалось, у Клода ушло меньше часа чтобы понять что это за образы дисков, собрать из фрагментов на трёх дисках игру, вытащить из неё спрайты, и уровни, отрисовать это графически.

Первый уровень, как его отрисовал Claude, вообще без моего участия
Загрузочная заставка. Я тогда знал толк в цветах.

Всё на основании практически единственного промпта.

Вот его собственное описание: https://github.com/amaltsev/agat-rise-out/blob/main/README.md

Забавно, что когда я попросил Клода написать этот README, он написал, а потом сказал:

The one place I let myself sound pleased is the RISM.ASM splice; cut it if it reads as showing off.

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

Игровое меню, как его отрисовывает web вариант.

Я тогда был жутко горд как мне удалось сделать звуки и бегущую строку. На Агате звук генерируется записью в 0xC030 – в смысле запись переключает фронт на динамике, так что две записи с интервалом между ними дают щелчёк, а если точно расчитать время между щелчками, то можно таким образом сгенерировать и более сложный звук. И отдельно есть прерывание на фиксированные 500гц. Звуки в игре делаются этим прерыванием, т.е. никогда не превышают 250 Гц и вообще очень ограничены. Но играются параллельно с основным циклом и этим я тогда был очень доволен – до сих пор помню 😄

В варианте, который Клод написал в JS, это довольно неплохо повторено. Тоже получаются щелчки и из них простейшие звуки. Я правда звуки скорректировал немного уже в коде для web, но примерно так-же как я их и тогда корректировал – всё честно, как может железо.

Отдельно приятно было увидеть как заставка отрисовывается и бегущую строку. У меня о них тоже были тёплые воспоминания. Да, я тоже "letting myself sound pleased".


Рад-ли я? Рад, что можно посмотреть на свою тинейджерскую игру. Давно мечтал. А тому, что это сейчас вообще не задача для нашего нового искусственного разума – от этого радость испытывать сложно. Интересно, интригующе, но не радостно.