bitborn ↗

bitborn — 生のビットからソフトウェアを作る

サイトで試す · 詳しい README · 言語

x86 プログラムの実際のバイトを、0 と 1 で直接書きます。Bitborn の命令は .bits ファイルに手書きされており、アセンブラやコンパイラがオペコード、 オペランド、分岐の変位を生成することはありません。コメント内の命令名はバイトの 説明です。Python ツールはバイトをまとめ、ファイルヘッダーやセクターの構造を 加えます。学習用サイトは JavaScript で動きます。

最初の命令を読む

10111000 00101010 00000000

オペランドサイズが 16 ビットの場合、この 3 バイトは MOV AX,42 を表します。 B8 がレジスターを選び、2A 00 が下位バイトから順に 42 を格納します。 実行モードが重要です。オペランドサイズが 32 ビットなら、B8 の後には即値の バイトが 2 個ではなく 4 個必要です。ブラウザーの CPU Lab が実行するのは、 文書に記載された 16 ビット命令の一部だけです。

試してみる

CPU Lab では、命令を 1 ステップずつ 実行し、レジスター、フラグ、スタック、メモリーを確認できます。Back と Forward で記録済みの状態を復元できます。ブートセクターの編集ツール では、512 バイトの完全なイメージを編集して書き出せます。チャレンジでは実際の バイトを変更しながら学びます。進捗はブラウザー内に保存されます。

実際のブートプログラムを作成・検証するには Python 3.10+、Make、QEMU が必要です。 macOS では brew install qemu、Ubuntu では sudo apt-get install python3 make qemu-system-x86 を実行します。

git clone https://github.com/OthmaneBlial/bitborn.git
cd bitborn
make test
make run

make test は確認済みのバイトと、画面を開かずに動かす QEMU 内での振る舞いを 検証します。make run は BIOS ブートイメージを起動します。BIOS の例は Apple Silicon 上でも QEMU で動作します。ネイティブ ELF の例には Linux x86-64 が必要です。 ブラウザーの開発用テストには Node.js と Playwright も必要です。貢献ガイドをご覧ください。

対象範囲と進捗

BIOS ブートプログラム、キーボード・VGA・ディスクの実験、対話型シェル、独立した プロテクトモードの割り込み実験、Linux ELF の例を収録しています。ブラウザーは 1 MiB のメモリーと 4,096 ステップに制限された学習用モデルであり、完全な CPU や BIOS ではありません。読み込んだプログラムを解釈し、ホストのネイティブコードとして 実行することはありません。実機、UEFI、本番用 OS の対応は確認されていません。 ネイティブ実験には使い捨てのエミュレーター環境を使用してください。

ロードマップと検証記録 · サイトの進捗 · 変更履歴

入門チュートリアルとアーキテクチャガイド から始められます。貢献ルールと行動規範 を守ってください。脆弱性は非公開で報告してください。 コードと文書は MIT ライセンスです。英語の紹介文を翻訳の基準とし、 詳しい技術ガイドは現在も英語で提供しています。