本篇文章更新時間:2026/04/09
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知或向一介資男的 LINE 社群反應。
如果本站內容對你有幫助,歡迎贊助支持 。
在 Wii 上移植 Mac OS X 10.0:給老硬體一個新生命的極限挑戰
編輯前言:這篇文章記錄了一段不可思議的工程旅程——把 2001 年的 Mac OS X Cheetah 移植到 2006 年的 Nintendo Wii 上。對於任何喜歡低階系統、復古硬體,或是單純享受「做一件看似不可能的事」的人,原文都值得細讀。
核心觀點 (Key Takeaways)
- Wii 的 PowerPC 750CL 與早期 G3 Mac 極為相近,使 Mac OS X 10.0 在 CPU 層面具備可行性。
- 核心挑戰不在於硬體性能,而是 bootloader、裝置樹、舊版 XNU kernel patch、I/O 驅動 等龐大的相依問題。
- 雖然 Mac OS X 本身封閉,但 Darwin 核心開放原始碼,使開發者能以「自訂 bootloader + kernel patches + 自寫驅動」方式重建整個啟動鏈。
深入解析
原文是篇長達多萬字的技術冒險,從 feasibility study 到 GUI 上桌面,每一步都像在荒野探路。以下整理我認為最關鍵的幾個面向。
1. Wii 與早期 Mac 的「意外親緣」
Wii 採用 PowerPC 750CL,與 iBook G3 的 750CXe 同族,加上 Mac OS X Cheetah 對記憶體的要求相對寬鬆,使作者判定:
CPU 與基本記憶體配置不會是阻礙。
接著,他確認 Wii 的特殊記憶體架構(MEM1 + MEM2)與 Mac OS X 的假設不完全對應,但仍能透過 QEMU 測試確認可行性。
2. 重建整套 Mac 的開機流程,但「不需要」Open Firmware
早期 PowerPC Mac 的啟動鏈如下:
Open Firmware → BootX → XNU
作者選擇完全繞過前兩者,自寫一個極精簡的 bootloader:
- 初始化 Wii 硬體
- 從 SD 卡載入 Mach-O 格式 kernel
- 建立裝置樹 (device tree)
- 跳進 XNU
這看似「偷吃步」,但其實是最務實的做法,因為 Wii 僅需支援一套固定硬體,不需要 Open Firmware 那樣的泛化設計。
3. 用 LED 閃爍偵錯:沒有輸出時的土法煉鋼
當 kernel 啟動後,它會重設 Wii 環境,使 bootloader 的 debug 輸出全失效。於是作者想出一招:
直接在 kernel binary 中 patch 指令,讓 LED 閃爍,確認程式執行到哪裡。
這段操作本身就超 hard-core:反編譯、對照 XNU 原始碼、手動替換 PowerPC 指令,像是在 1990 年代的韌體除錯現場。
4. 寫驅動才是最痛苦的部份:Hollywood SoC、Starlet 與 IOKit
Wii 的硬體是高度客製的 Hollywood SoC,沒有 PCI,沒有標準介面,因此:
- 必須用 IOKit 自寫 Hollywood 驅動
- 自己 publish 底層硬體的 nubs
- 再用這些 nubs 實作 SD card、framebuffer、USB… 等其他驅動
SD 卡驅動尤其精彩:
- Wii 的 SD 介面靠 Starlet ARM 核心代管
- PPC 端需透過特殊記憶體位置向 MINI 發 IPC 指令
- 還得處理 cache coherency,確保 PPC 能讀到 Starlet 寫入的資料
這些都是完全無文件的「考古工程」。
5. Framebuffer 雙緩衝:解決 Wii 顯示器只吃 YUV 的奇怪限制
Mac OS X UI 運作需 RGB framebuffer,但 Wii 的顯示硬體只接受 YUV。
為此,他實作:
- 一塊 RGB framebuffer (Mac 用)
- 一塊 YUV framebuffer (Wii 用)
- 每秒 60 次自動轉換 RGB→YUV
這直接讓 GUI 正常顯示,也終於看到熟悉的 Aqua 介面出現在 Wii 上。
6. USB 最大的突破:透過古早 CVS 找到遺失的 IOUSBFamily 原始碼
最戲劇化的一段:
- Cheetah 的 USB stack 原始碼 Apple 沒公開
- 舊版 USB stack 預期跑在 PCI + little endian 設計的 Mac 上
- Wii 的 OHCI 控制器是 reversed-little-endian + 非 PCI
沒有原始碼幾乎無法 patch,直至作者透過 IRC 拿到完整 CVS:
這成為突破 USB 的關鍵,最終讓鍵盤滑鼠運作,使 Wii 變成真正可操作的 Mac。
筆者心得與啟發
這篇文章最打動我的並不是技術成果,而是整段心態:
明知不可能,但還是開始做。
在作者眼中,這不是「讓 Wii 變成 Mac」,而是一次穿越未知領域、剝開層層黑箱的冒險。從 LED 閃爍、kernel patch、記憶體同步,到自行實作整套 USB stack,每一步都展示了真實的工程推進方式:
- 找不到文件就 reverse
- 沒有接口就自己寫
- 系統 crash 就從最底層查起
- 舊資料消失就去 IRC 問
看完之後,我重新思考了「興趣專案」的價值。那些我們覺得太大、太久、太難的想法,也許正因為如此,才值得開始。
如果你也有一個放了十年的技術夢,不妨就從今天開始動工。
