Doom в мозгах, Linux под капотом, а снаружи — наивная старая оболочка.
Когда инженерия сталкивается с иронией, рождаются проекты вроде этого: Linux-разработчик Мэттью Гарретт вдохновился грибами-паразитами и пересадил старому Commodore Amiga новый мозг — в виде Raspberry Pi, который теперь делает только одно: загружает Doom. Никакой AmigaOS, никакой многозадачности — только шутер, только ад, только пиксели.
В основе работы — плата PiStorm, разработанная энтузиастом Клодом Шварцем. Это переходник, соединяющий 40-контактную шину GPIO на Raspberry Pi с параллельной шиной Motorola 68000. С одной стороны — Pi, с другой — контакты, совместимые с процессором Amiga. В центре конструкции — CPLD Altera MAX II, служащая логическим мостом. Это позволяет одноплатнику «внедряться» в системную плату и эмулировать поведение оригинального CPU, включая выполнение кода из ПЗУ или ОЗУ.
По умолчанию такая система позволяет ускорить старую машину, добавить ей памяти, периферии и быстродействия. Но Гарретт решил пойти другим путём: не расширять возможности Amiga, а полностью заменить её вычислительный центр — сделав из неё аппаратную оболочку для однозадачного Linux-компьютера. Всё управление остаётся на стороне Raspberry Pi, а Amiga используется как «внешний мир»: экран, порты, базовая инициализация.
Для запуска Doom он использовал Chocolate Doom — популярный современный порт оригинальной игры, — а также старый ADoom, порт Doom под Amiga, впервые появившийся в 1997 году, но впоследствии заброшенный. Вместо привычной загрузки AmigaOS, система стартует сразу в игру. Но чтобы это стало возможно, пришлось преодолеть немало архитектурных препятствий.
Оказалось, что без запуска Kickstart — прошивки, содержащей базовые функции начальной загрузки и обращения к памяти — Amiga оказывается в странном состоянии. Гарретт обнаружил, что «нельзя ничего записать в RAM, пока не выполняется код, а нельзя выполнять код, пока процессору не указали, где этот код находится». Классический замкнутый круг. Kickstart в Amiga 1000 исторически загружался с дискеты, в более поздних моделях он был записан в ПЗУ — но в обоих случаях он был критически важен для начальной инициализации.
Решением стало использование слабо документированной функции наложения содержимого ПЗУ на нулевой адрес — в обход обычной процедуры запуска. Гарретт иронизирует, что «это функция, о которой обычно не нужно заботиться, если ты запускаешь Kickstart как любой нормальный Amiga… но я оказался в этом положении из-за плохих жизненных решений». После активации этой опции он подал сигнал сброса на шину — и это наконец открыло доступ к оперативной памяти, разблокировав Amiga.
В результате получилась система, которая загружается напрямую в Doom без запуска AmigaOS, хотя с рядом ограничений: изображение выводится с графическими артефактами, звук отсутствует, и всё ещё присутствует лёгкая нестабильность. Тем не менее, игра отображается на экране Amiga, при этом сама вычислительная логика полностью заменена одноплатным Linux-компьютером.
Название проекта — Cordoomceps — отсылает к грибам рода кордицепс, которые в природе захватывают тела муравьёв и управляют ими ради своей биологической программы. Точно так же Pi под Linux использует тело Amiga исключительно ради запуска Doom. Это не ускорение, не эмуляция и не модернизация — это цифровое «заражение».
Сам Гарретт подводит итог: теперь у него есть слегка глючная, лишённая звука версия Doom, которая запускается на Amiga без загрузки операционной системы, с полностью заменённым мозгом — и, вероятно, последующие апдейты «сделают всё только хуже».
Проект выложен в открытом доступе: подробный отчёт размещён на личном сайте Гарретта, а исходный код опубликован в GitLab под лицензией GNU GPL v2.