概要
x86CSS は、 CSSのみ で動作するx86エミュレータ。 JavaScript不要 で、C言語のプログラムを8086マシンコードにコンパイルし、CSS上で実行。 HTMLも最小限 (styleタグのみ)で動作可能。 独自のビルド手順や カスタムI/O をサポート。 趣味・教育・アート目的の 非実用的だが革新的なプロジェクト。
x86CSSとは
- CSSだけ でx86 CPU(8086互換)をエミュレートするプロジェクト
- JavaScriptを一切使用しない 設計
- 上記デモは GCCでCから8086マシン語に変換したコード をCSS上で実行
- GitHub でソースコード公開
- Chromium系ブラウザ で動作(Firefoxでは一部制限あり)
よくある質問
- CSSはプログラミング言語か?
- このプロジェクトを見れば、その可能性を再考する機会
- JavaScriptは本当に不要か?
- 完全CSSのみで実行可能
- clockの安定化・高速化目的でscriptタグを利用するが、無効化しても動作
- アニメーションとstyle container queriesでクロック生成
- ユーザーの操作不要でプログラムが実行
- HTMLも不要か?
- 実質CSSのみで完結
- 読み込みにstyleタグは必要(HTML最小限)
- FirefoxはHTMLなしでCSS読込可能だが、現状Chromium専用
- プリプロセッサは?
- 手書きCSS が基本
- 繰り返し部分のみPythonスクリプトで自動生成
- 実用性は?
- 実用性は低いが、 アート・実験・教育 用途
- パフォーマンス目的なら素直にCSSで書く方が良い
- 自作プログラムは動かせる?
- 8086アセンブリまたはCから自作プログラムを実行可能
- ビルド手順は後述
x86アーキテクチャ対応状況
- 主要な命令セット をサポート
- 必要な命令だけを都度実装
- 一部フラグ(CF/OF等)の未実装や挙動の違いあり
- 16bit(8086)ベース、現代x86(64bit)とは異なる
- 命令テーブル やサポート状況をドキュメント化
ビルド・実行方法
- 8086アセンブリ または C言語 でプログラム作成
- GCC-IA16 (16bit x86用GCC)を利用
- build_c.py でC→アセンブリ→バイナリ生成
- program.bin(バイナリ)、program.start(エントリーポイントアドレス)を作成
- build_css.py でCSSエミュレータに組み込み
- Linux/WSL1/2で動作確認済み(macOS未検証)
- メモリサイズ はデフォルト0x600バイト(変更可能)
- プログラムは アドレス0x100 からロード
カスタムI/Oインターフェース
- 0x2000: writeChar1(1バイト出力)
- 0x2002: writeChar4(4バイト出力)
- 0x2004: writeChar8(8バイト出力)
- 0x2006: readInput(1バイト入力)
- 0x2100: SHOW_KEYBOARD(キーボード表示制御)
サンプルCコード(抜粋)
- 画面への出力・入力受付の例を提供
- 数字・英字キーボードの切り替え制御
- 無限ループでユーザー入力を待機
- 入力値をエコーバック表示
クレジット・参考資料
- Jane Ori:CPU Hackの着想元
- Soo-Young Lee:8086命令リファレンス
- mlsite.net:8086オペコードマップ
- crtc-demos, tkchia:gcc-ia16関連
- polly:ARMやハードウェアの知識提供
- cohosters:CSS学習のきっかけ
動作環境
- 最新のChromium系ブラウザ 推奨
- 対応外ブラウザではデモが動作しない場合あり
まとめ
- CSSだけでx86エミュレータを実装 するという前例のない試み
- JavaScript不要・HTML最小限 でプログラム実行を可能に
- カスタムI/Oやビルド手順 も明確にドキュメント化
- 遊び・学習・アート のためのプロジェクト
- 技術的な限界を楽しむための 発想の転換例