No description
Find a file
JPikachu 8599c47fe0 service: sm/kernel/loader: Implement QueryPointerBufferSize, automatic pointer buffer sizing, and SM service improvements
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.
2025-04-30 06:35:22 +00:00
.ci Dynamic State Fixes (#57) 2025-04-27 17:07:49 -04:00
.github prevent appimage from murdering the runner 2025-04-20 20:40:42 -04:00
.reuse Rename Yuzu logo to Eden 2025-04-13 01:15:36 +01:00
CMakeModules qt: 6.7.3 Implementation 2025-04-04 03:23:31 +02:00
dist Update "yuzu is not affiliated with Nintendo" to "eden is not affiliated with Nintendo" 2025-04-14 14:18:13 -04:00
externals Update Vulkan externals submodules 2025-04-19 15:01:33 -07:00
hooks chore: make yuzu REUSE compliant 2022-07-27 12:53:49 +02:00
LICENSES general: fix trailing whitespace 2024-01-08 09:34:32 -05:00
src service: sm/kernel/loader: Implement QueryPointerBufferSize, automatic pointer buffer sizing, and SM service improvements 2025-04-30 06:35:22 +00:00
tools Removed telemetry and anonymized SCM (git) strings 2025-04-04 03:40:47 +02:00
.codespellrc core: refactor emulated cpu core activation 2023-12-04 10:37:16 -05:00
.git-blame-ignore-revs Skip git blame 2023-11-04 18:26:49 +00:00
.gitattributes chore: make yuzu REUSE compliant 2022-07-27 12:53:49 +02:00
.gitignore android: Initialize defaults for each orientations 2023-06-14 16:35:58 -04:00
.gitmodules switch submodules to our forks 2025-04-11 14:46:05 -04:00
CMakeLists.txt Merge branch 'log-by-line' 2025-04-24 15:58:49 -04:00
CONTRIBUTING.md chore: make yuzu REUSE compliant 2022-07-27 12:53:49 +02:00
Doxyfile chore: make yuzu REUSE compliant 2022-07-27 12:53:49 +02:00
LICENSE.txt chore: make yuzu REUSE compliant 2022-07-27 12:53:49 +02:00
README.md updated build guide links (#60) 2025-04-26 18:32:42 -04:00
vcpkg.json Update fmt to allow for v11 2025-04-10 01:11:22 +02:00


Eden
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

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.