Skip to content

fsp: throttle Switch 2 storage reads at 100 MB/s instead of not at all - #816

Open
rdenno wants to merge 1 commit into
Eglantine-Community:nx2-experimentalfrom
rdenno:fix/794-hyrule-boot
Open

rdenno wants to merge 1 commit into
Eglantine-Community:nx2-experimentalfrom
rdenno:fix/794-hyrule-boot

Conversation

@rdenno

@rdenno rdenno commented Nov 9, 2026

Copy link
Copy Markdown
Collaborator

Problem

Since #794, Hyrule Warriors: Age of Imprisonment no longer boots. About 8 s in, it starts writing through null pointers (Unmapped Write32/64 @ 0x0–0x34). Then come SparseLargeVector faults and endless Unmapped Read64 @ 0xfffffffffffffbb8, and the game sits on its first loading screen forever.

Cause

#794 removed the storage read throttle for Switch 2 titles (fs_i_storage.cpp), so every read completes with no delay at all. Hyrule doesn't survive that.

How it was narrowed down, using eden-cli boots of a new game:

Build Result
df2989c794 (just before #794) boots
f677ed8323 (#794 merged) fails, 6/6
f677ed8323 with #794 reverted boots
revert + #794's CPU-side files re-applied (Dynarmic, JIT glue, timing, thread placement, settings) boots
f677ed8323 + EDEN_NX2_PERF_OPT=0, EDEN_NX2_PRESENT_QUEUE=0 or EDEN_NX2_INLINE_CNTPCT=0 fails
f677ed8323 + EDEN_NX2_FS_READ_MBPS=40, 100 or 200 boots
f677ed8323 + EDEN_NX2_FS_READ_MBPS=300 or 400 fails

Fix

Switch 2 titles get a 100 MB/s default instead of no throttle. EDEN_NX2_FS_READ_MBPS still overrides it, and 0 still turns it off.

The 100 MB/s value keeps what #794 wanted for Ocarina of Time's opening video. Late frames the video decoder dropped over 90 s of the title movie:

Read speed Late-dropped frames
no throttle 262
100 MB/s (this PR) 284
40 MB/s (old default) 376

Testing

  • Hyrule with this commit: boots 2/2 at the new default. With the env override on the same code: 3/3 at 100 MB/s and 3/3 at 200 MB/s. Two full runs at 200 MB/s through the first fight.
  • OoT: the title movie runs at 100 MB/s, with the numbers above.
  • Only tested on Windows, RTX 5060 Ti, local MSVC CLI build.

Assisted By: Claude Opus 5.5

Since Eglantine-Community#794 Switch 2 titles read storage with no throttle, and Hyrule Warriors: Age of
Imprisonment no longer boots: ~8 s in it follows null and wild pointers (Unmapped Write32/64
@ 0x0-0x34, then SparseLargeVector faults and endless Unmapped Read64 @ 0xff..fbb8) and stays
on its first loading screen. 6/6 hidden eden-cli boots failed on f677ed8, and
EDEN_NX2_FS_READ_MBPS restores it: 100 and 200 MB/s boot (9/9), 300 and 400 MB/s do not.
Reverting all of Eglantine-Community#794 fixes it too; its CPU-side changes alone (Dynarmic, JIT glue, timing,
thread placement, settings) and EDEN_NX2_PERF_OPT=0 / EDEN_NX2_PRESENT_QUEUE=0 /
EDEN_NX2_INLINE_CNTPCT=0 do not matter.

100 MB/s keeps what Eglantine-Community#794 wanted for Ocarina of Time's opening video: over 90 s of the title
movie the decoder dropped 284 late frames at 100 MB/s, 262 with no throttle and 376 at the
old 40 MB/s.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@rdenno rdenno added the priority: high High priority label Nov 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

priority: high High priority

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant