This commit introduces multiple improvements to IPC handling and system management services, enhancing game compatibility and emulator stability. --- 1. Fully Implemented QueryPointerBufferSize Service: - Exposes the per-process IPC pointer buffer size through `QueryPointerBufferSize` instead of returning stubbed values. - Added `m_pointer_buffer_size` field to `KProcess`, initialized with a safe default (0x8000). - Introduced getter and setter methods (`GetPointerBufferSize()` / `SetPointerBufferSize()`). - Registered new handler in `sm_controller` for handling QueryPointerBufferSize requests. - Ensures accurate buffer size reporting for games relying on this service. --- 2. Automatic Pointer Buffer Sizing Per-Game: - Automatically determines heap size by parsing `main.npdm` from the game’s ExeFS: - Heap size > 1 GiB → pointer buffer size set to `0x10000`. - Heap size > 512 MiB → pointer buffer size set to `0xC000`. - Otherwise, defaults to `0x8000`. - Gracefully handles missing or malformed `main.npdm` by falling back to default settings. - Automatically configures pointer buffer size during `AppLoader_NCA::Load`. - Added logging for heap size detection and buffer size configuration for easier debugging. --- 3. SM Service Improvements: - Added full implementation of `QueryPointerBufferSize` within the SM service framework. - Cleaned up stubbed methods and ensured correct domain handling. - Registered new service commands (e.g., `SetPointerBufferSize` and `QueryPointerBufferSize`) in `sm_controller`. - Improved session handling with proper conversion to domain objects where necessary. --- Benefits: - Greatly improves compatibility with games that require larger IPC pointer buffers - Eliminates the need for manual per-game pointer buffer overrides. - More accurate emulation of Switch system services, improving stability for both commercial titles and homebrew. - Provides cleaner logging for easier debugging and maintenance. - Future-proofs IPC handling for upcoming titles with higher memory demands. --- Additional Notes: - Default pointer buffer size remains 0x8000 for smaller titles or if heap size cannot be determined. - Falls back to safe defaults without affecting overall emulator performance. - All new service calls properly registered and integrated without breaking existing functionality. |
||
---|---|---|
.ci | ||
.github | ||
.reuse | ||
CMakeModules | ||
dist | ||
externals | ||
hooks | ||
LICENSES | ||
src | ||
tools | ||
.codespellrc | ||
.git-blame-ignore-revs | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
CMakeLists.txt | ||
CONTRIBUTING.md | ||
Doxyfile | ||
LICENSE.txt | ||
README.md | ||
vcpkg.json |
Eden
Eden is the world's most popular open-source Nintendo Switch emulator, forked from the Yuzu emulator — started by former Citron developer Camille LaVey and the Eden team.
It is written in C++ with portability in mind, and we actively maintain builds for Windows, Linux and Android.
Discord is not yet public.
Compatibility | Development | Building | Download | Support | License
Compatibility
The emulator is capable of running most commercial games at full speed, provided you meet the necessary hardware requirements.
A list of supported games will be available in future. Please be patient.
Check out our website for the latest news on exciting features, monthly progress reports, and more!
Development
Most of the development happens on our Git server. It is also where our central repository is hosted. For development discussions, please wait to join us on Discord once it is public.
If you would like to contribute, we are open to new developers and pull requests. Please ensure that your work is of a high standard and properly documented. You can also contact any of the developers on Discord to learn more about the current state of the emulator.
Building
- Windows: Windows Building Guide
- Linux: Linux Building Guide
- Android: Android Building Guide
Download
You will be able to download the latest releases from here once public.
Support
If you enjoy the project and would like to support us financially, please check out Camille's donations page!
Donations are not available yet.
Any donations received will go towards things such as:
- Switch consoles to explore and reverse-engineer the hardware
- Switch games for testing, reverse-engineering, and implementing new features
- Web hosting and infrastructure setup
- Software licences (e.g. Visual Studio, IDA Pro, etc.)
- Additional hardware (e.g. GPUs as needed to improve rendering support, other peripherals to add support for, etc.)
If you would prefer to support us in a different way, please join our Discord, once public, and talk to Camille.
License
Eden is licensed under the GPLv3 (or any later version). Refer to the LICENSE.txt file.