Six Axis/dual Shock 3 support
⚙️ Improvements
RATIO : FULLSCREEN (default)
Wasn't satisfied by AUTO
TMEM_CACHE : ON (default)
Could improve loading time and/or FPS. Let's test it.
Six Axis Support
Sixaxis/DualShock3 (USB cable) support is now wired up, following the same pattern as the existing Wii U GamePad (DRC) integration:
Please try it up and report
CDI File fix
CDI Fix, may help some CDI games to run
👨💻 Developers
Fix null verxexDataFP
Fix null VerxexDataFP call on stale TA data (Rez CDI boot crash)
When vertex-type TA data arrives before any polygon/sprite header has been
processed (e.g., stale/uninitialized RAM decoding as ParaType=7), VerxexDataFP
remains null. The verify() guard is a no-op in this build (DO_VERIFY off), so
the null call goes through uncaught.
Now checks VerxexDataFP before calling it — skips the record instead of
dereferencing null. Real hardware handles this the same way (no active list to
append vertices to), which is likely why other games never hit this — they
don't submit TA data in this order.
Confirmed fix: Rez CDI now renders the SEGA/BIOS logo (previously crashed with
DSI at this point).
Wire up Hollly Soft reset
Wire up Holly soft-reset (SB_SFRES) instead of no-op
Writing 0x7611 to SB_SFRES is a normal part of real BIOS boot (used to
reconfigure video timing before jumping to the game), but was previously
just logged as "not implemented" - the boot code then spins forever
waiting for a reset that never happens (reproduced with Rez, which hits
this before even the BIOS splash screen).
SoftReset_DC() already exists but stops/restarts the whole CPU session,
which can't be reused here: this write happens synchronously from inside
the SH4's own execution, so resetting the CPU/RAM out from under it would
corrupt live state. HollySoftReset() instead mirrors real hardware -
resetting only the Holly-controlled peripherals (PVR/SPG/renderer, AICA,
ARM7) while leaving the executing SH4 and RAM untouched.
Co-Authored-By: Claude Sonnet 5
Fix PPC stuff (wii_driver.cpp)
Fix DoStatic emitting a variable-length patch site
ngen_LinkBlock_Static computes its patch site as LR-12 and overwrites it with
a direct b compiled_target, so DoStatic must emit exactly 3 instructions.
ppc_li is variable length: it collapses to a single addi/addis when the value
fits s16 or its low half is zero (e.g. a block at 0x8C010000). For those
targets the patcher wrote its branch one instruction too early, clobbering
whatever preceded the sequence - in a BET_Cond block end that is the other
exit path's branch.
Emit the addis+ori pair unconditionally so the site is always 12 bytes.
Co-Authored-By: Claude Fable 5
Clean up stale audio comments
Enable SHIL dead-code elimination
🧰 Please update compatibility Guide
Please re-test all games untested since alpha 0.26 (except Windows CE games) and update compatiblity wiki :
https://wiibrew.org/wiki/NullDC4Wii/Compatibility
🎮 Optional Extras
Wii & WiiU Fowarders : see alpha0.51
Wii Forwarder by @Ploggy
Wii U Overclock Forwarder (integrated) by @Zeox-Gamer