Содержание
Ретро-энтузиаст Bits und Bolts модифицировал VBIOS старой видеокарты S3 ViRGE DX и встроил туда игру Snake. Получилось так, что «змейка» запускается прямо во время старта ПК, а после выхода загрузка продолжается как обычно.
Фишка не только в игре. Перед этим автор допилил BIOS так, чтобы тот показывал текстовый сплэш-экран с фактической частотой GPU — динамически, при каждом запуске.
Как Snake уместили в VBIOS и почему это вообще сработало
В основу легла Snake 512 — бесплатная версия «змейки», которая занимает 512 байт и написана на x86 assembly. Изначально её делали под размер загрузочного сектора диска, чтобы игра работала в x86 real mode. Для VBIOS это почти идеальная среда: минимальный код, никаких зависимостей от ОС и запуск ещё до старта системы.
Но «скопировать с GitHub и вставить» не вышло. Bits und Bolts использовал Claude Code, чтобы подготовить комментированный код из репозитория и превратить его в набор шестнадцатеричных байтов, пригодный для внедрения в образ VBIOS.
Дальше началась нормальная инженерная рутина. Автор открыл образ VBIOS в Ghidra (open source-проект, который ведёт NSA, код доступен на GitHub), нашёл свободный участок сразу после сплэш-экрана и вставил туда новый блок. Затем он пропатчил ссылки так, чтобы код реально вызывался после сплэша, а не оставался «мертвым грузом», и в конце поправил контрольную сумму BIOS.
Репозиторий игры открыт: Snake 512 на GitHub.
Как это выглядит при включении ПК
Сценарий загрузки после модификации выглядит так: сначала появляется модифицированный сплэш-экран, затем BIOS предлагает выбрать действие. Если пользователь не трогает клавиатуру, подсказка таймаутится, и компьютер продолжает обычную загрузку.
- Старт системы: появляется встроенный сплэш-экран
- Выбор: сыграть в Snake (N) или пропустить (Esc)
- Таймаут: если ввода нет, загрузка продолжается автоматически
- N: запускается Snake
- Esc: BIOS читает и показывает реальную частоту GPU
- Дальше: система грузится как обычно
Есть и ограничения, о которых автор сказал прямо. USB-клавиатуры с этой реализацией не работают. Звука тоже нет.
Цвета «змейки» тоже перекрасили — прямо в дизассемблере
Когда всё завелось, Bits und Bolts пошёл дальше и настроил внешний вид игры. Он заранее отметил в коде участки, где задаются цвета рамки, фона, головы и тела змейки, и поменял значения на другие из VGA-палитры. Правки он делал там же, в Ghidra, через hex-значения нужных «строк и колонок» палитры.
В конце ролика автор шутит: «Who says the ViRGE can’t play games?» — «Кто сказал, что ViRGE не умеет в игры?»
Это не первый такой трюк от Bits und Bolts с S3 ViRGE DX: раньше он модифицировал VBIOS, чтобы отключить так называемый pedestal bit, из-за которого чёрный цвет на S3 рендерился как тёмно-серый.