16 байт кода: как демо для IBM PC превращает звук в «Матрицу»

Программист создал демо «wakeup» размером всего 16 байт для IBM PC, которое генерирует звук треугольника Серпинского и превращает его в падающие символы, как в фильме «Матрица». Это пример экстремального код-гольфинга, где каждый байт имеет значение.

16 байт кода: как демо для IBM PC превращает звук в «Матрицу»

Программист, выросший на IBM PC с зелёным монохромным монитором, вернулся к ретро-разработке и создал потрясающее интро «wakeup» размером всего 16 байт. Этот крошечный исполняемый файл для IBM PC генерирует звук треугольника Серпинского и одновременно отображает на экране псевдослучайные символы, напоминающие дождь из «Матрицы». Это не просто технический курьёз, а пример того, как глубокие математические структуры могут быть воплощены в минимальном объёме кода.

Разработчик, известный под псевдонимом Plex, ранее создал интро «Rainbow Surf» размером 16 байт, которое вдохновило автора на возвращение к старым наработкам. В течение пятнадцати лет он написал более сотни небольших интро, но именно «wakeup» стало результатом серии экспериментов с клеточными автоматами, графикой и звуком. В процессе работы он исследовал трюки sizecoding, такие как полиморфные ассемблерные команды и переходы в середины команд для экономии байт.

Как 16 байт создают звук и «Матрицу»

Секрет «wakeup» кроется в использовании треугольника Серпинского — фрактала, который генерируется простым рекурсивным правилом. Каждый такт времени новая строка треугольника воспроизводится через динамик и отрисовывается на экране с шагом 56. Из-за ограничений экрана (80 байт на строку) полная структура треугольника не видна, но создаётся эффект падающих символов, напоминающий «Матрицу». Автор отмечает, что если бы экран был больше или не пропускать пиксели, можно было бы увидеть сам треугольник.

Звук генерируется через PC-динамик, который управляется с помощью порта ввода-вывода. Каждая строка треугольника Серпинского преобразуется в последовательность битов, которые включают и выключают динамик, создавая характерный ритмичный звук. Этот звук синхронизирован с отрисовкой символов, что создаёт целостное мультисенсорное впечатление.

Предыстория и контекст

Sizecoding — это направление в демосцене, где программисты соревнуются в создании максимально маленьких программ, часто ограниченных несколькими десятками байт. Эта практика уходит корнями в эпоху 8-битных компьютеров, когда память была дефицитом. Сегодня sizecoding — это искусство, демонстрирующее глубокое понимание аппаратуры и алгоритмов.

Автор «wakeup» ранее создал интро «M8trix» в 2014 году, где по экрану бегали псевдослучайные буквы в 8 байт. Он всегда хотел добавить к ним звук, и «wakeup» стал ответом на этот вызов. Интересно, что звуковая часть была разработана первой, а графическая — позже, что необычно для подобных проектов.

Чем отличается от предыдущих версий?

В отличие от «M8trix», где были только символы, «wakeup» объединяет звук и графику в едином цикле. Ключевое отличие — использование треугольника Серпинского как основы для генерации и звука, и видео. Это позволяет синхронизировать аудио и визуальный ряд без дополнительного кода, что критично при ограничении в 16 байт.

Технические подробности: как работает код

Код «wakeup» написан на ассемблере для Intel 8088 и использует несколько хитростей для экономии байт. Одна из них — полиморфные команды, такие как add [bx+si], al, машинный код которой — 0x0000. Этот код может быть интерпретирован по-разному в зависимости от контекста, что позволяет многократно использовать одни и те же байты для разных целей.

Другая техника — переход в середины команд. Это означает, что программа может начать выполнение с середины инструкции, чтобы использовать её опкод как данные или другую команду. Это позволяет избежать дублирования кода и сократить размер до минимума.

Алгоритм генерации треугольника Серпинского основан на клеточном автомате, где каждая следующая строка вычисляется из предыдущей с помощью правила, которое можно реализовать всего несколькими инструкциями. Эти инструкции затем используются и для вывода на экран, и для управления динамиком.

Кого затронет и как

Для разработчиков, интересующихся ретро-программированием и sizecoding, «wakeup» — это источник вдохновения и практический пример экстремальной оптимизации. Он показывает, что даже в 16 байт можно уместить сложную логику, которая генерирует фракталы и звук.

Для сообщества демосцены это ещё одно подтверждение того, что ограничения не мешают творчеству, а наоборот, стимулируют изобретательность. Такие проекты привлекают внимание к старому железу и сохраняют культурное наследие ранних персональных компьютеров.

В России и СНГ существует активное сообщество ретро-энтузиастов, которые собирают и восстанавливают старые IBM PC. Для них подобные демо — способ оживить железо и показать, что оно способно на удивительные вещи.

Что будет дальше

Автор «wakeup» не планирует останавливаться. В его блоге упоминаются дальнейшие эксперименты с клеточными автоматами и звуком, а также возможность создания версии с ещё меньшим размером. Возможно, мы увидим новые интро, которые продолжат исследовать границы возможного.

В более широком контексте, sizecoding продолжает развиваться, и такие проекты, как «wakeup», демонстрируют, что даже в эпоху гигабайтов памяти и мощных процессоров есть место для минимализма и глубокого понимания вычислительной техники.

Итог

«wakeup» — это не просто демо в 16 байт, а произведение искусства, объединяющее математику, программирование и музыку. Оно доказывает, что ограничения могут стать источником креативности, и показывает, как глубокие концепции могут быть выражены в минимальном объёме кода. Для тех, кто интересуется ретро-технологиями или экстремальной оптимизацией, этот проект — обязательный к изучению.