A Mac OS X bootloader for the Nintendo Wii.
wiiMac enables PowerPC versions of Mac OS X to be booted natively on the Nintendo Wii.
See Releases for a precompiled, ready-to-run bootloader executable.
| Mac OS X Version | Patched Kernel | Drivers |
|---|---|---|
| 10.0 Cheetah | wii-xnu-124.13 | wii-macosx-cheetah-drivers |
| 10.1 Puma | - | - |
| 10.2 Jaguar | - | - |
| 10.3 Panther | - | - |
| 10.4 Tiger | - | - |
| 10.5 Leopard | - | - |
The following hardware is not yet supported:
To use wiiMac, you’ll need:
If you can open the BootMii menu, you’re ready to set up wiiMac. If you can’t, follow the instructions here.
As noted in the prerequisites above, two SD cards are needed.
Advanced users
Technically, you can get away with one SD card using a hybrid partitioning scheme: sector 0 contains MBR data, and sector 1 contains the APM data. This approach enables you to have the BootMii, wiiMac files, and the installed Mac OS X system all on the same SD card. Exactly how to accomplish this is left as an exercise for advanced users, but the gist of it is that you need to use fdisk to manually create an MBR at sector 0.
First, we’ll install the wiiMac bootloader onto the SD card that you used to open the BootMii menu (see prerequisites).
Download the latest version from Releases
Copy the entire wiiMac folder (containing wiiMac.elf and config.txt) to the root of your SD card
Verify that the following files exist:
/
└── bootmii
├── ppcboot.elf
└── armboot.bin
└── wiiMac
├── wiiMac.elf
└── config.txtvideo_mode for your Wii in /wiiMac/config.txt (ntscp, ntsci, pal60, pal50)Next, on a different SD card, we’ll prepare a Mac OS X system to be installed. We’ll need three partitions: a destination partition to which we’ll install Mac OS X, an install partition that we’ll boot from to run the installer, and a support partition containing a patched kernel and drivers.
Partitioning instructions depend on which host operating system you’re running.
macOS Host
diskutil list# Replace diskX with the correct device for the SD card
diskutil partitionDisk diskX APM \
HFS+ "Macintosh HD" R \
HFS+ "Install" 1G\
FAT32 "Support" 64MLinux Host
lsblk -f# Replace sdX with the correct device for the SD card
sudo parted /dev/sdX --script \
mklabel mac \
mkpart primary hfs+ 1MiB -1088MiB \
mkpart primary hfs+ -1088MiB -64MiB \
mkpart primary fat32 -64MiB 100%# If hfsprogs is not installed:
sudo apt install hfsprogs # Debian / Ubuntu
sudo pacman -S hfsprogs # Arch
sudo dnf install hfsplus-tools # Fedora
# then
# Replace sdX with the correct device for the SD card
sudo mkfs.hfsplus -v "Macintosh HD" /dev/sdX2
sudo mkfs.hfsplus -v "Install" /dev/sdX3
sudo mkfs.vfat -F 32 -n "Support" /dev/sdX4Windows Subsystem for Linux (WSL) Host
Mount Media To use WSL to prepare media, we need to expose USB devices to WSL.
winget install --interactive --exact dorssel.usbipd-winusbipd list…usbipd list…usbipd bind --busid 7-1usbipd attach --wsl --busid 7-1lsblk -fNAME
FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sda ext4 1.0
sdb ext4 1.0
sdc swap 1 3d051596-f50e-407d-9696-a285606a071c [SWAP]
sdd ext4 1.0 633fba1b-1ccb-4dbf-bed6-79822f9f35a1 954.1G 0% /mnt/wslg/distro
/
sde
sdfsde and sdf are the volumes for the SD Card (and adapter?).
sudo apt install parted hfsprogs dosfstools mtools kpartx# Replace sdX with the correct device for the SD card
sudo
parted /dev/sdX
mklabel mac
mkpart primary hfs+ 1MiB -1088MiB
mkpart primary hfs+ -1088MiB -64MiB
mkpart primary fat32 -64MiB 100%
quit# Replace sdX with the correct device for the SD card
mkfs.hfsplus -v "Macintosh HD" /dev/sdX2
mkfs.hfsplus -v "Install" /dev/sdX3
mkfs.vfat -F 32 -n "Support" /dev/sdX4The partitions should look like this:
…Next, we need our newly-created Install partition to contain a bootable Mac OS X installer. ISO backups of Mac OS X install media exist for many versions of Mac OS X. Once you’ve obtained an installer disk image for a supported version, mount it and then perform the following steps depending on your host operating system:
macOS Host
diskutil list# Replace diskXsA with the correct device and partition number for the SD card Install partition
diskutil unmount diskXsA
# Replace diskYsB with the correct device and partition number for the Mac OS X installer partition
diskutil unmount diskYsB# Replace diskXsA with the correct device and partition number for the SD card Install partition
# Replace diskMsY with the correct device and partition number for the source installation
sudo dd if=/dev/rdiskYsB of=/dev/rdiskXsA bs=512k status=progressLinux Host
sudo kpartx -av /path/to/installer/isolsblk -f# Replace sdXA with the correct device and partition number for the SD card Install partition
sudo umount /dev/sdXA
# Replace sdYB with the correct device and partition number for the Mac OS X installer partition
sudo umount /dev/sdYB# Replace sdXA with the correct device and partition number for the SD card Install partition
# Replace sdYB with the correct device and partition number for the source installation
sudo dd if=/dev/sdYB of=/dev/sdXA bs=1M status=progress conv=fsyncWSL Host
Download the ISO in Windows and copy into WSL.
Use the following commands to create logical devices for each partition in the installer image.
sudo kpartx -av /path/to/installer/isoExample output:
add map loop0p3 (254:0): 0 60 linear 7:0 4
add map loop0p4 (254:1): 0 56 linear 7:0 64
add map loop0p5 (254:2): 0 120 linear 7:0 120
add map loop0p6 (254:3): 0 56 linear 7:0 240
add map loop0p7 (254:4): 0 120 linear 7:0 296
add map loop0p8 (254:5): 0 512 linear 7:0 416
add map loop0p9 (254:6): 0 1157000 linear 7:0 928lsblk -fExample output:
…Note that the loopback partitions are exposed under /dev/mapper and not /dev/:
# Replace sdXA with the correct device and partition number for the SD card Install partition
# Replace loopYpB with the correct device and partition number for the source installation
sudo dd if=/dev/mapper/loopYpB of=/dev/sdXA bs=1M status=progress conv=fsyncExample:
sudo dd if=/dev/mapper/loop0p9 of=/dev/sde3 bs=1M status=progress conv=fsync
307232768 bytes (307 MB, 293 MiB) copied, 1 s, 307 MB/s592384000 bytes (592 MB, 565 MiB) copied, 1.86659 s, 317 MB/s
564+1 records in
564+1 records out
592384000 bytes (592 MB, 565 MiB) copied, 77.7162 s, 7.6 MB/sThe FAT32 “Support” partition is where we’ll store the patched kernel and drivers. Create a folder titled “wiiMac” at the root of this partition, and copy the appropriate mach_kernel and driver kexts into that folder. Refer to the supported version table for links to download a patched kernel and drivers.
Verify that the following files exist on the Support partition:
/
└── wiiMac
├── mach_kernel
├── IOUSBFamily.kext
└── NintendoWii*.kext (all other drivers)WSL Host Notes
Microsoft's default WSL2 kernel is heavily optimized and intentionally omits the vfat (FAT32) kernel module to save space and reduce boot time. Because of this, the standard mount command for FAT32 filesystems will always fail natively inside WSL2 unless you compile a custom kernel. You can attempt to unmount the volume and just copy the files in using Windows but that didn't work for me. Instead we'll use mtools utilities to copy files into the partition.
sudo mmd -i /dev/sdXA ::/wiiMac
sudo mcopy -s -i /dev/sdXA /mnt/c/path/to/files/* ::/wiiMacConfirm the contents of the drive:
sudo mdir -i /dev/sdXA ::/wiiMac/Example output:
…Then unmount the drive from WSL in your Administrator PowerShell window:
usbipd detach --allNow that we have both of our SD cards set up, we’re ready to boot into the Mac OS X installer to install Mac OS X.
First, we need to load and run the wiiMac bootloader using BootMii.
You should now be running the wiiMac bootloader.
Next, we’ll boot the Mac OS X installer so that we can install Mac OS X.
No open issues yet, or sync has not completed.