概要
- 2026年のOutline Demopartyで発表された 16バイトのx86アセンブリ作品 「wakeup」の解説
- Sierpinski三角形 の生成とPCスピーカー出力を組み合わせた 極小デモ
- 映像と音声が同期 する独自の表現手法
- ハードウェア依存性 やバイト節約テクニックの詳細解説
- 小さなコードが生む奥深い数学的現象 の追求
16バイトx86アセンブリによるSierpinski三角形デモ「wakeup」
- 2026年5月、 オランダ・Ommenで開催されたOutline Demoparty で発表
- 16バイトのx86リアルモードDOSアセンブリ によるデモ作品
- Sierpinski三角形 を生成し、同時に PCスピーカー で音を鳴らす構成
- 開発者は IBM PC(モノクロ緑モニタ) で幼少期にプログラミングを学んだ経験を持つ
- 過去15年間で 100本以上のTiny Intro を制作した作者による最新作
コード構造とバイト節約テクニック
- int 10h でビデオモード0(40x25テキストモード)へ設定
- mov bh, 0xb8 / mov ds, bx でテキストバッファ(0xb800)をデータセグメントへ
- lodsb / sub si, 57 / xor [si], al / out 61h, al / jmp短距離L という極小ループ
- ポリモーフィック命令 や 命令途中ジャンプ でバイト節約
- cellular automaton や 加算/排他的論理和(XOR) によるパターン生成
メモリ初期化とビデオバッファ
- BIOSの画面クリア 時、テキストバッファは0x20(スペース)と0x07(色属性)で埋まる
- 表示上は空白だが、メモリには 一定パターン が存在
- バッファの初期状態 や ROM BIOSコードの影響 がサウンドにも現れる
数学的原理とSierpinski三角形
- 加算(add)による部分和の蓄積 と XORによるビットプレーン分離
- Lucasの定理 により、Sierpinski三角形(セルオートマトンrule 60)が自然発生
- ALレジスタのビット1 だけを利用し、 スピーカー出力 に変換
- バイト単位の正方波 として自己相似的なサウンドを生成
ステップ幅と画面・音声への影響
- sub si, 57 / lodsb で -56バイトずつ逆方向に移動
- 80バイト幅のテキスト画面で 10列のみを斜めに描画
- 8192ステップ で7回ラップし、音声は 1オクターブ低下
- 映像と音声が同期 し、自己相似的な動きを演出
実機・エミュレータでの動作
- 実機(286+EGA+MDAモニタ) での動作報告
- BIOSやRAMの状態に依存 し、環境ごとに微妙な違いが発生
- メモリ初期化を省略 し、ハードウェアの「自然な状態」を活用
- サイズコーディング ならではの 偶発的なアート性
参考リンク・リソース
- Nanogems - デモシーンのTiny Intro特集
- HellMood's Pouet Productions - 作者の作品集
- mirageptによる286/MDA/Hercules実機キャプチャ
- Sizecoding Wiki - 小型コード技法の情報集積
- Rainbow Surf(Plex作・16バイトx86)
- M8trix(HellMood作・8バイト)
総括
- 16バイトという極限の制約 で、映像と音声、数学的美を融合
- ハードウェアや初期状態への依存性 も含め、唯一無二の表現を実現
- Tiny Intro の可能性と奥深さを体現するデモ作品