Kỳ tích phần cứng: Chạy Mac OS 9 trên Nintendo Wii

Phần mềm30 tháng 10, 2026·5 phút đọc

Một lập trình viên đã thành công đưa hệ điều hành Mac OS cổ điển lên chạy trên Nintendo Wii và GameCube thông qua dự án OpenBIOS tự phát triển. Đây được xem là lần đầu tiên sau kỷ nguyên CHRP có người bên ngoài Apple đưa Mac OS cổ điển lên một hệ thống hoàn toàn mới, mở ra hướng đi thú vị cho cộng đồng homebrew.

Kỳ tích phần cứng: Chạy Mac OS 9 trên Nintendo Wii

Kỳ tích phần cứng: Chạy Mac OS 9 trên Nintendo Wii

Trong thế giới homebrew, đôi khi những dự án kỳ quặc nhất lại mang đến nhiều bài học kỹ thuật nhất. Một lập trình viên có biệt danh Rairii vừa công bố cột mốc quan trọng: đưa Mac OS cổ điển lên chạy trên Nintendo Wii, GameCube và trong tương lai là Wii U. Đáng chú ý, anh khẳng định toàn bộ quá trình lập trình, dịch ngược và gỡ lỗi đều do chính mình thực hiện, không hề sử dụng AI hay công cụ sinh mã tự động.

Mac OS 9.2.2 khởi động trên Nintendo WiiMac OS 9.2.2 khởi động trên Nintendo Wii

Vì sao lại là Mac OS trên Wii?

Câu hỏi đầu tiên ai cũng đặt ra là: tại sao lại chọn hệ điều hành của Apple cho một chiếc máy chơi game của Nintendo? Theo Rairii, xuất phát điểm là từ dự án port Windows NT lên các dòng máy PowerPC. Trong quá trình đó, anh làm quen với Mac OS cổ điển và bị cuốn hút bởi kiến trúc "chồng chất thủ thuật" đặc trưng từ thập niên 1980.

Điểm thú vị: phần mã m68k trong tệp TBXI (Mac OS ROM) của Apple có tên gọi "SuperMario" — và cái tên này tồn tại suốt cả kỷ nguyên PowerPC. Rairii phỏng đoán có thể một kỹ sư Apple hồi đầu thập niên 1990 là fan của trò chơi này.

Về mặt kỹ thuật, các chipset đồ họa tích hợp của Nintendo có mối liên hệ mật thiết với nhau. Chip Flipper trên GameCube do hãng ArtX thiết kế và về cơ bản đã hoàn thiện trước khi ATI mua lại công ty này. Chip Vegas (và bản sửa đổi Bollywood) trên Wii cùng Latte trên Wii U chính là những hậu duệ trực tiếp của Flipper.

"Tôi làm những dự án này để giải trí và học hỏi. Nếu dùng AI thì sẽ chẳng còn vui và tôi cũng chẳng học được gì." — Rairii chia sẻ.

Những thách thức kỹ thuật chồng chất

Dự án bắt đầu từ ngày 22/06/2025 với việc fork OpenBIOS. Bài toán đầu tiên là Trampoline — bộ nạp khởi động của Mac OS "New World", vốn chạy trên môi trường Open Firmware. Rairii phải port OpenBIOS, tận dụng một phần trình điều khiển từ dự án đưa Mac OS X lên Wii của Goldfish64, đồng thời tự viết driver cho các thiết bị trên bus EXI (tên gọi của Nintendo và Macronix cho chuẩn SPI).

Hàng loạt giả định của Trampoline về không gian địa chỉ vật lý không còn đúng trên phần cứng Nintendo:

  • Địa chỉ vật lý của bộ đệm bị tính ra giá trị không hợp lệ, buộc phải vá sang một địa chỉ được đảm bảo hợp lệ
  • Vùng địa chỉ từ 0x8000_0000 trở lên được mặc định là MMIO (PCI), trong khi trên Wii U đây lại là một phần RAM
  • Các lỗ hổng giữa các vùng RAM bị lấp một phần bởi MMIO gây xung đột ánh xạ

Rairii giải quyết bằng cách vá khởi tạo ánh xạ MMIO sang vùng địa chỉ vật lý 0x0100_0000 ứng với địa chỉ ảo 0xE000_0000. Ngoài ra còn vô số bản vá khác: giả lập thiết bị quản lý nguồn tương thích Mac99 trong device tree, thay thế trình điều khiển ngắt bằng bản phù hợp với bộ điều khiển ngắt Flipper, và xử lý lỗi vòng lặp vô hạn do lập trình viên Apple xưa copy-paste nhầm nhãn nhảy khi khởi tạo cổng nối tiếp.

Anh cũng phát hiện một lỗi thú vị trong mã m68k: hàm khởi tạo bộ điều khiển ADB và vi điều khiển quản lý nguồn không kiểm tra phần cứng có tồn tại hay không, dẫn đến việc ghi đè vùng bộ nhớ thấp khi thiết bị vắng mặt.

Từ màn hình đĩa mềm nhấp nháy đến màn hình desktop

Sau khi vượt qua giai đoạn khởi động đến màn hình đĩa mềm nhấp nháy, Rairii viết trình điều khiển hiển thị (dựa trên driver virtio của Elliott Nunn) và driver cho cổng tay cầm GameCube để có thể di chuyển con trỏ mà không cần USB. Tiếp đó là trình điều khiển block IO cho thiết bị EXI, kèm theo một driver giả lập SCSI — kỹ thuật mà các driver macOS cho bộ điều khiển SATA sau này cũng áp dụng.

Mac OS 7.6 khởi động trên WiiMac OS 7.6 khởi động trên Wii

Quá trình gỡ lỗi cũng lắm gian nan. Một lỗi trong chính driver của anh khiến HFS boot sector từ chối khởi động: chế độ PIO của thiết bị IDE xử lý theo từng word 16-bit, nhưng mã lại nhận một địa chỉ bộ đệm lẻ hoàn toàn không căn chỉnh, khiến dữ liệu bị lệch một byte khi ghi.

Trên trình giả lập Dolphin đã bị sửa đổi, Mac OS 9.2.2 mất tới một giờ mới khởi động rồi crash. Nguyên nhân được xác định là Open Transport — gỡ extension này đi thì hệ thống chạy ổn định, nhiều khả năng vì nó không xử lý được tình huống hoàn toàn không có thiết bị nối tiếp hay mạng nào. Trong khi đó, Mac OS 7.6 khởi động thành công chỉ sau khoảng 20 phút trên giả lập.

Đáng kinh ngạc hơn, khi thử trên phần cứng thật với thẻ SD qua giao tiếp SPI — chế độ truy cập được cho là chậm nhất — Mac OS 7.6 khởi động chỉ trong 40 giây. Lý do: hệ điều hành độc chiếm toàn bộ CPU trong lúc truyền dữ liệu, khác hẳn với driver NT trước đây phải nhường tài nguyên.

Điều gì tiếp theo?

Dự án vẫn còn xa mới đạt mức có thể phát hành công khai. Lộ trình sắp tới gồm: đưa trình điều khiển SD của Wii vào hoạt động, tiếp đến là bộ điều khiển USB, rồi port lên Wii U. Rairii cũng ấp ủ kế hoạch phá vỡ các giới hạn RAM hiện tại.

Với cộng đồng yêu thích phần cứng cổ điển và homebrew, đây là minh chứng sinh động cho thấy giới hạn của phần cứng phần lớn chỉ nằm ở trí tưởng tượng của người lập trình — và đôi khi, một chiếc máy chơi game năm 2006 lại chính là "chiếc PowerMac yêu thích" của ai đó.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗