mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-01 14:58:14 +00:00
The scratchpad (PSP's repurposed-cache scratch RAM, 0x00010000+) was only mirrored for user-mode access (cached 0x00010000, uncached 0x40010000) - kernel-mode code sees it at 0x80010000/0xC0010000 (the kernel bit, 0x80000000, is independent of and combinable with the uncached bit, 0x40000000 - not "the uncached bit" as an earlier doc note in this branch mistakenly called it). Missing entirely from MemMap.cpp's views[] table, causing a real SIGSEGV the first time kernel-mode code (flash0:/reboot.bin) touched it. Adding the two missing views wasn't sufficient: the scratchpad range check is duplicated eight times (IsValidAddress/IsValid2AlignedAddress/ IsValid4AlignedAddress/MaxSizeAtAddress in MemMap.h, and four more in MemMapFunctions.cpp), and all eight used a mask (0xBFFFC000) that cleared the uncached bit but kept the kernel bit, rejecting 0x80010000 as invalid before ever reaching the now-mapped memory. Fixed all eight to 0x3FFFC000, matching Memory::MEMVIEW32_MASK (which the JIT backends already used correctly for the equivalent runtime check). Co-Authored-By: Claude Sonnet 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01GZq8ZtJmFY7bkX5FVkr3P9