概要
- 80386マイクロコード 抽出と解析の過程を解説
- 8086との比較 や技術的な困難点の紹介
- マイクロコードの構造 や命令エントリ数の詳細
- 未公開バグ や隠し機能の可能性について言及
- リソース や学習方法、協力者への謝辞
80386マイクロコード抽出と解析の経緯
- Ken Shirriffから 80386マイクロコードROMの高解像度画像 の提供
- 8086のマイクロコード(10752ビット)に比べ、 80386は94720ビット の大容量
- 特許資料や既知の情報がない ため、解析の難易度が非常に高い状況
- Discord上でGloriousCowやSmartest Blobらと議論、 画像処理・ニューラルネットワーク・人力自動化 を駆使してバイナリ抽出に成功
- バイナリから μ-op(マイクロオペレーション)配列とビットフィールド の構造を特定
- 未使用μ-opブロックの存在やALU操作のサイクル数からフィールド分割を推測
- 命令終端パターンの発見
- Ken Shirriffの協力により ダイ上の配線や論理構造 も解析
80386マイクロコードの構造と特徴
- デコーディングROMから215個のエントリポイント
- 8086の60個と比較し大幅増加
- 新命令追加、オペランド種別(レジスタ/メモリ)、CPUモード(リアル/プロテクト)、REPプリフィックスの有無で分岐
- 各エントリポイントが複数命令やルーチンを共有
- 命令デコーダが単なるオペコード以外も参照
- 全命令がマイクロコードで実装
- 8086や現代CPUと異なり、80386は常にμ-opを実行
- 未使用または不明なルーチン
- 0x849~0x856のルーチンはエントリポイントなし、PAGE_FAULT処理と類似
- ICE(In-Circuit Emulator)ハードウェア対応のルーチンも存在
80386の高速化とアクセラレータ
- 多くの命令がハードウェアアクセラレータ によって処理高速化
- 乗算・除算回路、バレルシフタ、保護テストユニットとのインターフェース解析が重要
- 8086ではマイクロコードで実装されていたアルゴリズムが 80386ではハードウェアで処理
バグ・隠し機能・未公開仕様
- I/Oパーミッションビットマップのバグ の可能性
- 4バイトI/Oアクセス時、先頭3バイトのみ許可ビットをチェック
- 境界アクセスで不正にハードウェアレジスタへアクセス可能なケース
- 非常に稀なバグであり、バージョン依存や解析誤認の可能性もあり
- XBTS/IBTS命令の非サポート (デコーダ内のみ痕跡あり)
- 現時点で 明確な隠し命令やイースターエッグは未確認
マイクロコード解析の学習方法・リソース
- githubのx86 microcodeリポジトリ でダウンロード可能
- parts.txtでファイル構成を把握
- microcode_10.txtで分解済みマイクロコード本体を参照
- 解析の進め方
- μ-opのパターンやフィールド構造の理解
- 命令デコーダや保護テストPLAとの関連付け
謝辞・参考情報
- 協力者 :Daniel Balsom(gloriouscow)、Smartest Blob、nand2mario、Ken Shirriff
- 公開日 :2026年5月23日
- カテゴリ :computer、hardware
- フィード :RSS 2.0対応