Research emulator for the ARM9 core in the Nintendo Wii.
Credit is due to the following projects and resources that have guided the implementation since the beginning:
- Team Twiizers' fork of Skyeye
- MINI
- Wiibrew
- YAGCD
- libogc
- archshift/llama
- MerryMage/dynarmic
- All of the folks who still work on Wii/GC homebrew
- Execution through the boot ROM
- Execution through IOS first-stage bootloader
- Execution through IOS second-stage bootloader
- Execution in the IOS kernel
- Broadway/PowerPC-world HLE
- Broadway LLE (Preview, No application support yet) Provided by libppcemu.
- Emulated SDHC (SD card) support. (Alpha quality ATM! Place sd image as "sd.img" to connect card)
- Emulated USB support?
- Emulated WLAN functionality?
- Write a bunch of tests
- Guest debugging functionality (perhaps via GDB, or some UI?)
- Go fast (performance optimizations, i.e. a JIT backend, etc)
- Tools for fuzzing guest code
- Other related tools?
ironic is primarily developed on Linux and macOS (x86-64 and AArch64). Support for Windows is provided on best-effort basis. For technical reasons, minimum support is at Windows 10 1809 and Server 2019.
Rough matrix of what software versions get to what stages in the boot process
| Software Versions | past boot1? | past boot2? | into IOS? | Notes |
|---|---|---|---|---|
| 4.3U, boot1d, boot2v4 | Yes | Yes | Yes | None |
| 4.3U, boot1b, boot2v4 | Yes | Yes | Yes | None |
| 4.3U, boot1c, boot2v4 | Yes | Yes | Yes | None |
| 4.3U, boot1b, BootMii/boot2, boot2v4 | Yes | No | N/A | Missing some debug port writes in BootMii somehow Booting into MINI from SD Card results in a crash BootMii's fallback to boot2 results in crash (different) |
| TODO: More results |
Contributions are welcome from all free persons. The original repo did not specify a license other than "as permissive as possible".
I use Nightly by default, so you may have to do something like this:
$ git clone https://github.com/AndrewPiroli/ironic && cd ironic/
...
$ rustup toolchain install nightly
$ rustup override set nightly
$ cargo build --release
In order to boot, ironic expects the following files to live in the project
directory:
boot0.bin- The Wii boot ROM dumped from your consolenand.bin- The NAND flash data dumped from your consoleotp.bin- The associated OTP/fused memory dumped from your consoleseeprom.bin- The associated SEEPROM memory dumped from your console
The included script create_binfiles_from_nand.sh/create_binfiles_from_nand.bat will generate otp.bin and seeprom.bin for you using your nand.bin
You can run the emulator with the interpreter backend like this:
$ cargo run --release
Like skyeye-starlet, the ironic-tui target includes a server for PPC HLE.
Tools for interacting with the server and representing processes on the
PowerPC-side of the machine can be found in pyronic/.