Preserve formatted NAND boot and Wii Remote pairing, add DMA/SRAM conformance tests and a Wii comparison probe. Keep P1 profiling tools and native update A/B evidence; reject the unhelpful targeted SRAM shortcut.
3.3 KiB
Wii IOS conformance probe
This is the first black-box comparison probe for the original IOS running on a
real Wii and under this fork's Starlet LLE mode. Build one DOL and run that
same file in both places. It records 64 rounds of IPC-backed resource-manager
open/close calls in all four open modes, missing-device errors, root directory
counts, installed-title counts, and an SD write/read/hash/cleanup round trip.
The output contains 1,860 numbered observations. The probe requests no NAND
writes, installs no IOS, and does not blindly scan MMIO registers. It creates and
removes only sd:/wii-conformance-data.bin on the SD card.
Build
Install devkitPPC and libogc/libfat using devkitPro, set DEVKITPRO and
DEVKITPPC in the build shell, then run make in this directory. The output is
wii-conformance.dol. On this Windows machine, the following command was used
successfully from this directory in PowerShell:
& 'C:\devkitPro\msys2\usr\bin\bash.exe' -c 'export DEVKITPRO=/c/devkitPro DEVKITPPC=/c/devkitPro/devkitPPC; export PATH=/c/devkitPro/devkitPPC/bin:/c/devkitPro/tools/bin:/usr/bin:/bin; make'
The ready-to-copy Homebrew Channel folder is apps/wii-conformance/, containing
boot.dol and meta.xml. This build has not yet been run on a physical Wii.
Capture
- Use a Wii and a Dolphin LLE profile with the same IOS version and revision. For exact directory/title counts, use the same NAND snapshot, starting state, and loaded title. The SD cards need enough free space for a 4 KiB test file and the CSV output.
- Copy
apps/wii-conformance/to theapps/folder on each SD card and launch it through the Homebrew Channel. Use the exact sameboot.dolon both runs. Dolphin LLE requires a configured writable virtual SD image. - After the program returns, copy
sd:/wii-conformance.csvfrom each SD card to separate files such aswii.csvanddolphin.csv. - Compare them with
python compare.py wii.csv dolphin.csv. Exit code 0 means all recorded observations agree, 1 reports differences, and 2 means the captures are invalid or use different IOS versions.
The CSV contains no keys or NAND contents. An allocated IOS file descriptor is
normalized to success/failure because its numeric value depends on unrelated
open handles. Call return codes and output counts remain exact. Time is not
compared in this first suite because scheduling and output I/O introduce noise.
captures/ is kept local and ignored by Git until each capture's console or
emulator provenance, IOS revision, probe binary hash, and initial NAND state
are documented. A filename alone is not evidence that a capture came from a
physical Wii.
Interpretation and next suites
A mismatch identifies a reproducible behavior to investigate; it does not by itself locate a bad register. Trace the first failing request inside Dolphin's Wii IPC, Starlet memory bus, and the relevant device. The next test suites should use explicit stimulus/response cases for IPC flag acknowledgements, shared-memory cache visibility, DMA, IRQ ordering, and individual devices. PPC homebrew cannot inspect every Starlet register while Nintendo IOS is running. A separate Starlet-side probe under MINI/BootMii can test raw hardware registers, but its results must be labeled as MINI-mode tests.