13a8fde3ad
This implements svcMapPhysicalMemory/svcUnmapPhysicalMemory for Yuzu, which can be used to map memory at a desired address by games since 3.0.0. It also properly parses SystemResourceSize from NPDM, and makes information available via svcGetInfo. This is needed for games like Super Smash Bros. and Diablo 3 -- this PR's implementation does not run into the "ASCII reads" issue mentioned in the comments of #2626, which was caused by the following bugs in Yuzu's memory management that this PR also addresses: * Yuzu's memory coalescing does not properly merge blocks. This results in a polluted address space/svcQueryMemory results that would be impossible to replicate on hardware, which can lead to game code making the wrong assumptions about memory layout. * This implements better merging for AllocatedMemoryBlocks. * Yuzu's implementation of svcMirrorMemory unprotected the entire virtual memory range containing the range being mirrored. This could lead to games attempting to map data at that unprotected range/attempting to access that range after yuzu improperly unmapped it. * This PR fixes it by simply calling ReprotectRange instead of Reprotect. |
||
---|---|---|
.. | ||
arm | ||
crypto | ||
file_sys | ||
frontend | ||
gdbstub | ||
hle | ||
loader | ||
tools | ||
CMakeLists.txt | ||
constants.cpp | ||
constants.h | ||
core_cpu.cpp | ||
core_cpu.h | ||
core_timing_util.cpp | ||
core_timing_util.h | ||
core_timing.cpp | ||
core_timing.h | ||
core.cpp | ||
core.h | ||
cpu_core_manager.cpp | ||
cpu_core_manager.h | ||
memory_setup.h | ||
memory.cpp | ||
memory.h | ||
perf_stats.cpp | ||
perf_stats.h | ||
reporter.cpp | ||
reporter.h | ||
settings.cpp | ||
settings.h | ||
telemetry_session.cpp | ||
telemetry_session.h |