aboutsummaryrefslogtreecommitdiff
path: root/src/core/hle/kernel
Commit message (Collapse)AuthorAgeFilesLines
* kernel: define thread-local state out of line for LTOsnowstormxd33 hours1-1/+3
| | | | | | Give the implementation-local TLS object one definition so ThinLTO retains its dynamic initializer. The state and its lifetime are unchanged. Assisted by Codex.
* core: skip empty bitmap ranges during cache and scheduler traversalsnowstormxd33 hours1-7/+13
| | | | | | Adapted bitmap scans from sylvieistaken/selevet-eglantine performance build 4. Keep the wide-priority fallback and fix the first live slot after empty bitmap words. Include randomized lifecycle and ordering checks. Assisted by Codex.
* Merge remote-tracking branch 'origin/fix/memory-skip-zero-clears' into ↵Takoroka2 days3-5/+30
|\ | | | | | | | | | | | | test/linux-all-prs-plus # Conflicts: # src/common/host_memory.h
| * memory: skip clearing guest memory that is still zeroTakoroka5 days3-5/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The kernel clears every page it hands out, and the backing memory is a page-file section the host only gives RAM to once a page is touched. So the clears themselves made every page of a game's heap resident: Mario Kart World (12 GB layout) had a 12.5 GB working set 20 s after boot. HostMemory keeps two bits per 64 KiB of backing: used (handed out by the kernel at least once) and dirty (may hold data). Pages returned to the kernel mark their granules dirty, and a zero clear only touches dirty granules; a granule cleared in full is clean again. A new kernel on the same memory marks everything a previous one used dirty, so leaked processes can't leak data into the next game. KMemoryManager's optimized-process fill and KSharedMemory's clear go through the same path. Mario Kart World, title screen and attract demo, 180 s: working set 20 s in 4.7-6.4 GB instead of 12.5 GB, peak 14-17.6 GB instead of 20.1 GB.
| * kernel: clear the fastmem arena when the application process is closedTakoroka5 days1-0/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Loading a Switch 2 game after another one in the same window hung or crashed it at boot. The first game's process still had 55-60 references at kernel shutdown, so it was never finalized and its memory stayed mapped in the fastmem arena. The next game's mappings at the same addresses then failed ("Failed to split placeholder" / "Failed to map placeholder"), and it ran on the first game's memory: Mario Kart World loaded after another Switch 2 game jumped to a garbage address from rtld, or hung. Detach the closed process from the arena (a late finalize must not unmap the next game's memory), unmap the whole arena, and log when the process was still referenced.
* | Merge remote-tracking branch 'origin/fix/nx2-svc-trace-wait-names' into ↵Takoroka2 days1-0/+17
|\ \ | | | | | | | | | test/linux-all-prs
| * | svc: name the handles a traced WaitSynchronization waits onTakoroka5 days1-0/+17
| | | | | | | | | | | | | | | | | | With EDEN_NX2_SVC_TRACE, WaitSynchronization now logs its handles and, for events services created, the names they gave them (a title that never draws usually polls one: Minecraft waits on AM's message event).
* | | Merge remote-tracking branch 'origin/fix/nx2-graphics-pool-2gib' into ↵Takoroka2 days1-1/+4
|\ \ \ | | | | | | | | | | | | test/linux-all-prs
| * | | nx2: shrink the graphics server pool to 2 GiBTakoroka4 days1-1/+4
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The 12 GB layout added 8 GiB of DRAM for memory the Switch 2 graphics server keeps, and the whole emulated DRAM is committed at boot, so Switch 2 games needed 20 GB of free commit ("Failed to allocate 20480 MiB of backing memory" on PCs with 16 GB). With GPU-only regions backed as they are written and sparse regions taking tiles from the game's memory, Mario Kart World keeps ~1.1 GiB of the pool (texture pools it fills at boot, flat afterwards) and Splatoon Raiders none. 2 GiB leaves room and brings the commit to 14 GB. A title that runs the pool dry loses GPU writes into its unbacked blocks and logs it once.
* / / boot Pokopia past audio init (Switch 2 heap limits, aud:u 1, stpl:u) (#77)Alex4 days2-2/+11
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * game_list: don't free the worker while it is processing events OnPopulatingCompleted runs a nested event loop from inside GameListWorker::ProcessEvents. If the directory watcher fires there, the repopulate destroys the worker while ProcessEvents is still on the stack and the next lock hits a freed mutex. Stop the worker synchronously but free it with deleteLater, and stop ProcessEvents once it has been replaced. Assisted-by: Claude Opus 5.5 (code changes, debugging and commit message) * Fix Switch 2 heap limits and game list reloads during emulation - SetHeapSize rejected heaps of 8 GiB or more (Switch 1's MainMemorySizeMax), so Switch 2 titles that size their heap from the 12 GiB layout (Pokopia asks for 9.5 GiB) got ResultInvalidSize and aborted with 2001-0101. Allow up to the memory the active layout provides. - Grow the 39-bit heap region from 8 to 16 GiB so such a heap fits. - Skip watcher-driven game list reloads while a game runs: Repopulate calls CreateFactories, which replaces content providers the running game reads (segfault in ContentProviderUnion::GetEntry). Stopping emulation already repopulates the list. Assisted-by: Claude Opus 5.5 (code changes, debugging and commit message) * nx2: answer aud:u 1 with an IAudioOutManager nn::audio::OpenAudioOut gets its manager from aud:u command 1 and calls OpenAudioOut through slot 1 of the returned object. The auto stub returned no object, so Pokopia jumped through a null vtable 5 s into boot and never got past its first frame. Assisted-by: Claude Opus 5.5 (code changes, debugging and commit message) * nx2: add a stpl:u (stream play) stub with a user service nn::streamplay::detail::GetUserService opens a session with stpl:u 0 and attaches a system event to the handle command 300 returns. The generic missing-service stub returned no session, so Pokopia's first nn::streamplay call jumped through null right after audio setup. Assisted-by: Claude Opus 5.5 (code changes, debugging and commit message)
* / kernel: clear the fastmem arena when the application process is closedTakoroka5 days1-0/+14
|/ | | | | | | | | | | | | | | Loading a Switch 2 game after another one in the same window hung or crashed it at boot. The first game's process still had 55-60 references at kernel shutdown, so it was never finalized and its memory stayed mapped in the fastmem arena. The next game's mappings at the same addresses then failed ("Failed to split placeholder" / "Failed to map placeholder"), and it ran on the first game's memory: Mario Kart World loaded after another Switch 2 game jumped to a garbage address from rtld, or hung. Detach the closed process from the arena (a late finalize must not unmap the next game's memory), unmap the whole arena, and log when the process was still referenced.
* core: use the 12 GiB layout and auto-stub IPC for Switch 2 titlesTakoroka6 days2-0/+6
| | | | | | | | | Switch 2 titles size their heap from the total memory and stop at the first unimplemented command, so they only booted with the 12 GiB layout and EDEN_NX2_AUTO_STUB set by hand. Detect them from main.npdm before the kernel starts and apply the layout as a per-game value (the configured layout comes back once the game is closed), and auto-stub unknown commands from Switch 2 processes.
* kernel: spin briefly before sleeping on a contended KSpinLockTakoroka6 days2-5/+53
| | | | | | | | | The scheduler lock is taken by every emulated core thousands of times a frame (title 1's job system: WaitForAddress / SignalToAddress / yield) and held for microseconds. As a std::mutex, a contended Lock put the host thread to sleep at once. Now a three-state futex lock: one atomic op uncontended, ~128 pause spins when contended, then std::atomic::wait. Time blocked in Lock fell ~20-25% on title 1's cores.
* Performance diagnostics and small wins for title 1Takoroka6 days3-7/+37
| | | | | | | | | | | | | | | | | | - eden-cli: SDL called SDL_AppIterate back to back, keeping a host core at 100% polling input; run the main callbacks at 240 Hz. - EDEN_NX2_IDLE_SPIN_US: optional spin before an idle core blocks (measured: no gain on title 1, so off by default). - EDEN_NX2_SVC_TRACE=<first>:<last>: trace SVCs (with thread ids) for a range of presents only. - MME DMA reads flush GPU-written memory first (never triggered on title 1, kept for correctness); render-enable override histogram instead of the first-400 log. Measured on title 1's title screen (RTX 4070 Laptop): GPU ~20% busy, the six emulated cores ~0.9 host cores in total, Eden's GPU thread 45-70% busy and largely waiting: on host fences for semaphore acquires (GPU accuracy High delays every release to host completion), on ASTC upload Finish(), and in a 1 ms poll sleep. gpu_accuracy=Low: ~12.5 -> ~16 fps.
* Switch 2: back GPU-only regions outside the application poolTakoroka7 days2-1/+5
| | | | | | | | | nx2:gpu 214 regions are memory the graphics server keeps itself, but Eden took their pages from the application pool: title 4's six 300 MB regions left it 1.8 GB less than the 9.55 GiB the kernel reports, all of which its heap and VAMM plan to use. Add 8 GiB of DRAM to the 12 GB layout for the non-secure system pool and back the regions from there; the device memory tracker now covers 32 GiB of physical memory.
* kernel: EDEN_NX2_MEM_TRACE logs heap, physical memory and memory info requestsTakoroka7 days2-4/+48
|
* core: emulate six CPU coresTakoroka7 days3-4/+7
| | | | | | | Switch 2 applications are given cores 0..5 (title 4's npdm) and start a job worker per core. With four emulated cores, 4 and 5 were folded onto 0 and 1, so two cores ran two workers each. Switch 1 titles keep using cores 0..3; core 3 stays the shared system core.
* Switch 2: native memory/images, GPU-accessible attribute, TSG subcontexts, ↵Takoroka7 days4-8/+33
| | | | | | | | | | | | | syncpoint shim - gsv 111/112/114/423/429/430/314/315/435 track native memory and images with real ids (meanings from changes.patch); 1510/435 use its block-linear layout. - svc 0x80 sets a real GpuAccessible (0x20) memory attribute (from changes.patch). - Characteristics report TSG subcontexts (flag 22, 64 per TSG at 0xb4); NvRm otherwise allows one subcontext and a second NVN queue fails its setup. - Syncpoint shim: flag 26, address-space ioctl 0xB, and GPU reads of the shim page return guest syncpoint values (scheme from changes.patch). - EDEN_NX2_IPC_TRACE also logs TIPC commands; gdbrsp.py watch/mem improvements.
* Switch 2: aud:u audio, REv revision tag, job-slot events, open-file limitTakoroka7 days1-1/+1
| | | | | | | | | | | - aud:u (nn::audio::CreateUserClientSessionByHipc) command 2 returns Eden's IAudioRendererManager; the renderer accepts Switch 2's 'REv?' update tag by comparing revision numbers. - nx2:gpu sub 211 signals the job slot in request word 17, not word 2; mapping jobs no longer stall once the SDK rotates slots. - eden-cli raises the CRT open-file limit (_setmaxstdio(8192)) like the Qt frontend, so loose RomFS folders don't run out of handles. - Per-mapping GPU logs moved to Debug.
* Switch 2: window image sizes, queue semaphores, built-in fonts, memory budgetTakoroka7 days1-0/+7
| | | | | | | | | | | | - gsv 1510 CalculateRequirements: block-linear size/alignment for window images. - nvhost-gpu: Switch 2 channel event 7 is a real (unsignalled) event. - Puller mirrors NVN2 queue semaphore releases into the page the CPU and GPU wait on (the first two-page nx2:gpu region); EDEN_NX2_METHOD_TRACE logs methods. - pl:u 2000/2010 GetBuiltInFontSharedMemory/GetBuiltInFontData serve plain TTF copies of the shared fonts. - Switch 2 processes count the alias region in their max memory, so the game's nninitStartup heap (total - 6.3 GiB) has room for its sound heap. - gdbrsp.py: interrupt, threads, selthread, hits, continue_async, sleep.
* Switch 2 GPU memory: svc 0x80, gpu sub-session jobs, VM range, SM 0x808Takoroka7 days1-1/+8
| | | | | | | | | | | | | - svc 0x80 (address, size, mask 0x20, attr 0x20) marks memory GPU accessible for nn::gpu::sdk::CreateGpuAccessibleMemory; accept it. - gpu 22's sub-session is served by the gpu object; sub 101 registers memory, sub 211 submits a job whose id event is signalled at once. - gpu 203 reports [0x8000000, 0xC000000000) as the in-process VirtualMachine range that serves AllocSpace (NVN reserves fixed VA at 0x8000000 up to 512 GiB). - Report SM 0x808: NVN2's engine class table is only returned for it. With this NVN device init allocates its GPU memory and opens /dev/nvhost-tsg-gpu.
* kernel: stub Switch 2 svcGetInfo 31/32 (remote memory)Takoroka7 days2-0/+15
| | | | | | nn::os::GetRemoteMemoryUsage returns {id 31, id 32}; nn::gsv and nn::nvsrv BootWithRemoteMemory use it while booting the graphics system. Return 0 for both for now (logged).
* kernel: optional SVC trace (EDEN_NX2_SVC_TRACE=1)Takoroka7 days1-0/+11
|
* kernel: fold Switch 2 virtual cores 4/5 onto emulated coresTakoroka7 days1-0/+17
| | | | | | | Switch 2 titles get core mask 0x3f and nn::oe creates a thread on core 5. Eden emulates four cores, so fold virtual cores 4..7 onto 0..3 in CreateThread and SetThreadCoreMask (after validating against the real process mask).
* kernel: svcGetInfo 33 is a page granule; give 29/30 a real regionTakoroka7 days2-14/+18
| | | | | | | The SDK checks module address/size against (id33 - 1) when initialising DSOs, so id 33 is a page granule: return 0x1000. Report ids 29/30 as the upper half of the alias region (a plausible VAMM address-space region, backed through MapPhysicalMemory) instead of an empty region.
* kernel: stub Switch 2 svcGetInfo ids 29, 30 and 33Takoroka8 days2-0/+26
| | | | | | | | nnosInitialize queries ids 29/30 between the alias (2/3) and ASLR (12/13) regions and aborts if they fail; report an empty region after the alias region. VammManager::Initialize (enabled when the system resource size is non-zero) queries id 33 and passes it to MapPhysicalMemory as a size, so return 2 MiB. Both are logged as stubs; the real meanings are unknown.
* [k_scheduler] fix for libc++ that lazily initializes mutexes (#4447)lizzie2026-09-171-0/+8
| | | | | | | | | | | | | | | | `__m_` is nullptr when `unlock();` is called, so `try_lock();` will force materialization of the backing mutex. Signed-off-by: lizzie <lizzie@eden-emu.dev> - [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions). - [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md) - [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability. ------------------- Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4447 Reviewed-by: CamilleLaVey <camillelavey99@gmail.com> Reviewed-by: MaranBr <maranbr@eden-emu.dev>
* [common] Replace `Common::SpinLock` with `std::mutex` (#4436)lizzie2026-09-162-6/+4
| | | | | | | | | | | | | | | | | | `std::mutex` can be better than the spin-lock specially since we don't waste CPU cycles for no reason. Test less stuttering/heat consumption. Signed-off-by: lizzie <lizzie@eden-emu.dev> - [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions). - [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md) - [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability. ------------------- Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4436 Reviewed-by: CamilleLaVey <camillelavey99@gmail.com> Reviewed-by: MaranBr <maranbr@eden-emu.dev>
* [hle] Firmware 23.0.0 (#4390)lizzie2026-09-102-1/+13
| | | | | | | | | | | | | | | | | | Preparing when something inevitably requires *at least* this reporting of version/etc. Authored-by: @Maufeat Signed-off-by: lizzie <lizzie@eden-emu.dev> - [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions). - [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md) - [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability. ------------------- Co-authored-by: Maufeat <sahyno1996@gmail.com> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4390 Reviewed-by: Maufeat <sahyno1996@gmail.com> Reviewed-by: MaranBr <maranbr@eden-emu.dev>
* [common/core/dynarmic] Optimize page table allocations (#4219)Exverge2026-09-092-41/+82
| | | | | | | | | | | | | | Reduces the page entries from 32 bytes to 8 and rewrites `VirtualBuffer` to be more efficient in memory usage and specifically for large zero regions. The page table will now only reserve 1GiB instead of 4GiB and of this memory it should only use at most ~8MiB. This PR has the side effect of using Eden on Windows on low memory systems much more plausible since it would previously require ~10GiB of committable memory at front (despite using ~5-6 at most, inadvertently stalling other processes) where as now it should only require around the amount that it'll actually use. Co-authored-by: Lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4219 Reviewed-by: Maufeat <sahyno1996@gmail.com> Reviewed-by: lizzie <lizzie@eden-emu.dev> Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
* [svc] don't truncate 64-bit SVC args on trace logs (#4374)lizzie2026-09-091-6/+7
| | | | | | | | | | | | | | | | Small inconvenience with args Signed-off-by: lizzie <lizzie@eden-emu.dev> - [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions). - [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md) - [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability. ------------------- Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4374 Reviewed-by: CamilleLaVey <camillelavey99@gmail.com> Reviewed-by: Maufeat <sahyno1996@gmail.com>
* [hle] VirtualBoy classics fixes, QLaunch IPC fixes, implement extra ams ↵lizzie2026-09-081-71/+57
| | | | | | | | | | | | | | | | | | | | | | | | | | SVCInfo (#4343) Signed-off-by: lizzie <lizzie@eden-emu.dev> - [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions). - [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md) - [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability. ------------------- `OpenSystemApplicationProxy` `OpenSystemApplicationProxy` ALSO yes those cmds DO NOT take an attribute Implemented SVC infos to match Atmosphere's values Implement more stub I2C session cmds stub CMD2103 for rhythm groove better error handling on svc get info to match ams (see ams svc info) Virtual Boy classic fix adept from https://git.ryujinx.app/projects/Kenji-NX/commit/2288084b531b185f5840a696b23265014f07e2f2 by @Mythrax acc:u1 was missing the *Deprecated cmd Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4343 Reviewed-by: CamilleLaVey <camillelavey99@gmail.com> Reviewed-by: Maufeat <sahyno1996@gmail.com>
* [cmake] Fix some macOS compilation errors (#4350)lizzie2026-09-051-0/+1
| | | | | | | | | | | | | | | | | | | | Don't compile GLSL/GLASM backends without OpenGL enabled. These codepaths are unused on non-OpenGL platforms. Fixes other miscellaneous errors that pop up on Clang 23 as well. Signed-off-by: Lizzie lizzie@eden-emu.dev Signed-off-by: crueter crueter@eden-emu.dev - [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions). - [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md) - [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability. ------------------- Co-authored-by: crueter <crueter@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4350 Reviewed-by: crueter <crueter@eden-emu.dev> Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
* [gdb] fix conn state to use same pipe (instead of a copy) (#4339)xbzk2026-09-021-0/+3
| | | | | | | | | | | | | | | | | - [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions). - [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md) - [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability. ------------------- I was trying to use GDB stub to investigate MHR and it was not connecting. Error was suggesting it was not available for connection although i saw it booting on logs. Debugged and noticed signal_pipe_ was not the correct one, and followed the example of client_socket_. GDB stub is now working, on windows, at least. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4339 Reviewed-by: Lizzie and Samuel <lizzie@eden-emu.dev> Reviewed-by: MaranBr <maranbr@eden-emu.dev>
* [common] Switch to boost::unordered_flat containers (#4326)crueter2026-08-313-6/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Replaces all instances of ankerl's unordered map/set with boost's `unordered_flat_*` classes. This uses std::hash since boost::hash is actually a lot slower. Also adds an abstraction layer in `Common` so future changes are quicker and easier. Other implementation details: - ankerl provided hash specializations for tuple and pair, so those were ported here - std::erase_if doesn't work on boost, so just used the ADL'd erase_if This should be about equal or superior performance as unordered_dense for everything except iteration. Signed-off-by: crueter <crueter@eden-emu.dev> - [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions). - [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md) - [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability. ------------------- Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4326 Reviewed-by: Lizzie and Samuel <lizzie@eden-emu.dev> Reviewed-by: MaranBr <maranbr@eden-emu.dev>
* [hle/kernel] remove flusher thread from OutputDebugString (#4291)lizzie2026-08-301-47/+3
| | | | | | | | | | | | | | | | | | | | | | | Signed-off-by: lizzie <lizzie@eden-emu.dev> - [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions). - [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md) - [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability. ------------------- Unneeded abstraction? either way it seems this thread is not required anyone thinking otherwise feel free to lmk directly contradicts with #4290 and #3744 Remember that messages will be displayed out of order this can make actual debugging much harder I'm afraid Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4291 Reviewed-by: MaranBr <maranbr@eden-emu.dev> Reviewed-by: crueter <crueter@eden-emu.dev>
* [kernel, service] Return ResultSessionClosed when a session is closed (#4318)Maufeat2026-08-302-5/+5
| | | | | | | | | | | | | | - [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions). - [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md) - [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability. ------------------- I tried to run a homebrew game which tried to reply to a closed service. nnSdk expected ResultSessionClosed, we replied with ResultSuccess which mostly works but some have stricter handling and would terminate with abort. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4318 Reviewed-by: Lizzie and Samuel <lizzie@eden-emu.dev> Reviewed-by: crueter <crueter@eden-emu.dev>
* [core, hle, video_core, memory] Improve multi-process, display layers, ↵Maufeat2026-08-292-6/+26
| | | | | | | | | | | | | | | | | | | | | dynamic shader cache and rework overlay (#4238) - [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions). - [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md) - [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability. ------------------- - Dynamic shader cache reloading capability for qlaunch - Multi-process improvements (thanks to @frank1734), instead of just using the main application we now respect caller process (also did it for HID devices while I was at it) - Layer stack masks & shared buffer screenshot for video core, added different masks (screenshot, recording, etc.) this was discovered as an issue due to how in qlaunch the transition was not right between applications. May not be perfect but also fixes screenshots while using qlaunch - Reworked overlay display management (input and visibility) - instead of random numbers as I've previously did, I decided to add an AppletZIndex enum for better readability. Also split capability of input by touch and gamepad. - etc. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4238 Reviewed-by: Samuel <lizzie@eden-emu.dev> Reviewed-by: CamilleLaVey <camillelavey99@gmail.com> Reviewed-by: MaranBr <maranbr@eden-emu.dev>
* [core/hle/kernel/svc] demote ResetSignal log Debug->Trace (#4161)lizzie2026-08-091-1/+1
| | | | | | | | | | | I don't see why it's LOG_DEBUG if WaitSynchronization is LOG_TRACE, leaves incomplete data may as well bundle it to trace with the others? :) Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4161 Reviewed-by: CamilleLaVey <camillelavey99@gmail.com> Reviewed-by: Maufeat <sahyno1996@gmail.com>
* [fmt] use {#:x} instead of 0x{:#x} (#4170)lizzie2026-07-2516-96/+97
| | | | | | | | | | continuation of #309 but applying to even more files than before :) also makes them lowercase because `0xfafafa` is better as `0XFAFAFA` Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4170 Reviewed-by: CamilleLaVey <camillelavey99@gmail.com> Reviewed-by: Maufeat <sahyno1996@gmail.com>
* [core/hle/kernel/svc] add missing CanContain check for ↵lizzie2026-07-073-17/+18
| | | | | | | | | | | | | {Un}MapProcessCodeMemory, remove 4KB align func (#4164) does what it says, adds a missing check for that specific SVC also removes that 4kb "helper" function which is just a fancy "IsAligned" Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4164 Reviewed-by: MaranBr <maranbr@eden-emu.dev> Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
* [*, docs] remove UTF8 and make docs ASCII only (#4166)lizzie2026-07-071-1/+1
| | | | | | | | | | except for the AI policy doc which uses output for demonstrative purposes Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4166 Reviewed-by: MaranBr <maranbr@eden-emu.dev> Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
* [video_core, hle] remove redundant parent references in system structs (#3908)lizzie2026-06-2396-1940/+1973
| | | | | | | | | | reworked a bit to remove references of parent objects and instead pass as arguments to methods to prevent useless reloads Signed-off-by: lizzie <lizzie@eden-emu.dev> Co-authored-by: maufeat <sahyno1996@gmail.com> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3908 Reviewed-by: Maufeat <sahyno1996@gmail.com> Reviewed-by: crueter <crueter@eden-emu.dev>
* [hle] support passing arguments to homebrew applications (#4013)xbzk2026-06-152-3/+37
| | | | | | | | | | | | | | | | | | | Homebrew (.NRO) program args support Adds a 'program_args' setting and delivers it to NRO homebrews via libnx's homebrew ABI. NROs previously had no way to receive CLI flags (e.g. NZ:P's -noglsl). Setting: program_args, Category::System, startup-only. Surfaced in Qt + Android Debug sections. NRO loader: builds a 4-entry 'ConfigEntry' table + argv at the data segment tail; prepends 'homebrew ' so user args land at argv[1]; scans for 'svc #7' to use as LR. Drops the stale NSO-style argdata append. KProcess: stores loader-provided guest addresses; 'Run' switches to the homebrew entry (x0=config_ptr, x1=-1, lr=svc7) and patches the real MainThreadHandle into the ConfigEntry slot. Legacy NSO path unchanged. Tested on NZP — args reach 'argv' correctly. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4013 Reviewed-by: Lizzie <lizzie@eden-emu.dev> Reviewed-by: MaranBr <maranbr@eden-emu.dev>
* [hle] Fixes for nxident, nxmp and nxplay, remove hbl.nsp workarounds (#3996)lizzie2026-06-123-13/+6
| | | | | | | | | | | | | | | adds `gpio` and `i2c` services implements `IApplicationFunctions::SetMediaPlaybackStateForApplicatio` stubs `IBtmSystemCore::GetDiscoveredAudioDevice` implements `nvhost_ctrl_gpu::PmuGetGpuLoad` IOCTL (0x20) implements `PSM::GetBatteryAgePercentage`, `PSM::GetBatteryVoltageState` and `PSM::GetBatteryChargeInfoFields` implements `ISystemSettingsServer::GetConsoleInformationUploadFlag`, `ISystemSettingsServer::SetConsoleInformationUploadFlag`, `ISystemSettingsServer::GetAutomaticApplicationDownloadFlag`, `ISystemSettingsServer::SetAutomaticApplicationDownloadFlag`, `&ISystemSettingsServer::GetUsb30EnableFlag`, `ISystemSettingsServer::SetUsb30EnableFlag` removes `hbl.nsp` specific workarounds Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3996 Reviewed-by: MaranBr <maranbr@eden-emu.dev> Reviewed-by: crueter <crueter@eden-emu.dev>
* [svc] Stub BreakDebugProcess (#4044)crueter2026-06-021-2/+5
| | | | | | | Signed-off-by: crueter <crueter@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4044 Reviewed-by: MaranBr <maranbr@eden-emu.dev> Reviewed-by: Lizzie <lizzie@eden-emu.dev>
* [*] fix missing '#pragma once' on header files (#4014)lizzie2026-05-261-0/+5
| | | | | | | | | | | | `find src -type f -name '*.h' -not -exec grep -q "#pragma once" {} \; -print` - ignore qt with header guards already - smaa too Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4014 Reviewed-by: CamilleLaVey <camillelavey99@gmail.com> Reviewed-by: crueter <crueter@eden-emu.dev>
* [hle] make HBLoader work, add -hlaunch option (#3981)lizzie2026-05-191-1/+5
| | | | | | | | | | | | | | | hbloader is required to launch a bunch of shit (particularly hbmenu) however due to some restrictive metadata validation, it doesn't get recognized as an NSP file programs like hbmenu require hbloader (since it feeds them data like ConfigEntries and whatnot), launching hbmenu as-is standalone will result in a launchInit() error adds an option to launch hbmenu via command line Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3981 Reviewed-by: Maufeat <sahyno1996@gmail.com> Reviewed-by: crueter <crueter@eden-emu.dev>
* [core/hle/kernel] Remove redundant TLS load/stores, reuse computed ↵lizzie2026-05-091-10/+9
| | | | | | | | | | | | | | segment+address instead (#3932) While originally for MSVC, this also should help clang/gcc not die trying to make codegen for the load/store of fields for the tls_data should help to reuse computed values instead of recomputing shit for no reason Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3932 Reviewed-by: MaranBr <maranbr@eden-emu.dev> Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
* [kernel, hle] Initial 22.0.0 kernel changes and cmd stubs (#3761)maufeat2026-05-057-23/+53
| | | | | | | | | | | | | - KProcess::Run() and CreateThread() SVC now write the current thread handle to TLS+0x110 - KPageTableBase::LockForMapDeviceAddressSpace now checks for a new KPageTableBase boolean, m_allowed_exec_device_mapping - Stub `am` + `acc` + `settings` cmd module that needs to work for qlaunch Thanks to: @alula and @yellows8 Source for changes: https://github.com/Atmosphere-NX/Atmosphere/pull/2744, https://switchbrew.org/, https://yls8.mtheall.com/ Co-authored-by: PavelBARABANOV <pavelbarabanov94@gmail.com> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3761 Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>