Ajouter un commentaire

Faire tourner MacOS X 10.0 sur une console Wii

Par:
francoistonic

lun, 13/04/2026 - 07:10

Voilà un défi technique comme nous les aimons à Programmez !. Bryan Keller a voulu savoir s'il était possible de porter nativement macOS X 10.0 (Cheetah) sur la console Wii de Nintendo. La Wii embarque un PowerPC 750CL, qui est une variante du G3 des premiers iMac et des iBook. La console embarque 88 Mo de RAM, mais répartie en 2 types de mémoire de 64 et 24 Mo. Même si l'OS nécessite officiellement 128 Mo de RAM, techniquement, ce n'est pas forcément bloquant.

Côté macOS X, comme le rappelle Bryan, le système est relativement complexe : avec la couche kernel basée sur Mach et BSD, les utilitaires système, puis les API et l'interface Aqua. Une des difficultés est de comprendre le processus de boot et le firmware. Ce dernier utilisait à l'époque Open Firmware. Quelle option choisir pour booter : porter Open Firmware, porter BootX ou écrire un bootloader ?

Bryan décide, après une analyse de la situation, d'écrire son propre bootloader. Celui-ci doit :

1 - initialiser le hardware

2 - charger le kernel depuis la carte SD

3 - construire l'arbre du matériel et les arguments de boot

4 - passer les contrôles aukernel

Bref, tout sauf trivial ! Pour coder le bootloader, il se base sur ppcskel. Après, il a fallu comprendre comment charger le noyau XNU en mémoire. Le kernel est stocké dans un format binaire spécifique, Mach-O. Heureusement, ce dernier est bien documenté. Le code source de XNU a permis à notre développeur de comprendre le processus de boot de l'OS et de suivre les routines assembleur qui sont chargées.

1. start.s: start
2. start.s: allStart
3. start.s: nextPVR
4. start.s: donePVR
5. start.s: doOurInit
6. start.s: noFloat
7. start.s: noVector
8. start.s: noSMP
9. start.s: noThermometer
10. ppc_init.c: ppcInit
11. pe_init.c: PE_INIT_PLATFORM
12. device_tree.c: find_entry (crash with 300 exception)

Après avoir résolu le problème du boot, encore faut-il charger macOS X. Là, les choses se compliquent au niveau des dépendances. Par exemple, il faut disposer des pilotes (IOKit) qui permettent de communiquer entre le matériel et le kernel. Mais il faut tenir compte du hardware de la Wii et de la manière dont il fonctionne. Une partie des accès hardware doit passer par un SoC Nintendo, Hollywood. Bryan a écrit un pilote en C++ pour pouvoir interagir.

Nous vous conseillons de lire la longue explication sur le portage et tous les développements réalisés. C'est passionnant : https://bryankeller.github.io/2026/04/08/porting-mac-os-x-nintendo-wii.html

GitHub du projet : https://github.com/bryankeller/wiiMac

Il supporte uniquement la 10.0. Les éléments suivants ne sont pas supportés : réseaux sans fil, lecteur optique, accélération hardware, audio. 

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
 FFFF  V     V  TTTTTT  III  BBBB  
F V V TT I B B
FFF V V TT I BBBB
F V V TT I B B
F V TT III BBBB