Skip to content

Instantly share code, notes, and snippets.

@7shi
Last active April 10, 2026 05:17
Show Gist options
  • Select an option

  • Save 7shi/b590a3263f4c013dbe9aae3090fdd8c3 to your computer and use it in GitHub Desktop.

Select an option

Save 7shi/b590a3263f4c013dbe9aae3090fdd8c3 to your computer and use it in GitHub Desktop.
Wii移植記事の日本語要約

Mac OS X 10.0 (Cheetah) を任天堂 Wii に移植する

Bryan Keller 氏による、2026年4月のプロジェクト報告のまとめ。2021年に「可能性はゼロ」と断言された Mac OS X の Wii への移植を、低レイヤーのエンジニアリングによって実現した。

1. 実現可能性の調査

移植にあたって、まずハードウェアとソフトウェアの両面から実現可能性を調査した。

  • CPU: Wii の PowerPC 750CL は G3 Mac で採用されていた 750CXe の進化形であり、命令セットレベルで互換性がある。
  • RAM: Wii のメモリは計 88MB (24MB MEM1 + 64MB MEM2) と特殊だが、Mac OS X Cheetah は公式要件 (128MB) 未満の 64MB でも QEMU 上で動作することが確認された。
  • ソフトウェア: Mac OS X の基盤である Darwin (XNU カーネルおよび IOKit ドライバモデル) はオープンソースであり、これらを Wii 向けに調整できれば、クローズドソースの上位レイヤー (Quartz, Finder 等) も動作する可能性が高い。

2. 移植アプローチ:カスタムブートローダーの作成

実機の Mac が使用する Open Firmware や BootX を移植するのではなく、最小限のセットアップを行うカスタムブートローダーをスクラッチで作成する戦略をとった。

  • 役割: ハードウェアの初期化、SD カードからの Mach-O 形式カーネルの読み込み、デバイスツリーの構築、カーネルへの制御移譲。
  • デバッグ: 最初期は画面出力やシリアルデバッグが使えないため、Wii の前面パネル LED を点滅させるバイナリパッチをカーネルに適用して進捗を確認した。

3. カーネルのパッチとデバイスツリー

カーネルが起動した後の互換性問題を解決するため、XNU のソースコードに修正を加えた。

  • メモリレイアウト: Wii 特有のメモリ配置 (0x00... および 0x10...) に対応させるため、カーネルの BAT (Block Address Translation) 設定を修正した。
  • デバイスツリー: Wii Linux プロジェクトを参考に、Wii のハードウェア構成を示すデバイスツリーを構築し、ブート引数としてカーネルに渡した。
  • 開発環境: QEMU 上で動作する Cheetah ゲストから NFS 経由でホスト上のソースをビルドする環境を構築した。

4. IOKit ドライバの開発

Mac OS X のドライバモデルである IOKit を用い、Wii 固有のハードウェアに対応するドライバを実装した。

  • Hollywood ドライバ: Wii の SoC である Hollywood を管理するドライバ。その配下に SD カードなどの各デバイス用の「nub (アタッチポイント)」を作成する。
  • SD カードドライバ: Wii の Starlet コプロセッサ上で動作する MINI OS と IPC 通信を行うことで、SD カードの読み書きを実現した。PowerPC と ARM (MINI) 間のキャッシュコヒーレンシ問題を解決する必要があった。
  • フレームバッファドライバ:
    • Wii のビデオエンコーダは YUV 形式を期待するが、Mac OS X は RGB 形式を期待する。
    • この不一致を解消するため、RGB 用と YUV 用の 2 つのフレームバッファを持ち、毎秒 60 回ソフトウェアで変換を行う「デュアルフレームバッファ」方式を採用した。

5. USB サポートへの挑戦

キーボードとマウスによる操作を可能にするため、USB (OHCI) ドライバの移植に取り組んだ。

  • ソースコードの不在: Cheetah 時代の IOUSBFamily ソースは Apple から公開されておらず、当初はバイナリパッチや Jaguar (10.2) 以降のソースでの解析を試みたが難航した。
  • コミュニティの助け: IRC を通じて Cheetah 用のソースコードを入手することに成功し、Wii の「ハードウェアによるエンディアン・スワップ」という特殊な仕様に合わせてドライバを修正・ビルドした。

6. システムの洗練

  • ブートメニュー: Apple Partition Map (APM) を解析し、SD カード内の複数のパーティション (インストーラ用、システム用など) を選択して起動できるようにした。
  • ドライバ注入: ブートローダーがカーネル拡張 (kext) をメモリ上にロードし、デバイスツリー経由でカーネルに渡す仕組みを構築した。これにより、OS のパーティションを無改造のまま使用することが可能になった。

結論

10 年以上温めていたアイデアが、Wii 上での Windows NT 移植の成功に刺激されて結実した。低レイヤーの深い理解と、コミュニティの協力により、Wii は完全に動作する Mac OS X マシンへと変貌を遂げた。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment