81 lines
4.3 KiB
Markdown
81 lines
4.3 KiB
Markdown
# 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:
|
|
|
|
```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`.
|
|
|
|
## Capture
|
|
|
|
1. 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.
|
|
2. Copy `apps/wii-conformance/` to the `apps/` folder on each SD card and launch
|
|
it through the Homebrew Channel. Use the exact same `boot.dol` on both runs.
|
|
Dolphin LLE requires a configured writable virtual SD image.
|
|
3. After the program returns, copy `sd:/wii-conformance.csv` from each SD card
|
|
to separate files such as `wii.csv` and `dolphin.csv`.
|
|
4. 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.
|
|
|
|
## 2026-09-23 IOS58 comparison
|
|
|
|
The same DOL (SHA-256
|
|
`28EB2F51CB12B302D736518232CAB59715877A81CD0AABC1A938EF16CF0ADFC4`)
|
|
ran on a physical Wii and in this fork's Starlet LLE mode under IOS58 revision
|
|
6176. Both captures contain all 1,860 observations. The SD tests in LLE first
|
|
failed during card initialization because Starlet SDHC did not implement CMD6
|
|
(Switch Function). After adding its 64-byte status response, all SD operations
|
|
completed and the CSV closed successfully.
|
|
|
|
The comparison finds 64 differences, all repeats of `es_title_count`: 111 on
|
|
the Wii versus 101 in the Dolphin profile. A read-only walk of the Dolphin raw
|
|
NAND and its journal found exactly 101 installed title TMDs. The remaining
|
|
1,796 observations match. This result covers the tested IOS58 paths only; it
|
|
cannot establish an overall emulator accuracy percentage.
|
|
|
|
Local captures are `captures/wii-ios58-r6176.csv` (SHA-256
|
|
`C08E49B0ADCF1F0EF30FFE16775E3A354D269923028C9B775BBB189E7E2FF3E6`)
|
|
and `captures/dolphin-lle-ios58-r6176.csv` (SHA-256
|
|
`64D2E00EAE67370578BE2A15FC0951E7051E3468252B0D2533F5B968A0E14AD8`).
|