Программа заняла всего 16 байт кода для x86 в реальном режиме DOS. Она одновременно рисует бесконечный фрактал Серпинского на экране и выводит его звук через PC Speaker. Всё работает на IBM-совместимых машинах с монохромным монитором.
Код стартует с вызова int 10h, который устанавливает текстовый режим 40×25. Затем регистр данных ds указывает на 0xB800 — начало видеопамяти VGA/CGA. После очистки экрана BIOS заполняет каждую ячейку (символ + атрибут) байтами 0x20 (пробел) и 0x07 (серый на чёрном). Эта равномерная разметка и становится «полотном».
Основная магия — в цикле. Команды lodsb, sub si, byte 57, xor [si], al и out 61h, al повторяются бесконечно. Каждый проход считывает байт из памяти, вычитает 57 из адреса, применяет xor к новому байту, а результат отправляет в порт 61h — именно он управляет динамиком.
Если отбросить детали и представить идеальный случай (с нулями и сложением вместо xor), то при шаге в 16 байт сегмент 65 536 байт проходит 4096 шагов. После каждого оборота регистр al сбрасывается к двойке. Благодаря биномиальным коэффициентам по модулю 256 формируется последовательность, в которой бит 1 даёт треугольник Серпинского. Именно xor превращает сложение в побитовую операцию — это не обычное сложение, а carry-free, что и рождает фрактал.
Порт 61h использует бит 1: единица выталкивает, ноль втягивает динамик. Так 1 и 0 из фрактала превращаются в квадратные волны с меняющейся частотой и скважностью. Звук получается само-подобным и почти не зависит от темпа.
Но шаг не 16, а -56 байт (sub si, 57 и lodsb дают смещение назад на 56). 56 не делит 65536 нацело, поэтому цикл проходит 8192 шага и заворачивает 7 раз. Частота звука падает на октаву. На экране из-за такого шага по видеопамяти (строка 80 байт) фрактал вырождается в 10 диагональных колонок символов, ползущих вверх. Треугольник сглаживается и становится почти невидим, но на огромном экране его можно разглядеть.
Сценер miragept запустил код на реальном 286 с EGA-картой в режиме MDA и монитором IBM 5151. Ему пришлось патчить адрес с 0xB800 на 0xB000. Он отметил, что из-за огромного послесвечения фосфора быстрая анимация выглядит размыто. HellMood ответил: приятно, что звук на реальном железе слегка отличается, а Sierpinski в конце стал даже заметнее, чем в эмуляторе.
Разные BIOS и эмуляторы оставляют разный мусор в памяти. Программа XOR-ит со всем, что там есть, поэтому звук сильно зависит от окружения. Очистить память заранее — слишком дорого по байтам. Это и есть часть очарования sizecoding.