Skip to content

第10章 さらなるハードウェアプロジェクト

XboxはPCアーキテクチャをベースとしているため、ハードウェアプロジェクトを進める際にPC界の技術と知識をそのまま流用できる。その結果、PCのハードウェア、モニター、ケーブル、周辺機器が次々とXbox向けに転用されてきた。本章では、世界中のハッカーたちが発見・文書化・実装してきたハードウェアプロジェクトを紹介する。

LPCインターフェース

LPC(Low Pin Count)インターフェースのバージョン1.0は、1997年にIntelが策定した規格だ。LPCインターフェースはロイヤリティフリーのバスで、ISAやX-bus(メモリや汎用I/OデバイスのためのISA互換拡張バス)を明示的に搭載しないシステムを実現するために設計されている。

LPCインターフェースが必要とされた背景には、標準PCに搭載されている低ビットレート・多ピンのデバイスが互いに異なるインターフェースを持つという問題がある——フロッピーディスク、キーボード、マウス、シリアル、IrDA、パラレル、ISA、ブートROMなどがその例だ。これらのデバイスが消費する合計帯域幅は小さいが、接続するために必要な信号線の数は、PCIやAGPなど高帯域バスに必要な信号線数をはるかに超えてしまう。さらに悪いことに、すべてのPC構成でこれらのレガシーI/Oデバイスが必要なわけではなく、使われないピンや機能はそのままコストを押し上げる。チップパッケージのピン1本のコストは、同等の機能を持つシリコン面積のコストよりも割高だ。(目安として、パッケージのピン1本は1セント。一方、0.13 µm プロセスのシリコンでは約1万ゲート——小規模なプロセッサを実装できる規模——が同じく1セントのシリコン面積で実現できる。ただしこれはボンドパッド制約がない設計を前提とする。1

LPCインターフェースは、この問題に対してシンプルな解決策を提示する。ISAバスに必要な36ピンに対し、わずか7本の必須ピンで済む低ピン数の単一バスによって高速動作を実現するのだ。レガシーI/Oおよび拡張機能はすべてこの高帯域バスにマッピングされ、システム設計者はいわゆる「スーパーI/O」チップを作れるようになる。スーパーI/Oチップを使えば、サウスブリッジチップのピン数を大幅に削減できる。さらに、機能をスーパーI/OチップとサウスブリッジチップAに分離することで、設計者は用途に最適な組み合わせを自由に選択できる。

LPCの物理インターフェース自体はシンプルだ。4ビットの双方向バスが33 MHz のクロックで動作する。加えて、LPCバスサイクルの開始と終了を示すフレーミング信号と、すべてのLPC周辺デバイスを既知の状態にリセットする信号という2本の「サイドバンド」信号を持つ。さらにオプション信号として、DMA・割り込み機能や高度なI/OデバイスのPower Management機能を提供するものもある。(LPCバスとプロトコルの詳細については、IntelのLPC Interface Specification バージョン1.1を参照。仕様書はIntelの企業サイト http://www.intel.com/design/chipsets/industry/lpc.htm で入手できる。)

XboxのLPCインターフェース

XboxのマザーボードにはLPCインターフェースが搭載されている。ここではデバッグ・テスト用バスとして使われており、キーボードやマウスの接続、および診断目的のオルタネートブートROMの接続が可能だ。LPCインターフェースは、XboxのフラッシュROMが使用できない場合にオルタネートブートコードをロードするために起動する。フラッシュROMがない状態は、フラッシュROMデータバスの最下位ビット(D0)を強制的にゼロボルトにすることでシミュレートできる。

LPCインターフェースはXboxの生産ラインに不可欠だという見方が多い。完成品のXboxに対して、LPCインターフェース経由で包括的な自己テストプログラムを書き込めるからだ。CPUを高速なテストコントローラとして活用することで、高価なテスト装置を使わずに工場のラインで欠陥品を迅速かつ効率的に特定できる。

ハッカーにとって、LPCインターフェースが提供するオルタネートブートROM機能は、Xboxにコードを入れ込む理想的な手段だ。Xboxの暗号的に保護されたブート手順が完全に解明された今、LPCから読み込めるブートROMイメージは誰でも作成できる。実際、Xbox向けのオルタネートブートROMデバイスを販売しているいくつかのベンダーは、XboxマザーボードのLPCコネクタのピン配置が規則的であることを利用して、はんだを一切使わずに取り付けられるROMデバイスを開発した。

LPCインターフェースの活用

これらのデバイスは、Xboxのテスト工程でも使われているのと同様のスプリング内蔵接触プローブピン——ポゴピン——を使用している。押し当てるだけでLPCインターフェースに接続できるため、はんだ付けが一切不要だ。(XboxのLPCバスのピン配置については付録F「Xboxハードウェアリファレンス」を参照。)

LPCインターフェースが業界標準であることは、Xboxのハードウェアハッカーにとって非常に好都合だ。第一に、スーパーI/Oチップから内蔵LPCインターフェースを持つファームウェアROMまで、LPC互換インターフェースデバイスが豊富に存在する。第二に、LPCインターフェースが汎用PCの診断・利便性バスとして広く普及していることで、LPCインターフェースデバイスの使用・販売に伴う法的リスクが軽減される。LPCインターフェース用のファームウェアROMは、Xbox固有のコンテンツなしに販売できる——エンドユーザーが安価なPC用アダプターを使ってLPCデバイスを簡単に再プログラムできるからだ。また、XboxのLPCコネクタのピン配置がIntelの汎用PC向け推奨仕様とほぼ同一であることも、法的な観点でLPCファームウェアデバイスに追い風となっている。結果として、Xbox向けに販売されるLPCファームウェアデバイスは、標準PC向けのものとほとんど変わらない製品になる。

最初期のLPCブートROMデバイスのひとつを開発したのはAndy Greenだ。このプロジェクトは「Cheapmod」と呼ばれ、LPCインターフェースを内蔵した256 KB のフラッシュROMチップ「SST 49LF020」をLPC互換ヘッダに配線したソケットに搭載した構成だ。AndyのCheapmodウェブページ(http://warmcat.com/milksop/cheapmod.html)には「2.50ドルのSST 49LF020を入手できれば、4ドルで代替BIOSを作れる」と書かれている。このデバイスは彼が作った「CheapLPC」プログラマ(http://warmcat.com/milksop/cheapLPC.html)を使って書き込む。PCのパラレルポートを使ったシンプルな装置で、LPCデバイスとゆっくりながら確実に通信して再プログラムできる。市販されているオルタネートファームウェアデバイスの多くはAndyの設計を基に、または参考にして作られており、Xodus/Matrixもその一つだ。Xodus/MatrixはAndyのオリジナル設計の特に興味深い派生品で、完全なはんだ不要インストール手順を実現した最初のXboxオルタネートファームウェアデバイスだ。これにより、はんだ付けを敬遠するソフトウェア指向のハッカーにもXboxハッキングの扉が開かれた。(Xodus/Matrixの写真は図10-1を参照。)Xodus/Matrixデバイスにはコードが書き込まれていない状態で出荷され、オルタネートファームウェアイメージはユーザーが自分で用意する必要がある。

Xbox向けにLPCインターフェース付きフラッシュROMチップを選定する際には、いくつかの重要な機能上の考慮点がある。最も重要なのは、XboxのネイティブアーキテクチャがブートROMに16 MB のアドレス空間を割り当てているという点だ。物理的なブートROMのサイズが16 MB より小さい場合、その内容が16 MB 全体に複製(エイリアス)されて埋められる。この仕組みにより、Xbox設計者はROMチップのサイズを柔軟に選択でき、ボトム相対アドレスとトップ相対アドレスの両方を使うルーチンが問題なく動作する。

Figure 10-1: The solderless Xodus/Matrix alternate firmware device, showing the spring-loaded pogo-pin contacts図10-1: はんだ不要のXodus/Matrixオルタネートファームウェアデバイス。XboxマザーボードのLPCコネクタにはんだなしで接続できるスプリング内蔵のポゴピン接点が見える。

ボトム相対アドレスとトップ相対アドレスの概念を具体的な例で説明しよう。XboxのブートROM領域(16 MB)は 0xFF00.0000 から 0xFFFF.FFFF までのアドレス空間を占める。ボトム相対アドレスを使うプログラムは 0xFF00.0000 + オフセット(ベースアドレスにオフセットを加算)でアドレスを計算し、トップ相対アドレスを使うプログラムは 0xFFFF.FFFF – オフセット(最上位アドレスからオフセットを減算)で計算する。たとえば1 MB のブートROMを搭載した場合、プロセッサは16 MB 分のROMアドレス空間に同じ1 MB のROMが16コピー並んでいるように見える。具体的には、アドレス A + 0xFF00.0000 + n × 0x0010.0000(n = 0〜15、A = 0〜0x000F.FFFF)のどのアドレスを参照しても、ブートメモリの内容は同一だ。その結果、プログラマーはコードを変更せずに、小さい1 MB のブートROMにトップ相対・ボトム相対の両方でアクセスするデータを格納できる——ROMイメージの有効なコピーがトップ側・ボトム側どちらのベースアドレスからも見えるからだ。

📦 コラム:オルタネートファームウェアデバイスとモッドチップ

オルタネートファームウェアデバイスとは、ユーザーが指定したファームウェアをXboxハードウェア上で動作させるためのハードウェアモジュールだ。「モッドチップ」とは区別される——オルタネートファームウェアデバイスは空白の状態で提供され、著作権保護機構を回避する固有の機能を持たない。たとえば空白のLPCインターフェースROMデバイスはオルタネートファームウェアデバイスだ——米国権利章典を書き込むことだってできる。空白の状態で出荷されるユーザー設置型フラッシュROMもすべてオルタネートファームウェアデバイスと言える。

一方モッドチップとは、俗にゲームのバックアップを動作させたり、DRM(デジタル著作権管理)ポリシーを変更・除去したりするために作られたデバイスを指す。したがってモッドチップという用語には、DRMポリシーの変更を可能にするコードが書き込まれたブートROMデバイスだけでなく、ROMを持たずにXboxのファームウェアが実行のためにロードされる際にいくつかの重要な箇所を動的にパッチするデバイス(「パッチャー」と呼ばれる)も含まれる。

次に、Microsoftがコストを下げようとして1 MB のブートROMを256 KB に縮小したとしよう。プロセッサは今度は16 MB のROMアドレス空間に同じ256 KB のROMが64コピー並んでいるように見える。それでもボトム相対・トップ相対アドレスを使う古いコードはすべて正常に動作する。重要な点として、XboxのCPUはメモリ最上位から16バイト下のアドレス(「リセットベクタ」)から電源投入時にコードの実行を開始するようにハードワイヤードされている。一方、Xboxチップセットにワイヤードされたハードウェア初期化ルーチンは、16 MB のフラッシュROM空間の下部付近のROMアドレスを使う。その結果、XboxハードウェアはLPC ROMの実装として16 MB のサイズか、またはより小さいROMの内容をフラッシュROMアドレス空間全体にエイリアスするものが必要になる。(SST 49LF020はROMの内容をアドレス空間全体にエイリアスする数少ないLPCフラッシュROMのひとつだ。ただしこのエイリアス機能は実はバグとも言える——上位アドレスビットを無視してROM内容をアドレス空間全体にエイリアスすることで、本来他の機能に割り当てられるべきスペースを占有してしまうからだ。そのためSSTは「Aステップ」と呼ばれる改訂版「49LF020A」をリリースしており、こちらはROM内容をメモリ全体にエイリアスしない。したがってAステップのシリコンはXboxのオルタネートファームウェアデバイスとして機能しない。)

もう64MBのSDRAM

目の鋭い観察者なら、Xboxマザーボードのトップサイドにチップがない空きスペースが2か所あり、現在メモリチップが搭載されている場所とよく似た形をしていることに気づくだろう。基板を裏返すと、さらに2か所の空きチップフットプリントがある。これらはメモリチップ用のフットプリントだ。これらの空きスペースの場所を図10-2に示す。

Figure 10-2: The unpopulated memory footprints on the Xbox motherboard図10-2: Xboxマザーボードのメモリチップ未搭載フットプリント。

📦 コラム:フィデューシャルマーク(基準マーク)

Xboxマザーボードのメモリチップ未搭載スペースをよく見ると、暗い輪に囲まれた銀色のドットがある——これをフィデューシャルマーク(fiducial mark、基準マーク)と呼ぶ。フィデューシャルマークのパターンは、基板実装機械が多ピンの大型チップを正確に位置合わせするための基準点として使われる。基板実装機械が搭載するマシンビジョンシステムに認識されやすいよう設計されている。特殊な形状のフィデューシャルマークを使えば、基板の向きや種類を自動的に識別させることも可能だ。

次の疑問は当然こうなる——「Xboxマザーボードの空きスロットに適切なメモリチップをはんだ付けすれば、メモリを128MBに倍増できるのか?」答えはYesだ。ただし、チップセットが増設メモリを認識・使用できるようにするには、Xboxの初期化コードを変更する必要がある。さらに、増設メモリはグラフィックスやゲーム性能の向上には寄与しない——Xboxゲームは増設メモリを活用するよう設計されていないため、増設分は通常そのまま使われない状態になる。これらの空きメモリスポットは主にゲーム開発者向けの特別なコンソール製造のために用意されている。ゲーム開発者は増設メモリを使って、比較的タイトなXboxのメモリフットプリントへのゲーム移植を楽にしたり、ゲームイメージとは別にデバッグ、パフォーマンスモニタリング、テストユーティリティをメモリに常駐させたりできる。増設メモリはホームブリューソフトウェアにも活用できるが、メモリチップの入手と取り付けの難しさから、Xboxのメモリ増設は実用的な改造というよりも「はんだ付けの練習として面白い」程度の作業に留まる。

Xbox VGA

Xbox VGAアダプターが何をするものかについて、少し混乱がある。多くのXbox VGAアダプターは実際にはTV-to-VGAコンバーターで、XboxからのロードレゾリューションTV出力をラインダブラーに通して低品質のVGA表示を出力するだけだ。真のXbox VGAアダプターは、Xboxがより高解像度のビデオ出力を行うよう設定し、VGAモニター上でTV画質を超える表示を実現する。

VGAアダプターはAVIP(Audio Video I/O Port)コネクタの指定ピンを使ってXboxのグラフィックスモードを設定する。この方式の主な問題は、ゲームがこの高解像度モードをサポートするよう専用に作られている必要があることだ。そのため真のXbox VGAアダプターに対応していないゲームも存在するが、幸い通常のTVアダプターケーブルを差し込むだけでTV解像度に戻せる。

オリジナルのXbox-VGAアダプターを開発したのはKen Gasperだ。彼のウェブサイト http://xboxvga.xemulation.com でこのアダプターを販売しており、現在は「むき基板」形式と完全組み立て済み形式の両方を提供している。便利で回路組み立てスキルも磨けるXboxハードウェアハッキングプロジェクトを探しているなら、彼のむき基板を購入してアダプターを自分で組み立ててみる価値があるだろう。

Xbox AVIPのピン配線図は付録Fにある。

大容量ストレージの交換

XboxにはDVD-ROMドライブとハードドライブが搭載されており、どちらもPC標準のIDEインターフェースでXboxマザーボードと通信している。DVD-ROMドライブには独自の電源・DVDトレイ状態コネクタも付属する。Xboxで人気のある、また時に必要不可欠なハッキング作業のひとつが、これらのドライブの交換だ。

DVD-ROMを交換・調整しようとするユーザーが後を絶たないのは、XboxのネイティブDVD-ROMドライブがCD-RやほとんどのCD-RWメディアを読めないからだ。初めてXbox-Linuxをインストールしようとしているユーザーや、CD-Rコレクションの音楽をXboxのハードドライブにリッピングしようとしているユーザーにとって特に厄介だ。

Xbox DVD-ROMドライブを交換・調整する方法は多数ある。一部のXbox DVD-ROMドライブのモデルはレーザー強度を調整してCD-RやCD-RWメディアの読み取り能力を向上させられる。これはリスクを伴う操作で、レーザーの出力を誤って調整するとDVD-ROMドライブを永久に破壊する可能性があるが、正しく実行すればメディア互換性が向上したというハッカーの報告が多い。Xboxに搭載されるDVD-ROMドライブのスタイルやモデルは頻繁に変わるため、最新の情報と手順についてはウェブ検索を勧める。またXboxのDVD-ROMドライブを標準PC用DVD-ROMに丸ごと交換することも可能だ。ただしこの方法には二つの問題がある。第一に、通常のPC DVD-ROMドライブはXboxゲームディスクに施された物理的なセキュリティ対策のため、オリジナルのXboxゲームディスクを読み取れない。第二に、PC DVD-ROMドライブをXboxマザーボードの独自のDVD電源・トレイ状態コネクタに合わせる必要がある。

最もお手軽だが見た目の悪い方法は、標準PC DVD-ROMドライブを取り付けながら、もとのXbox DVD-ROMドライブを独自ケーブルに接続したまま残す方法だ。この方法では、グレーのIDEケーブルを標準PC DVD-ROMドライブ(ドライブ上のジャンパ設定でスレーブモードに設定)に接続し、ハードドライブの電源コネクタから標準の電源スプリッターケーブルを使って電力を分岐する。Xbox DVD-ROMドライブはそのまま置き、IDEコネクタは外し、独自の黄色い電源・トレイ状態ケーブルのみ接続した状態にする。このXbox DVD-ROMドライブの役割は、DVDドライブのトレイ状態をXboxに手動で伝えるダミードライブとして機能することだ。つまりメディア交換時に、ユーザーはXbox DVD-ROMのトレイを使って標準PC DVD-ROMのトレイ状態を手動で複製する必要がある。

この構成でXboxを操作する正確な手順は使用するPC DVD-ROMドライブのモデルやXboxのハードウェア構成の細かい違いによって異なるため、最新情報についてはウェブ検索を勧める。特定のPC DVD-ROMドライブをXboxの独自トレイ状態・電源コネクタに対応させる方法を解説したウェブサイトも存在する。このようなプロジェクトははんだ付けとドライバーに慣れたハッカーにとって適切な中級レベルの作業だ。標準DVD-ROMドライブに施す改造によって標準ドライブのDVDトレイ状態をXboxに正確に伝えられるようになる。ただし、DVD-ROMドライブのセキュリティチェックを回避する追加ハードウェアでXboxが改造されていない限り、オリジナルゲームはプレイできない。それでも、Xbox-Linuxのインストール問題の切り分けや、CDコレクションのリッピング、DVDの視聴には有用な手法だ。(なお、IDEコネクタをXbox DVD-ROMドライブに戻し接続すれば、元のゲーム機能が復元される。)

Xboxのハードドライブも時に交換が必要になる。Xboxのソフトウェアを本格的に開発しているなら、より大容量のハードドライブをXboxに搭載すると便利だし、ハードドライブが壊れたユーザーも交換を望む。残念ながら、OEM版のXboxハードドライブにはMicrosoftの著作権付きプログラムが含まれている。またXboxのハードドライブはファームウェアロックアウトによって保護されており、オリジナルのゲーム機能を維持したまま新しいハードドライブを取り付けることは、特に法的な問題もあって相当な難易度だ。ファームウェアロックアウトはハードドライブごとに固有なため、使用済みのXbox用ハードドライブとの交換もできない。ただし、Xbox-Linuxやその他のホームブリューソフトウェアを動かすことだけが目的でゲームにこだわらないなら、Xboxへの新しいハードドライブの取り付けは通常のPCへのハードドライブ取り付けと同様に簡単で、法的問題もない。

  1. チップ上の回路は通常、「ボンドパッド」と呼ばれる金属の正方形で囲まれ、そこからチップパッケージのピンに配線される。ボンドパッドの輪に必要な面積がチップ内部の回路に必要な面積を超える場合、そのチップは「ボンドパッド制約」を持つと言われる。ボンドパッド制約がある場合、余剰ピンのコストはさらに高くなる。
*原著*: *Hacking the Xbox: An Introduction to Reverse Engineering* © 2003 Xenatera LLC
*著者*: Andrew "bunnie" Huang | *出版*: No Starch Press
*日本語訳・レビュー*: ニコ技深圳コミュニティ / 高須正和(@tks) — [https://takasumasakazu.net](https://takasumasakazu.net) — CC BY-NC-SA 1.0
*注記*: 本翻訳は、原著の Creative Commons ライセンス条件に従って公開する翻訳コントリビューションであり、著者 bunnie からも歓迎のコメントをいただいています。出版社による公式日本語版ではありません。

ニコ技深圳コミュニティ / 高須正和(@tks)による日本語訳コントリビューションです。著者 bunnie からも歓迎のコメントをいただいています。原著は Andrew 'bunnie' Huang および No Starch Press に帰属します。