目覚めろ!16 ビット

2026/05/24 9:30

目覚めろ!16 ビット

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

2026年5月、オムメン(NL)で開催された Outline Demoparty でリリースされたこのアルゴリズム芸術プログラムは、リアルモード DOS アセンブリと厳格な 16 バイトのメモリ制限を統合し、シエルピンスキ fractal(シエルピンスキ集合)および「マトリックスレイン」効果を生成します。Plex の「Rainbow Surf」に触発され、HellMood は、モノクロームグリーンモニタ搭載の古い IBM PC で 15 年間tiny intro を制作してきた自身の歴史を振り返り、極限的なコードゴルフ密度を探求することを目的としています。技術的に、システムは BIOS 中断

int 10h
を介して初期化され、ビデオモード 0 を設定し画面をクリアします。エンジンでは、ビデオメモリセグメント(
0xb800
)全体で加法前和を実行し、modulo 2 の法則を利用する XOR 演算を用いて fractal を描画します(セルーラ自動機械 Rule 60)。この特定の計算では、ロードの各回にインデックスから 57 を引くことで、実効的なステップを -56 バイトにし、無限の fractal を 10 の可視ピラーへとせん断し、標準的なステップと比較して基底周波数を半分にします。音響はポート
0x61h
を介して生成され、正方形波はこれらの幾何学的計算から直接導出されます。本プロジェクトは、ハードウェアのアティファクトを重要な特徴として強調します:実在のヴィンテージマシン(例:IBM 286/MDA)は ROM に独自の BIOS コードを保持し、視覚および音響に「パンキー」で粗粒なサウンドを加える一方、エミュレータはそれぞれの BIOS バージョンと RAM ステートに基づいて異なる出力を生み出します。

本文

16 バイトで実現!シエルピンスキフラクタルとサウンドの融合(x86 アセンブリ)

2026 年 5 月の「Outline Demoparty」にて、オランダ出身のデベロッパーHellMoodが発表しました。 この作品は、わずか 16 バイト の x86 アセンブリコードで実現した、アルゴリズム的密度への挑戦です。

プロジェクトの背景と着想

  • 著者は 30 年以上前、IB MPc でプログラミングを学び始め、以来「システム向けのプログラム」作りに憧れていました。
  • 15 年間で100 個以上のミニチュアイントロを作成し、「Rainbow Surf」(Plex 作・16 バイト)に触発されて再挑戦しました。
  • グラフィックやサウンドの作成を試行錯誤する中で、サイズコーディングのトリック(命令の再利用や多義的な命令の活用)を見出しました。
  • 今回の作品は数多くの実験の中で、その「」だけで際立っており、解説内容の深さに著者自身も驚いています。

2014 年の前作「M8trix」では偽ランダムな文字を表示(当初 8 バイト→7 バイト)しましたが、「どうすれば音が良くなるか」は常に疑問事項でした。 今回は、**「シエルピンスキ三角形の音をマトリクスレインに変換する」**というコンセプトで再構築しました。

コードと動作概要

以下のコードを実行すると、ビデオメモリを計算領域として使い、無限にシエルピンスキフラクタルを描画し、同時にスピーカーから音を出します。

int 10h          ; ビデオモード 0 セット (2 バイト)
mov bh, 0xb8     ; データセグメントを 0xB800 に (2 バイト)
mov ds, bx       ; DS レジスタ設定 (2 バイト)
L:
lodsb            ; メモリから AL レジスタに読み込み (1 バイト)
sub si, byte 57  ; シーンスポットを -56 バイト移動 (3 バイト)
xor [si], al     ; XOR 演算でフラクタル計算 (2 バイト)
out 61h, al      ; スピーカー出力 (2 バイト)
jmp short L      ; ループ (2 バイト)

動作原理の要約:

  • 時間ステップごと: 新しいシエルピンスキ三角形の一行が生成されます。
    • a) スピーカーで音として再生される。
    • b) ステップサイズ 56 で画面に描画される。
  • 視覚的制約: 解像度が「8192 ピクセル幅」に対し、文字行はわずか**80 バイト(約 80 ピクセル)**しかないため、細部は見えにくいです。
    • もし画面が巨大化すれば、あるいはピクセルをスキップせずに全て描画すれば、全体像が見えます。

技術的解説:5 つのステップ

1. キャンバス:準備された空虚

コードは標準的な BIOS 割り込み

int 10h
から起動します。

  • ビデオモード設定: モード 0 が設定され、40×25 のテキストグリッドが用意されます。
  • メモリ初期状態: データセグメント (
    ds
    ) は
    0xB800
    (VGA/CGA テキストバッファ) を指します。
    • BIOS クリア時にメモリは 0 にリセットされるのではなく、すべての文字位置が「空白」として扱われます。
    • 実際には 2,000 スロット
      0x20
      (スペース) と
      0x07
      (黒背景のライトグレー) で満たされています。
  • 「空白」の見せ方: メモリには一様なパターンが埋め尽くされており、ここが計算の「種」になります。

著者のコメント:過去のノイズ系イントロとは異なり、この作品の画面クリア時のメモリアイニシャライゼーションや境界条件による「スパイス」という微妙な差異が、理解できていないだけに魅力的です。

2. エンジン:加法型前側和(Additive Prefix Sums)

数学的な核心は「加法型前側和」です。RNG を使わずにカオスな動きを生成しています。

  • 数式的モデル:
    • ASCII
      0x20
      の代わりにゼロ初期状態とする。
    • XOR
      の代わりに加算を使用する。
    • ステップサイズを 16 バイトに進める。
    • 累加器
      al
      を初期値 2 から開始する。
  • サイクル特性:
    • DOS セグメントは 65,536 バイト。各ステップ 16 バイト進むため、4,096 ステップで巡回します。
    • 65536 / 16 = 4096
      であり、256 の倍数であるため、進位が同期し、各スウィープ開始時点で
      al
      を 2 にリセットできます。
  • 生成される数列: この値は二項係数列に追随し、2 倍スケールされます。 $$A^{(p)}[k] \equiv 2 \binom{k+p}{p-1} \pmod{256}$$

3. 結晶化:XOR とシエルピンスキのシフト

純粋な加算からビット演算(XOR)への変換がフラクタル構造を生み出します。

  • 原理: 「進位なしの加算が XOR である」という事実を利用。
    • コードでは
      add
      の代わりに
      xor
      が採用されています。
  • 初期値との関係:
    • 初期値は 2 (バイナリ:
      00000010
      ) です。
    • ビット 1 のみが
      0x00
      0x02
      で切り替わります。
  • オートマトンルール 60: これは初等的細胞状オートマトンのルール 60 に完全にマッピングされます。 $$Cell^{(p)}[k] = Cell^{(p-1)}[k] \oplus Cell^{(p)}[k-1]$$
  • ルカスの定理: この加算表におけるビット 1 の挙動を保証します。「2」はビット 1 がセットされていることを意味するため、シエルピンスキ三角形が生成されます。

4. マシンの声:データを音へと変換

フラクタルの計算結果を直接スピーカーポートへ出力し、音源として使います。

  • 出力メカニズム:
    out 61h, al
    がトリックです。
    • ポート
      61h
      は PC スピーカーとインターフェースします。
    • ビット 1 を高レベルにするとスピーカーのコーンが外側に押し出され(1)、低レベルにすると引き込まれます(0)。
  • 生成される音:
    • フラクタルから得られる
      1
      0
      が正方形波を作り出します。
    • 行単位で再生されると、**自己相似的でテンポ不変な近似音節ビート(Bytebeat)**が生成されます。
  • 音質の特徴:
    • テキスト領域だけでなく、残りの 64 キロバイトのセグメントも出力されます。
    • そこに含まれるシャドウ付けされたビデオ ROM BIOS コードが、「パンキーで荒々しい音質」の秘訣です。
    • これにより、単純な矩形波音節ビートとは異なる特徴的なサウンドになります。

5. ステップサイズ 56:オクターブシフトと対角スアー

視覚効果と音響効果を両立させるための高度な幾何学的操作です。

  • 移動ロジック:
    • sub si, byte 57
      lodsb
      の組み合わせにより、実質的に -56 バイト(逆方向)移動させます。
  • 音響面での効果:
    • 56 は 65,536 を綺麗に割らないため、オフセットが 8 の倍数となる位置のみをアクセスします。
    • サイクル長が 2 倍になり、基本周波数が半分になります → 音が 1 オクターブ低下します。
  • 視覚面での効果:
    • 80 バイト幅の画面において -56 バイト逆向き移動することは、実質的に +24 バイト(12 コラム)前方移動と同等です。
    • アクセされるのはたった 10 の異なるコラムのみになります。
    • フラクタルは固体画像ではなく、対角方向にスアーしながら画面全体を 10 の文字ピラーへ分割して上昇していきます。

ハードウェア検証と感想

実機動作の確認(scener miragept)

キャプチャ映像では以下の調整が行われました。

  • 色変更: 緑色の文字は MDA/Hercules に自然にフィットするため、アドレスを
    0xB800
    から MDA が使用する
    0xB000
    にパッチしました。
  • 機材: EGA カード搭載の 286 と、実物の MDA モニター(IBM 5151)を使用。
  • 音質: マシンの特性による定常ノイズが含まれますが、フォスフォア持続時間の大きいモニターでは高速な動きに不具合が生じる場合があります。

著者のリプライ

「想定通りに動作し、バイト値のわずかな違いによって音が多少変わっていても満足しています。驚いたのは、シエルピンスキ構造が(作品後半特に)私のバージョンよりも実際に見やすくなった点です。」

エビデンス感について

  • エミュレーターや異なる BIOS バージョンは RAM にわずかに異なるアファクタを残します。
  • コードは既存の内容に対して
    XOR
    するため、出力は環境に極めて敏感です。
  • メモリを最初にクリアすれば完璧な一様な出力が得られますが、そのためのバイト数は貴重なリソースです。
  • 「サイズコーディング」の醍醐味: ハードウェアの自然な状態を受け入れることにあります。

関連リンクとリソース

  • Nanogems – デモシーンからの厳選されたミニチュアイントロ集
  • HellMood の Pouet 作品一覧
  • miragept による 286/MDA/Hercules でのキャプチャ
  • Sizecoding Wiki
  • "Rainbow Surf" – Plex による 16 バイト x86
  • "M8trix" – HellMood による 8 バイト

※本テキストは手書きから抽出されました。

同じ日のほかのニュース

一覧に戻る →

2026/05/25 3:56

オーストラリアの週 4 日制研究データで生産性が向上したと示唆されました

## 日本語訳: *Nature* の『Humanities and Social Sciences Communications』に発表された新研究によると、4 日勤務週間の試行を継続しているオーストラリア企業のうち 15 社のうち 14 社が「100:80:100 モデル」(完全な給与、80% の労働時間、全出力)を採用していたことが示されています。デイキン大学のジョン・ホプキンス教授を筆頭に、2023 年初頭から 2024 年秋にかけて行われたインタビューでは、不動産管理、出版、ヘルスケア技術、法律、ソフトウェア開発など幅広い業界を対象としました。どの企業でも生産性は低下しておらず、6 つの企業で向上し、9 つの企業が出力を維持していました。1 社は大きな内部変化により試行から退出し、もう 1 つはすでに 8 年間のパイロットプログラムを実施済みでした。バーンアウトが主な要因となったのは 6 社で、これらは単なる収益だけでなく、離職率、欠勤日、病休日、メンタルヘルス休暇をモニタリングしました。これは、2025 年の『Beyond Blue』調査でも示されているように、オーストラリアの労働者の半数がバーンアウトを経験しており、特に若年層と親御さんにおいて顕著であることと整合しています。国際的には、200 社以上の英国企業と 45 社のドイツ企業(主に中小企業)が給与カットなしでこのモデルを採用しています。導入方法は業界のリズムや業種によって異なります:顧客接点を持つ組織は休暇日を分散させる傾向があり一方、医療、緊急サービス、物流、ホスピタリティなどの分野は構造的なスケジュール調整の課題に直面します。企業は不要な会議を削減し、タスクを自動化し、低価値な仕事を排除することでワークフローを合理化しています。批判者は、一部の短期的な利益が新奇効果によるものかもしれないと注意喚起しています。今後を見据え、AI は反復的なタスクを自動化して労働者が時間を取り戻すよう助け、単に日常の業務量を増やすのではなく、将来の成功はウェルビーイングと離職防止を追跡することによって実現されると考えられています。全体としての変化は、効率性と並んで人間のウェルビーイングを最優先とする持続可能なパターンの方向へと向かっています。

2026/05/21 9:15

LAN-LOK:南极向け DOS サボタージュゲーム「34 年間も消失した」作

## Japanese Translation: AlphaPixel は、Mark Chappell および Shane Maloney という研究者により Palmer Station で作成された稀な 1991 年の南极観測ステーション用コンピューターゲーム「LAN-LOK」を成功裏に蘇らせた。本プロジェクトは、同ステーションで初めてのピアツーピア LAN(PalmerLAN/GrapeVine)の設置後に開発が行われた「Evil Al サボタージレース」というタイトルであり、30 年以上も知られていなかったところ、創業者である Chris Hanson が 2025 年に未開封のコピーを発見した。Hanson はその後にゲームの対抗役(悪の AI「Evil Al」)の実在のモデルとなった人物である Al Oxton(「ajo」氏)と連絡を取り、メールを通じて作成の詳細を確認させた。 このプロジェクトは、この廃棄された 16 ビットプログラムを現代的な遊べば良い体験へと変え、現在 Archive.org でアクセスでき、AlphaPixel 経由でダウンロード可能となっている。 gameplay は、プレイヤーがディレクトリを削除したりディスクをフォーマットしたりするなどのサボタージュ行為を行い、AI が制御する「Evil Al」と対戦しながら、特定のターゲット(例:重要な"Hobbs"ノード)への攻撃と勝利に必要なスコア要件を満たすことを目指す 5 分のレースである。長期的な存続性を確保するため、AlphaPixel は Ghidra や Reko といったリバースエンジニアリングツールを用いてレガシーコードのデコンパイルを行い、16 ビットシステムと 64 ビットシステム間の互換性問題を解決するとともに、SDL フレームワークを使用してグラフィックおよび入力処理を更新している。また AI ツールの活用も行う可能性がある。この取り組みは単に南极からユニークなデジタルアーティファクトを救い出しただけでなく、AlphaPixel の広範なレガシーデータの復元に関する専門性を示しており、8 ビットデバイスから現代の RISC-V プロセッサに至るまでのさまざまなアーキテクチャにおいて、エミュレーションされたゲームからフォレンジック動画の回復まで幅広く対応できることを証明している。

2026/05/25 3:39

Jujutsu で Git Rigour Fatigue を克服する

## Japanese Translation: 著者は、コードレビューを「種類別(例:赤で変更内容、青で UI)」に分類し、履歴を確定させる前に視覚的なワークフローを採用するためのステブのジュジュツチュートリアルへの相談を推奨しています。このアプローチは、デバッグによる修正とリファクタリングを単一のブランチ内で混在させるという一般的な誤り(コミットが以前の作業を上書きすることで頻発するコンフリクト)を回避します。標準ツールである `jj absorb`(ファイルの所有者との相性が悪いため課題が多い)や厳格なシーケンシング手法とは異なり、この手法では中間ステップごとにコンパイルしなくてもよい、当初はごちゃまぜの「全コミット」を受け入れることで一時的なデバッグ状態を許容します。ターゲット対象となるクイッシュコマンドを最終段階に留め、特定の変更カテゴリを色分けされた独自のコミットに分離することにより、Git のシーケンシングや複雑な分割の堅牢性を伴わずとも清潔で視覚的な履歴を実現できます。この戦略は、開発中の各個々のコミットがコンパイル可能であるという保証を犠牲にしますが、厳格なステップバイステップのコンパイル要件よりも、明確な視覚的なソートと管理可能なレビュー単位を重視するチームにとって、軽量で柔軟な代替手段を提供します。

目覚めろ!16 ビット | そっか~ニュース