
2026/10/31 2:25
僕の一番好きなPower Macは、ニンテンドーWiiだ
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Rairii のゲスト投稿では、ArtX ベースの PowerPC システム(特にニンテンドーコンソールであるゲームキューブ、Wii、Wii U)への古典的な Mac OS バージョン 7.6 と 9.2.2 の成功したポート作業について詳述されている。同プロジェクトは 2025 年 6 月 22 日に開始され、AI の助力なしに完全に手動作業によるコーディング、リバースエンジニアリング、デバッグを通じて完了している。大きな突破点は、FAT ファイルシステムを備えた OpenBIOS を改修して Mac OS イメージをロードできるようにしたことであり、開発者は NT ARC ファームウェアローダーなどの既存のツールの再利用を行ったが、ドライバーは大幅に修正した:Elliott Nunn の virtio ベースのディスプレイドライバーの再利用、"SD Gecko"(SPI アダプター)および"EXI-IDE"(SPI エミュレーション)ディスクドライバーの実装、物理アドレス空間の前提条件と MMIO マッピングのエラーを修正する「Trampoline」へのパッチ適用などである。重要なカーネルパッチはマイクロコントローラー用のビットフラグの修正、Flipper および PCI アーキテクチャ間の中断コントローラの不整合への対処、レガシーモードの問題の解消といったハードウェア固有の課題に対応している。具体的なレガシーバグも修正された例として、「SuperMario」m68k 環境におけるシリアルポートコード内の無限ループがある。現在、SD を通じて SPI で実機上で Mac OS 7.6 は 40 秒以内に正常に起動するが、Mac OS 9.2.2 については不安定な Open Transport コンポーネントを除去しクラッシュを防ぐためにさらなる作業が必要である。
本文
Wii と GameCube で動作するクラシック Mac OS:移植プロジェクトの報告
ライリー氏による投稿です。CHRP クローン時代以来、Apple 以外によって新規ハードウェア上でクラシック Mac OS をデスクトップ環境に成功させた事例として、本プロジェクトが大きなマイルストーンを迎えました。
プロジェクトの背景と概要
- 目標: 「ArtX チップセット」と呼ばれるパワー PC システム(Wii の「Vegas」や GameCube など)上でクラシック Mac OS(OS 7.6, 9.2.2)をデスクトップ環境として起動すること。
- 歴史的文脈: Wii U のチップセット「Latte」や後継の「Bollywood」は、GameCube のチップセットである「Flipper」から発展したものであり、実質的に ArtX により設計された系譜に属します。
- 開発者声明(重要):
- プロジェクト開始日は2025 年 6 月 22 日(OpenBIOS のフォーク)。
- AI やコーディングエージェントは一切使用せず、すべて独力でのコーディング、リバースエンジニアリング、デバッグを実施。
- このプロジェクトは娯楽および学習を目的としており、「AI」を利用すると学びが失われるとの考えです。
移植の経緯と技術的課題
1. OpenBIOS とブートローダー(Trampoline)の移植
- 起動フロー: 「New World」クラシック Mac OS は、Open Firmware 環境上で動作するブートローダー「Trampoline」から始まります。
- 既存リソースの利用と改変:
- Goldfish64 氏の Wii 向け Mac OS X 移植(OpenBIOS 含む)からいくつかのドライバーを流用したが、そのまま使用せず独自に開発。
- NT(Windows NT)移植版で培った技術を応用(例:NT ARF ファームウェアローダーの変更によるビッグエンディアン形式の ELF ロード)。
- 初期デバイス: EXI バス上の 2 つのドライバーを移植。
- SD Gecko: SPI を介した SD カードサポート(GameCube メモリカードスロットへのアダプタ)。
- EXI-IDE: 実機とは完全に一致しないが、Dolphin エミュレーターのデバッグ機能に対応した「不正確なエミュレーション」をテストに利用。
2. メモリアドレス空間の不一致と修正(最重要)
Trampoline は物理アドレス空間の前提条件が本システム(Wii/GameCube)と異なるため、大幅な修正が必要でした。
- 問題点:
- Trampoline の計算するバッファの物理アドレスが無効。
以上の領域を MMIO(メモリアップロード I/O)前提としているが、Wii では RAM の一部である。0x8000_0000- RAM に隙間があり、MMIO がそれを埋めている構造になっている。
- 解決策:
- カーネルメモリチャンクリスト内の MMIO マッピングを修正:
- 物理アドレス:
(RAM の途中)から0x0100_0000 - 仮想アドレス:
へ0xE000_0000 - サイズ:
のマッピングを設定。0x1000_0000
- 物理アドレス:
- この変更により、MMIO 全体に加え、RAM の一部終端と(GameCube 以降)、別の RAM の始端をカバー可能に。
- カーネルメモリチャンクリスト内の MMIO マッピングを修正:
- 迂回処理の実装:
- Trampoline の関数内でバージョン検出を実装し、古いバージョン(16 ビットページ数)を検知するとフックして処理をバイパス。
- 旧バージョン特有の
以上の無条件 1:1 マッピングと競合するため、これを削除する処理を実装。0x8000_0000
3. ハードウェア特化パッチの適用
特定のパワー PC マッキントッシュ向けに設計されたコードを修正。
- フラグビットの除外: マイクロコントローラー存在を示すフラグを外す。
- バス周波数計算: 特定ハードウェアタイマーに基づく再計算処理を除去。
- 割り込みコントローラ: PCI バス上のリトルエンディアンデバイス対応コード(本システムには存在せず)を修正・除外。
- フック戦略: 初期化コードへの呼び出しをフックし、ロード後に追加パッチを適用可能に。
4. デバイスツリー(Device Tree)の偽装と修正
Trampoline が認識する形に合わせてデバイスをシミュレート。
- 割り込みコントローラ: リトルエンディアン版で偽装(Flipper IC に最も似ている)。Wii U ではパワー PC コア対応のため一部変更あり。
- フレームバッファアドレス: キャッシュ外の仮想アドレス(
)へ変更。0xExxx_xxxx - 電源管理: Mac99 互換のパワー管理デバイスを追加してシミュレートし、Trampoline のドライバ準備を可能に。
クラッシュ回避と動作環境の確保
m68k コードとパワー PC ネイティブコードの修正
追加パッチによる不具合解消のため、以下の点を確認・修正。
- m68k コード:
- ネイティブ割り込みコントローラーレジスタへの直接アクセスコードを修正。
- オーディオ割り込みオン/オフ関数ポインタをスタブ化(既にテーブルに存在するため有効活用)。
- ADB と電源管理マイクロコントローラー初期化関数:ハードウェア非存在チェックなしで低メモリ破損するのを防ぐため、実装を見直し。
- パワー PC ネイティブコード:
- コピー&ペースト失敗によるバグ修正(ポート 2 が無いうちに無限ループになるケース)。
- USB コントローラ不存在時の NULL ポインタアクセス防止。
- 割り込みコントローラーレジスタ読み書きコードの修正。
- 電源管理ドライバー: BlueBox のスタブドライバーから、シャットダウン/再起動対応の独自ドライバーへの移行計画。
ドライブとフォーマットの解決
- ディスクフォーマット: FAT ファイルシステム上のイメージを使用。Mac OS ROM TBXI ファイルを
として配置し OpenBIOS でロード。\ppc\bootinfo.txt - SCSI の偽装: OpenBIOS に好むディスクフォーマットを実装し、SCSI ドライバーでハードウェアをシミュレート。
- クイックの発見(重要):
- 光ディスクドライバーは
バイトセクターをエミュレートするが、裏層 SCSI ドライバーがスキャッター・ギャザーサポートチェックしていない場合、読み込み側で実装が必要となる問題が発生。512
- 光ディスクドライバーは
致命的なバグの修正プロセス
- PowerPC StartLib!GetStartupDevice: 内部構造(デバイスツリーやインデックス)を深く掘り起こし、ゼロ以外であることを確保する修正を実施。
- HFS ブートセクター拒絶の原因:
- IDE デバイスの PIO モードでアラインされていないオッドバッファアドレス(低 4 ビットが 1)を受け取るバグ。
- その場合 EXI DMA を試みず、データ読み書きを回避するドライバー修正。
- リソースフォークヘッダー読み取り時のデータ妥当性チェックで失敗していた原因の特定と解消。
マウスカーソルと表示機能の実装
- Elliot Nunn 氏の virtio ドライバー: 参考にしてディスプレイドライバーを実装し、正しく表示可能に。
- GameCube コントローラ: USB を使わず、コントローラーポート用ドライバーを移植してマウスカーソル移動を実現。
実機ハードウェアでの起動成功(Wii / GameCube)
Mac OS 7.6 の起動
- 環境: Wii の SD コントローラー(SPI 経由)、または Dolphin エミュレータ上のハッキングされたツリー。
- MacsBug の影響: デバッグ用としてマウントするが、初期段階でクラッシュを引き起こすため削除が必要だった(約 20 分後にデスクトップ表示)。
- 起動時間:
- Wii(SPI/SD): 約 40 秒(最遅アクセスモードでの確認)。
- NT ドライバーと比較して、転送速度が 64 倍高速化していることが確認(CPU 独占による同期転送の違い)。
Mac OS 9.2.2 の起動と Open Transport の問題
- Open Transport: シリアルデバイスやネットワークデバイスを処理できない不具合が見つかり、拡張フォルダから除外することで正常起動。
- パフォーマンス: エミュレータ上では非常に遅く、長時間動作してもクラッシュしやすかったが、HFS セクター読み取り等の基本的な動作は確認。
今後の展望とロードマップ
現時点での移植はまだ公開リリースには程遠い状況です。当面の目標は以下の通りです。
- Wii:
- SD コントローラーの完全な起動制御。
- USB コントローラーのリバースエンジニアリング完了(VibeCoded EHCI ドライバー等の活用)。
- Wii U:
- Wii U でのクラシック Mac OS 起動への挑戦。
- その他:
- RAM のバリアー突破のためのパッチ開発。
このプロジェクトは、ゲームコンソール上のクラシック Mac OS を実現する新たな試みとして、CHRP クローン時代の発展系である ArtX システムの可能性を広げるものと考えています。