Mac OS X портировали на Nintendo Wii 2007 года

3 мин
Mac OS X портировали на Nintendo Wii 2007 года

Инженер-программист Брайан Келлер объявил об успешном портировании Mac OS X 10.0 Cheetah на игровую консоль Nintendo Wii.

Он не только заставил операционную систему от Apple работать на нестандартном железе, но и создал текст доклад о проделанной работе – от проверки совместимости до написания драйверов для уникального чипсета Hollywood.

Почему это вообще возможно?

Келлер стартовал с исследования аппаратной совместимости. В Wii установлен процессор PowerPC 750CL – улучшенная версия PowerPC 750CXe, который использовался в ноутбуках Apple G3 iBook и некоторых iMac G3. “Я был уверен, что с процессором проблем не будет”, – пишет инженер.

А вот с оперативной памятью всё сложнее: Wii имеет 88 МБ ОЗУ (24 МБ 1T-SRAM + 64 МБ GDDR3), тогда как официальные требования Mac OS X Cheetah – 128 МБ. Однако Келлер выяснил, что система реально запускается и с меньшим объёмом: он протестировал Cheetah в QEMU с 64 МБ – всё работало.

Загрузчик с нуля и патчи ядра

Вместо портирования Open Firmware или BootX (штатных загрузчиков Mac) Келлер решил написать собственный загрузчик на основе примера ppcskel. Загрузчик инициализирует железо Wii, загружает ядро XNU с SD-карты, создаёт дерево устройств и передаёт управление ядру.

Первые попытки приводили к чёрному экрану. Чтобы понять, насколько далеко загружается ядро, Келлер применил хитрый трюк: патчил бинарник ядра, заменяя инструкции на код, зажигающий один из светодиодов на передней панели Wii. Так он отследил путь выполнения вплоть до C-кода.

Келлер признался, что активно использовал чат-боты для понимания кодовой базы XNU и исследования различных тем.

Драйверы IOKit: Hollywood, SD-карта, фреймбуфер и USB

Самая трудоёмкая часть – написание драйверов для IOKit (каркас драйверов macOS). Поскольку Wii использует фирменную систему-на-чипе Hollywood вместо шины PCI, пришлось создавать собственный драйвер NintendoWiiHollywood, который публикует nub’ы для дочерних устройств.

Драйвер SD-карты (NintendoWiiSDCard) реализует чтение и запись через IPC с сопроцессором Starlet (ARM). После его запуска система наконец перестала выдавать ошибку “Still waiting for root device” и смонтировала корневую файловую систему.

Отдельная история – видео. Видеовыход Wii ожидает 16-битные YUV-данные, а Mac OS X выводит RGB. Подход – два фреймбуфера: один RGB, куда пишет macOS, и второй YUV, который отображается на экран. 60 раз в секунду драйвер конвертирует информация. На скриншоте ниже – та самая схема:

Двойная буферизация RGB→YUV
Двойная буферизация RGB→YUV

Когда система загрузилась до рабочего стола, цвета были… пурпурными. Но после исправления и возврата флага isConsoleDevice всё встало на свои места.

USB-клавиатура и манипулятор

С USB возникли проблемы: AppleUSBOHCI (драйвер контроллера OHCI) требовал IOPCIDevice, которого на Wii нет. Келлер создал поддельный NintendoWiiHollywoodPCIDevice, наследующий от IOPCIDevice, и пропатчил Info.plist. Но затем выяснилось, что на Wii используется обратный little-endian, а драйвер делает программный свап байтов. Без исходников IOUSBFamily для Cheetah исправить это было почти невозможно.

Помог IRC: участник @bbraun предоставил доступ к CVS-репозиторию с полными исходниками IOUSBFamily для Mac OS X Cheetah. Келлер пересобрал драйверы, убрал лишние swap’ы – и USB-клавиатура с мышью заработали.

Теперь на Wii можно запустить не только порты Linux, NetBSD и Windows NT, но и полноценную Mac OS X Cheetah с работающей USB-клавиатурой и мышью. Исходный исходник загрузчика и драйверов доступен на GitHub.

Читают сейчас

Prusa представила PrusaSlicer 3.0 с новым интерфейсом и поддержкой плагинов

4 часа назад

Prusa представила PrusaSlicer 3.0 с новым интерфейсом и поддержкой плагинов

Команда Prusa Research выпустила первую публичную альфа‑версию слайсера PrusaSlicer 3.0. Авторы переписали интерфейс, переработали систему профилей, добавили поддержку полноценной работы с несколькими

Anthropic обновила Claude – вышли Fable 5.1 и Mythos 5.1

5 часов назад

Anthropic обновила Claude – вышли Fable 5.1 и Mythos 5.1

Anthropic выпустила апдейт своих топовых моделей – Claude Fable 5.1 и Claude Mythos 5.1. Это одна и та же модель под капотом, различающаяся уровнем защитных ограничений: Fable 5.1 доступна всем в цело

Creality представила 3D‑принтер SPARKX i8 с поддержкой многоцветной печати и быстрой сменой филамента

5 часов назад

Creality представила 3D‑принтер SPARKX i8 с поддержкой многоцветной печати и быстрой сменой филамента

Creality представила 3D‑принтер SPARKX i8 с поддержкой четырёхцветной печати. Его главная особенность заключается в системе QuarTeks, в которой прутки филамента подведены практически к самому соплу, б

Базовая релиз MacBook Neo аномально быстро расходует источник SSD из‑за всего 8 ГБ оперативной памяти

5 часов назад

Базовая релиз MacBook Neo аномально быстро расходует источник SSD из‑за всего 8 ГБ оперативной памяти

Автор YouTube‑канала UFD Tech рассказал, что MacBook Neo необычно быстро расходует источник SSD‑накопителя. Всё дело в небольшом объёме оперативной памяти, из‑за которой устройство активно записывает

Anthropic предупредила пользователей Claude об утечке их данных для входа из‑за вредоносного ПО

5 часов назад

Anthropic предупредила пользователей Claude об утечке их данных для входа из‑за вредоносного ПО

Организация Anthropic предупредила, что инфостилеры перехватывают сеансы Claude и открывают злоумышленникам доступ к учётным записям пользователей. Читать далее