
«Wake up! 16b»: 16 байтів x86-коду, що малюють фрактал і озвучують його
Демосценер HellMood опублікував докладний розбір інтро «wake up! 16b», представленого на демопарті Outline. 16-байтна програма для DOS малює в текстовій пам'яті нескінченний фрактал Серпінського, а ті самі байти змушують говорити динамік комп'ютера.
Демосценер HellMood опублікував докладний розбір інтро «wake up! 16b», представленого на демопарті Outline у нідерландському Оммені в травні 2026 року. Крихітна програма для DOS у реальному режимі малює в текстовій пам'яті нескінченний фрактал Серпінського, а ті самі байти змушують говорити динамік комп'ютера.
Шістнадцять байтів і підготовлене полотно
Уся програма — це кілька інструкцій: виклик BIOS, який встановлює відеорежим 0, сітку 40×25 символів; операція, що вказує сегмент даних на 0xb800, текстовий буфер CGA/VGA; далі цикл, який читає байт, зсуває індекс джерела на 56 байтів назад, додає цей байт до відеопам'яті через XOR і записує його в порт 61h — порт динаміка. Біт 1 цього значення висуває або втягує дифузор динаміка.
Полотно не порожнє. Коли BIOS очищає екран, він заповнює всі 2000 символьних клітинок значенням 0x20 (пробіл) і 0x07 (світло-сірий на чорному), тож код виконує XOR не щодо нулів, а щодо вже наявного однакового візерунка.
Серпінський із префіксних сум
Якщо звести код до чистої математики, цикл обчислює біноміальну послідовність, помножену на два: кожна клітинка стає накопичувальною сумою своїх попередників. Оскільки XOR — це додавання без перенесення, погляд на цю послідовність за модулем два дає трикутник Паскаля за модулем два, тобто килим Серпінського. Автор пов'язує таку поведінку з правилом 60 елементарних клітинних автоматів і з теоремою Лукаса, яка гарантує цю еквівалентність.
Чому це звучить саме так
Крок становить −56 байтів, а не −16, тому код торкається лише зсувів, кратних восьми: 8192 кроки, які сім разів обходять 64-кілобайтний сегмент. Це подвоює довжину циклу й удвічі знижує основну частоту — звук падає на октаву. Той самий зсув зрізає зображення по діагоналі: на 80-колонковому екрані рух на 56 байтів назад дорівнює руху на 24 вперед, тому записуються лише десять різних колонок, і фрактал виглядає як десять стовпів символів, що піднімаються екраном.
Не все, що потрапляє в динамік, походить від фрактала. У сегменті також лежить тіньовий код відео-BIOS, і саме XOR щодо того, що firmware залишила в пам'яті, надає інтро того шорсткого тембру, який відрізняється від машини до машини. HellMood зазначає, що результат дуже чутливий до версії емулятора та BIOS, а попереднє обнулення пам'яті дало б ідеальну однаковість — ціною байтів, яких у нього немає.
На справжньому залізі
Демосценер miragept записав інтро на техніці тієї епохи, змінивши адресу з 0xb800 на 0xb000, щоб воно виводилося на дисплеї MDA/Hercules: 286-й процесор із картою EGA та монітор IBM 5151. Раніша робота HellMood «M8trix» (2014) розсипала екраном псевдовипадкові літери у восьми байтах; цього разу, за його словами, звук з'явився першим.
SiTech — веброзробка з підтримкою AI
Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.