В эпоху, когда современные компьютеры имеют гигабайты памяти и терабайты вычислительной мощности, было бы сложно себе представить, что целая демонстрация, или демо, может быть умещена всего в 256 байт. Тем не менее, именно такой вызов принял на себя один из самых талантливых программистов и демосценеров — Linus Akesson, создавший удивительный 256-байтный демо под названием A Mind Is Born на легендарной платформе Commodore 64. Commodore 64 — это компьютер 80-х годов с весьма скромными ресурсами, всего 64 килобайта памяти и процессором MOS 6510 с тактовой частотой около 1 мегагерца. Создавать программы в таких условиях было настоящим искусством, а делать сложные визуальные и звуковые демонстрации — высшая категория мастерства. A Mind Is Born не только стала победителем в конкурсе Oldskool 4K Intro на фестивале Revision в 2017 году, но и завоевала огромное уважение в сообществе демосцены за свое техническое изящество и глубину.
Главным двигателем демо является музыкальный трек, состоящий из 64 тактов в размере 4/4, воспроизводимый с темпом 112.5 ударов в минуту с помощью таймера прерываний на частоте 60 Гц. Воспроизведение музыки происходит в прерывании, а основная программа отвечает за генерацию визуального ряда. Звуковая составляющая использует все три голоса звукового процессора SID — натураленый для C64 уникальный чип, дающий заявку на музыкальное чудо. Первый голос отвечает за бас-бочку и бас, второй — за мелодию, а третий — за воздух (дроном), который гаснет на каждом ударе, имитируя эффект сайдчейн компрессии, широко применяемую в электронной музыке.
Мелодия создается с помощью линейного сдвигового регистра с обратной связью (LFSR), который по сути генерирует псевдослучайные последовательности, но с точной настройкой параметров и частотной таблицы, что позволяет получить музыкальный результат, приятный для слуха и подходящий атмосфере демо. Начальная посылка LFSR составляет ноль, поэтому первые восемь тактов в начале песни мелодия не звучит, что создает эффект ожидания и загадочности. Структура музыкального трека разбита по тактам и различным частям композиции, где меняются звуковые волны, эффекты и визуальные настройки. Например, в начальных тактах голос мелодии молчит, позже появляется стутерящий (заикающийся) мотив на треугольной волне, после чего присоединяется пила (sawtooth) и другие сложные волновые формы, такие как хард-синхронизация и смешанные волны. Последний такт гасит барабаны и бас, затем музыка снова постепенно набирает яркость и динамику, отображая изменения на экране.
Визуальная часть демо — это своеобразная клеточная автоматика, которая смешивает горизонтальные и вертикальные соседние значения видеопамяти с элементами случайности. Такой подход позволяет создавать непредсказуемые, но устойчивые узоры, которые эволюционируют на экране. Для генерации случайной составляющей используется таймер CIA, предоставляющий псевдослучайные значения, а наложение звукового параметра дрона добавляет эффект мерцания и глубины. Основной видеорежим — Extended Character Mode (ECM), позволяющий использовать два старших бита символа для изменения цвета фона, что значительно расширяет палитру визуальных эффектов при минимальном использовании памяти. Код демо — образчик чрезвычайной оптимизации и креативности.
Дело начинается с маленькой BASIC-программы, которая запускает ассемблерный код в области нулевой страницы памяти, тем самым обеспечивая быстрый доступ и экономию байтов. Инициализация очищает экран, загружает программу в нулевую страницу и перенастраивает вектор прерываний таймера, чтобы перехватить управление и выполнять музыку и визуализацию по таймеру. Сам прерыватель состоит из множества хитро скроенных инструкций, которые поддерживают глобальные счетчики времени, управляют звуковыми регистами SID и визуально-модельной видеопамятью. Важная техника — это модификация инструкции по ходу работы программ по специфическому скрипту, что позволяет менять поведение визуальной части без добавления лишних байтов. Такой трюк отлично экономит место и добавляет «живости» картинкам.
Аудио составляющая зачастую требует сложных синхронизаций и вычислений, но в A Mind Is Born басовые ноты и барабанные удары генерируются с использованием табличных значений и проверок позиций в такте, что позволяет получить вполне музыкальный и узнаваемый ритм со звуками, характерными для жанра электронной музыки тех времен. Особенное внимание уделяется тому, чтобы бас и барабаны не конфликтовали, а мелодия могла свободно развиваться, особенно когда происходит смена «финальных» эффектов с использованием высокопроходного фильтра. Визуальные эффекты представляют собой результат взаимодействия между генерацией псевдослучайных значений, наложением динамической палитры цветов и использованием особенностей графического режима Commodore 64. Наборы символов для вывода символов состоит из варьирующихся очертаний с наложениями яркости, создавая впечатление живого движения. Графика формируется непосредственно в видеопамяти, расположенной по адресу 0x0C00, что соответствует экранному буферу.
Финальная часть демонстрации совершает «отключение» — экран гаснет, звук замирает, происходит переход к системному сбросу. Именно благодаря грамотной организации прерываний и обходу стандартного вектора возврата демонстрация плавно завершается и оставляет систему в стабильном состоянии, позволяя вернуться к рабочему экрану Commodore 64 после завершения. A Mind Is Born — это не просто техническое достижение, но и искусство минимализма и глубокой оптимизации. В 256 байтах умещается полноценная музыкальная композиция с динамичным звуком и визуальным рядом, который нельзя назвать простым или примитивным. Были проделаны кропотливые исследования и многочисленные эксперименты с LFSR, таблицами частот, режимами видео и настройками SID, что делает демо живым, интригующим и впечатляющим.
Этот проект также отражает дух и философию демосцены: творить что-то уникальное, преодолевая технические ограничения и используя креативный подход к минимальному ресурсу. Для современных программистов и энтузиастов A Mind Is Born служит вдохновляющим примером того, как можно создавать яркие произведения на платформе, давно ушедшей в историю, но оставшейся родной для тысяч поклонников ретрокомпьютеров. Обратная сторона успеха — сложность понимания и анализа кода. Для того чтобы в полной мере оценить труды Linus Akesson, необходимо иметь представление о работе процессора MOS 6510, звукового чипа SID, особенностях графики VIC-II, а также уметь читать ассемблерный код. Несмотря на такие сложности, автор приводит подробное объяснение, раскрывая все секреты программы и делясь знаниями с сообществом.