Core changes
- FS: Improve SDMC archive support
Corrects error codes for some cases related to deleting/creating filesystem nodes
Enables more error-returning scenarios that would previously abort emulation
- OS: Remove obsolete IPC workarounds
- ARM: Add meta instruction definition for SWI
- Interpreter: Fix off-by-one-error that caused pages to be mapped incorrectly
This bug caused the page following the given range to be mapped too, possibly overwriting previously existing mappings.
- ARM: Add meta instruction definitions for UXT(A)H and SXT(A)H
- OS: Support IPC translation of zero-length buffers
- Config: Stub-implement blocks 0xc0000 and 0xd0000 in GetConfigInfoBlk2
- FS: Extend SelfNCCH support by ExeFS data
- FS: Stub-implement IsSdmcWritable
- OS: Enable fake NIM module
- Add fake AM module
- GSP: Use client process handles when calling SVCStartInterprocessDMA
Clients may refer to their heap virtual memory when requesting DMAs via GSP shared memory, so using GSP’s own process handle would lead to failed address lookups before.
This also removes the need for an ugly workaround in the implementation of SVCStartInterprocessDMA itself.
- GSP: Implement AcquireRight/ReleaseRight
- IPC: Simplify message dispatch and vastly improve generated error messages on build errors
- FS: Unify ArchiveNonPXI path decoding and implement file/directory deletion
Child classes of ArchiveNonPXI now only interface with “ValidatedHostPath”, which ensures that e.g. recursive directory deletion never touches files outside of the emulator sandbox
- Interpreter: Implement QSUB8 and SSAT
- Interpreter: Use new dispatcher for most common instructions
- ARM: Add meta instruction table
This allows for convenient compile-time generation of fast instruction dispatch tables
- Interpreter: Fix erroneous USAT implementation
Fixes wrong colors in yeti3DS and intro cutscenes in various games
- HID: Set touch coordinates to 0 when the touch screen is not in use
- Fix uninitialized touch state
This affected the read-controls 3ds-example, which claimed the touch screen was being used when it wasn’t
- HID: Fix race condition due to which the InputSource mutex sometimes would be destroyed while still being in use in the emulation thread
GPU core changes
- Vulkan: Do not error out on empty triangle batches
- Software renderer: Support more texture combiner operations
- Software renderer: Implement texture combiner scaling
- Software renderer: Implement various texture combiner configurations
- Software renderer: Implement texture combiner buffer
- Software renderer: Unify GetColorSource and GetAlphaSource
- DebugUtils: Support printing more texture combiner configurations
- Vulkan: Implement the AddThenMultiply alpha combiner operation
- Vulkan: Implement “Less or Equal” depth test func
- Vulkan: Implement texture combiner multipliers
Used by many games. Fixes black objects in Nano Assault EX. Fixes dark tint in TLoZ OoT 3D.
- Fix wrong placement of parentheses in the AddThenMultiply texture combiner operation
Fixes the fire effect around the TLoZ OoT 3D logo on the title screen
- Fix wrong enum definitions used for constant alpha blend modes
Fixes the intro logos in Cubic Ninja from fading in incorrectly
- CommandProcessor: Fix processing of command lists with unaligned end addresses
Prior to this fix, the emulator would “miss” the end and hence keep processing commands indefinitely
- CommandProcessor: Replace recursive invocation of nested command lists with iterative algorithm
Fixes stack exhaustion caused by deeply nested command lists used in some titles
UI changes
- Add Cave Story 3D to the list of supported games