IOS LLE: checkpoint NAND conformance and diagnostic tooling

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.
This commit is contained in:
Yaya48 committed 2026-09-23 13:30:17 +02:00
1 parent b931671fde
commit c230971f07
64 files changed
+6488 -238

No files matched your search

+59
View File
@@ -0,0 +1,59 @@
# 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`. This build has not yet been run on a physical Wii.
## 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.