Commit Graph

27437 Commits

Author SHA1 Message Date
Zephyron
e85f691767 nsd: Suppress unused variable warnings
Mark ResultNotImplemented and ResultNsdNotInitialized with
[[maybe_unused]] to avoid compiler warnings.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-25 19:33:54 +10:00
Zephyron
110ffa1521 cmake(android): Optimize Vulkan Validation Layer handling
- Check if libVkLayer_khronos_validation.so exists before downloading
- Skip extraction if android-binaries directory already exists
- Reduces redundant downloads and extractions during CMake reconfiguration
- Maintains backward compatibility with existing build process

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-25 19:32:42 +10:00
Zephyron
f40624bf25 ui(android): Add Citron's XML Logo's
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-25 15:05:58 +10:00
Zephyron
294949855f Merge branch 'memory-layout-10-12-14-16gb' into 'master'
feat: Add 10GB, 12GB, 14GB, and 16GB DRAM configuration options

See merge request citron/rewrite!19
2025-05-24 07:14:38 +00:00
Zephyron
fdf1bfc06a feat: Add 10GB, 12GB, 14GB, and 16GB DRAM configuration options
- Extended MemoryLayout enum with new memory size options
- Added corresponding SMC memory size and arrangement constants
- Updated system control functions to handle new memory configurations
- Added appropriate application pool sizes for higher memory modes
- Updated UI translations to display new DRAM options as "Unsafe"
- Increased maximum memory layout setting from 8GB to 16GB

This allows users to configure higher memory amounts for games and
texture mods that require more than the standard 4-8GB configurations.
All new options are marked as "Unsafe" in the UI to indicate they
are experimental features beyond Nintendo's official specifications.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-24 17:10:19 +10:00
Zephyron
f3c8a1bfcd Merge branch 'audio-add-new-functions-services' into 'master'
hle/service/audio: Implement missing audio services and functions

See merge request citron/rewrite!18
2025-05-24 06:40:11 +00:00
Zephyron
238e8282b2 hle/service/audio: Implement missing audio services and functions
- Add complete IAudioController implementation with 32 missing functions:
  * Volume control (GetTargetVolume, SetTargetVolume, etc.)
  * Mute control (IsTargetMute, SetTargetMute, etc.)
  * Target management (SetDefaultTarget, GetDefaultTarget, etc.)
  * Play report functions (10000+ series command IDs)
  * Hearing protection safeguard functions
  * Debug and system functions

- Add new audio services:
  * codecctl - Codec controller service with 13 functions
  * auddebug - Audio debug service placeholder
  * Device suspend/resume services (audout:d, audin:d, audrec:d, audren:d)
  * System audio services (aud:a, aud:d)
  * Applet audio services (audout:a, audin:a, audren:a)

- Update IAudioDevice with missing functions:
  * GetAudioSystemMasterVolumeSetting
  * GetActiveAudioOutputDeviceName
  * Fix function ID mappings to match official documentation

- Register all services in main audio LoopProcess function
- Update CMakeLists.txt with new source files

All implementations follow the official Switch audio services documentation
from switchbrew.org and provide appropriate stub implementations with
sensible default values for enhanced game compatibility.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-24 16:39:15 +10:00
Zephyron
4dde579132 Merge branch 'acc-add-new-functions-services' into 'master'
hle/service/acc: Implement acc:e, acc:e:u1, acc:e:u2, and dauth:0 services

See merge request citron/rewrite!17
2025-05-24 05:46:07 +00:00
Zephyron
129e76a13c hle/service/acc: Implement acc:e, acc:e:u1, acc:e:u2, and dauth:0 services
- Add acc:e service with full account management functionality
- Add acc:e:u1 service (minimal implementation)
- Add acc:e:u2 service with extended functionality including PIN code support
- Add dauth:0 device authentication service
- Update acc_su function mappings to match newer firmware versions
- Move TrySelectUserWithoutInteraction from ID 51 to 52 with deprecated fallback

These services provide additional account management interfaces used by
newer Switch firmware versions and some games that require extended
account functionality.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-24 15:42:58 +10:00
Zephyron
1ba7861366 Merge branch 'pm-add-new-function-services' into 'master'
feat(service/pm): Align PM services with Switchbrew documentation

See merge request citron/rewrite!16
2025-05-20 08:04:21 +00:00
Zephyron
a35d0de5a6 feat(service/pm): Align PM services with Switchbrew documentation
- **pm:bm (IBootModeInterface):**
    - Added stubs for Cmd 2 (`[19.0.0+]`) and Cmd 3 (`[19.0.0+]`) as "UnknownCmd2" and "UnknownCmd3" respectively.
- **pm:dmnt (IDebugMonitorInterface):**
    - Corrected typo in Cmd 5 name from "HookToCreateApplicationProgress" to "HookToCreateApplicationProcess".
    - Added stub for Cmd 7 (`GetProgramId`, `[14.0.0+]`).
- **pm:info (IInformationInterface):**
    - Added stub for Cmd 1 (`GetAppletCurrentResourceLimitValues`, `[14.0.0+]`).
    - Added stub for Cmd 2 (`GetAppletPeakResourceLimitValues`, `[14.0.0+]`).
- **pm:shell (IShellInterface):**
    - Added stub for Cmd 10 (`BoostSystemThreadResourceLimit`, `[14.0.0+]`).
    - Added stub for Cmd 12 (`GetProcessId`, `[19.0.0+]`).

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-20 17:58:38 +10:00
Zephyron
f26864fda5 Merge branch 'npns-add-new-functions-services' into 'master'
feat(service/npns): Add NPNS stubs and interfaces from documentation

See merge request citron/rewrite!15
2025-05-20 06:02:16 +00:00
Zephyron
9ac1277fd7 feat(service/npns): Add NPNS stubs and interfaces from documentation
- Addition of all documented commands for `INpnsSystem` and `INpnsUser` as `nullptr` stubs. This includes newly added commands and ensures all known commands have a placeholder.
- Introduction of empty class definitions for `INotificationReceiver`, `ICreateTokenAsyncContext`, `ISubscriptionUpdateNotifier`, and `IFuture` interfaces as specified in the documentation.
- Reversion of the previous change that made `nullptr` stubs call an `UnimplementedMethod` that returned success. Stubs are now back to being `nullptr`.
- Update of the copyright year in `npns.cpp`.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-20 16:01:15 +10:00
Zephyron
4462611a6b Merge branch '32-9-aspect-ratio' into 'master'
feat: Implement 32:9 aspect ratio

See merge request citron/rewrite!14
2025-05-18 05:12:18 +00:00
Zephyron
c5604ced4f feat: Implement 32:9 aspect ratio
This commit introduces support for a 32:9 aspect ratio throughout Citron.

Key changes include:

-   **Enum Updates**: Added `R32_9` to `Settings::AspectRatio` and `Layout::AspectRatio` enums, ensuring consistent integer mapping for casting between them.
-   **Core Logic**:
    -   Modified `UISettings::CalculateWidth` to correctly compute width for the 32:9 ratio.
    -   Updated `Layout::EmulationAspectRatio` to handle the new `R32_9` case and return the appropriate float value (9.0f / 32.0f).
-   **Android Integration**:
    -   Updated `EmulationFragment.kt` and `EmulationActivity.kt` (for Picture-in-Picture) to recognize and apply the 32:9 aspect ratio (mapping setting value `4` to `Rational(32, 9)`).
-   **UI Configuration**:
    -   Added "Force 32:9" to the aspect ratio selection in the graphics settings UI via `shared_translation.cpp`. This string is translatable.

This enhancement allows users to utilize ultra-widescreen 32:9 displays for a more immersive experience.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-18 15:10:47 +10:00
Zephyron
0d46968e6c Merge branch 'nsd-add-new-functions-services' into 'master'
feat(service/nsd): Implement missing nsd:u and nsd:a services

See merge request citron/rewrite!13
2025-05-17 07:32:32 +00:00
Zephyron
7a564e727a feat(service/nsd): Implement missing nsd:u and nsd:a services
Adds implementations for missing nsd:u and nsd:a services
as documented in SwitchBrew. This includes:

- Defining necessary data structures (Url, SettingName, DeviceId, Fqdn,
  NasServiceSetting, NasServiceName, SaveData, TestParameter, DeleteMode,
  ImportMode) in nsd.cpp.
- Adding declarations for new service methods to nsd.h.
- Implementing basic stub logic for each new service method in nsd.cpp,
  including logging, returning default success/error codes, and handling
  output buffers where applicable.
- Implementing checks for nsd:a specific functions using a new
  IsNsdA() helper.
- Updating the copyright year in nsd.h.

This provides a complete interface for the nsd service, allowing
further development and reducing unknown service calls.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-17 17:25:43 +10:00
Zephyron
da03397cdb Merge branch 'sfdnsres-add-new-functions-services' into 'master'
feat(HLE): Implement sfdnsres service functions and align with docs

See merge request citron/rewrite!12
2025-05-16 08:24:53 +00:00
Zephyron
dc51851b67 feat(HLE): Implement sfdnsres service functions and align with docs
Adds implementations for missing `sfdnsres` (nn::socket::resolver::IResolver) service functions and corrects command ID mappings to align with Switchbrew documentation.

Key changes:
- Implemented stubs for the following `sfdnsres` functions:
    - `SetDnsAddresses` (Cmd 0)
    - `GetDnsAddressList` (Cmd 1)
    - `GetHostByAddrRequest` (Cmd 4, deprecated)
    - `GetHostStringError` (Cmd 5)
    - `CancelRequest` (Cmd 7)
    - `GetOptions` (Cmd 9)
    - `GetAddrInfoRequestRaw` (Cmd 11)
- Updated the command registration table in the `SFDNSRES` constructor to use correct Switchbrew command IDs and map them to the appropriate existing or new (stubbed) implementations.
- Retained and stubbed `GetNameInfoRequest` and `GetNameInfoRequestWithOptions` with placeholder IDs, as they were present in the previous command table.
- Corrected usage of `GetAddrInfoError` constants in stubs to use valid members (e.g., `GetAddrInfoError::AGAIN` instead of a non-standard `INTERNAL`).

This significantly expands the implemented interface for the `sfdnsres` service, bringing it closer to the documented functionality and resolving related compilation errors.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-16 18:21:01 +10:00
Zephyron
49e145d075 Merge branch 'bsd-add-new-functions-services' into 'master'
feat(HLE): Implement missing BSD socket service functions

See merge request citron/rewrite!11
2025-05-16 07:38:49 +00:00
Zephyron
76210eb990 feat(HLE): Implement bsdcfg service functions and fix logging
Adds implementations for all `bsdcfg` (aliased as `ifcfg`) service functions as listed in the existing codebase and supplemented by Switchbrew documentation.

The following functions have been added to the `BSDCFG` service:
- `SetIfUp` (Cmd 0)
- `SetIfUpWithEvent` (Cmd 1)
- `CancelIf` (Cmd 2)
- `SetIfDown` (Cmd 3)
- `GetIfState` (Cmd 4)
- `DhcpRenew` (Cmd 5)
- `AddStaticArpEntry` (Cmd 6)
- `RemoveArpEntry` (Cmd 7)
- `LookupArpEntry` (Cmd 8)
- `LookupArpEntry2` (Cmd 9)
- `ClearArpEntries` (Cmd 10)
- `ClearArpEntries2` (Cmd 11)
- `PrintArpEntries` (Cmd 12)
- `Unknown13` (Cmd 13)
- `Unknown14` (Cmd 14)
- `Unknown15` (Cmd 15)

These functions are initially stubbed to log a warning and return `EOPNOTSUPP`.
Command handlers have been updated in the `BSDCFG` constructor.

Additionally, this commit corrects the logging category in these new `BSDCFG` stubs from an undefined `Service_BSDCFG` to the existing `Service` category, resolving compilation errors.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-16 17:31:26 +10:00
Zephyron
07139a2c0d feat(HLE): Implement missing BSD socket service functions
Adds implementations for several previously unimplemented BSD socket service functions, as documented in Switchbrew. REF: https://switchbrew.org/wiki/Sockets_services#bsd:u.2C_bsd:s.2C_bsd:a

The following functions have been added to the `bsd:u`, `bsd:s`, and `bsd:a` services:

* `SocketExempt` (Cmd 3)
* `Open` (Cmd 4)
* `Sysctl` (Cmd 7)
* `Ioctl` (Cmd 19)
* `ShutdownAllSockets` (Cmd 23)
* `GetResourceStatistics` (Cmd 28)
* `RecvMMsg` (Cmd 29)
* `SendMMsg` (Cmd 30)
* `RegisterResourceStatisticsName` (Cmd 32)
* `RegisterClientShared` (Cmd 33) (replaces the placeholder `Initialize2`)
* `GetSocketStatistics` (Cmd 34)
* `NifIoctl` (Cmd 35)
* `SetThreadCoreMask` (Cmd 200)
* `GetThreadCoreMask` (Cmd 201)

These functions are initially set to log a warning and return an appropriate error code (typically `EOPNOTSUPP` or `ENOTTY`), or success in the case of registration-type functions.

The command handlers have been registered in the BSD service constructor.

This resolves various compilation errors encountered during the implementation process related to IPC response generation and enum usage.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-16 16:54:39 +10:00
Zephyron
c5e56bc72a Merge branch 'android-studio' into 'master'
build: update Android build system and platform compatibility

See merge request citron/rewrite!10
2025-05-15 07:26:52 +00:00
Zephyron
646326e608 build: update Android build system and platform compatibility
1. Gradle ecosystem upgrades:
   - Update Gradle from 8.1 to 8.12
   - Update Android Gradle plugin from 8.1.2 to 8.10.0
   - Upgrade Java compatibility from 17 to 21

2. Build configuration changes:
   - Make release build the default instead of relWithDebInfo
   - Enable premium features

3. Platform compatibility fixes:
   - Properly exclude boost-process on Android
   - Add workarounds for missing features on Android
   - Fix socket operations in SSL backend
   - Update Boost.Asio naming (io_service → io_context)

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-15 17:24:33 +10:00
Zephyron
bc946cad03 Merge branch 'cmake' into 'master'
chore: update external tool dependencies and URLs

See merge request citron/rewrite!9
2025-05-15 07:07:21 +00:00
Zephyron
7541a9a2d8 chore: update external tool dependencies and URLs
1. Update NASM from 2.16.01 to 2.16.03 and use the official nasm.us download URL
2. Update clang-format from version 15 to version 20
3. Change all repository URLs from yuzu-mirror GitHub to Citron's self-hosted Git server

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-15 17:05:19 +10:00
Zephyron
e72f59630b Merge branch 'vcpkg' into 'master'
fix: exclude boost-process from Android builds

See merge request citron/rewrite!8
2025-05-15 06:57:29 +00:00
Zephyron
dc6bc2348b fix: exclude boost-process from Android builds
Boost.Process is not compatible with Android platform, causing build failures. This change conditionally includes the package only on non-Android platforms.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-15 16:54:15 +10:00
Zephyron
98e9384db1 Merge branch 'vcpkg' into 'master'
chore: Update vcpkg submodule and builtin-baseline

See merge request citron/rewrite!7
2025-05-14 10:04:58 +00:00
Zephyron
25ac9bde7c fix: Replace deprecated io_service with io_context in UDP client
Updates UDP client code to use boost::asio::io_context instead of the
deprecated boost::asio::io_service, fixing compilation errors with newer
Boost versions.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-13 18:01:26 +10:00
Zephyron
446dee397c chore: Update vcpkg submodule and builtin-baseline
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-13 16:02:43 +10:00
Zephyron
a60ec22f18 Merge branch 'donkey-kong-country-returns-hd' into 'master'
hid: Add SetGestureOutputRanges function

See merge request citron/rewrite!6
2025-05-12 06:11:47 +00:00
Zephyron
42573456db hid: Add SetGestureOutputRanges function
Add an implementation for function 92 (SetGestureOutputRanges) in the HID service.
This fixes a crash in Donkey Kong Country Returns HD which occurs when the game
attempts to access this unimplemented function. The function is now properly
registered and returns success while logging the call.

The specific error that was occurring:
"Unknown / unimplemented function '92': port='hid'"

According to the official Switch documentation, this function was introduced in
firmware 18.0.0+ and is used for setting gesture output ranges for touch/gesture
controls.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-12 16:10:57 +10:00
Zephyron
9c4eea3939 Merge branch 'ssl-add-new-functions-services' into 'master'
service/ssl: Add ssl:s service and fix SSL-related crashes in Xenoblade X

See merge request citron/rewrite!5
2025-05-11 10:23:02 +00:00
Zephyron
6a0c0a4835 service/ssl: Add ssl:s service and fix SSL-related crashes in Xenoblade X
Implements the ssl:s service alongside various SSL-related functionality that
was causing Xenoblade Chronicles X: Definitive Edition to crash. The changes
include:

- Add the ssl:s service with proper command handlers
- Add InfoType::TLSCapability (0x1C) to the system call handler
- Implement a stub SSL backend for basic network operations
- Add FlushSessionCache functionality to both ssl and ssl:s services

These changes resolve the "TLS initialization failed" crash and the "Unknown
function '5': port='ssl:s'" error that were preventing the game from starting.
The implementation is mostly stubbed, allowing network requests to pass through
unencrypted but enabling games to proceed without crashing.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-11 20:22:13 +10:00
Zephyron
8a1cdc9675 Merge branch 'nim-add-new-functions-services' into 'master'
service/nim: Implement missing services and functions

See merge request citron/rewrite!4
2025-05-11 09:07:19 +00:00
Zephyron
95f0749a8a service/nim: Implement missing services and functions
Add implementation for the missing nim:ecas service documented in SwitchBrew.
Provide stub implementations of critical NIM service functions that games might call:
- System update related functions (CreateSystemUpdateTask, GetSystemUpdateTaskInfo)
- Network installation functions (RequestNetworkInstallTaskRun, GetNetworkInstallTaskInfo)
- Local communication for system updates and applications
- Delta update related functions (CreateApplyDeltaTask, GetApplyDeltaTaskInfo)
- RequestDownloadTicketForPrepurchasedContents for DLC content access

Fix compilation error in GetDownloadedSystemDataPath by using ctx.WriteBuffer
instead of unsupported rb.PushString.

These changes prevent games from crashing due to missing NIM service functions and
allow proper handling of system updates, network installations, and DLC content.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-11 19:02:42 +10:00
Zephyron
a698d0b2ad Merge branch 'nifm-add-new-functions-services' into 'master'
feat(service/nifm): implement missing network interface services

See merge request citron/rewrite!3
2025-05-11 08:32:16 +00:00
Zephyron
62f40d8b82 feat(service/nifm): implement missing network interface services
Specifically:
- Add 11 missing methods to IGeneralService including network profile, scan, and WoWL functionality
- Implement 14 missing methods for IRequest class
- Complete implementation of IScanRequest class with all 5 required methods
- Update copyright notices to include citron Emulator Project

These additions should prevent games from crashing when accessing previously unimplemented network interface functions.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-11 18:29:55 +10:00
Zephyron
acfb1dcc1a Merge branch 'princess-peach-showtime' into 'master'
video_core: Use safe memory reads for KeplerCompute inline methods

See merge request citron/rewrite!2
2025-05-11 06:39:05 +00:00
Zephyron
2e6bcc9ea6 video_core, shader_recompiler: Improve Princess Peach: Showtime! support and performance
1. Add geometry shader support for Princess Peach: Showtime!:
   - Implement proper EmitInvocationInfo handling for geometry shaders
   - Support input topology vertex counting in all shader backends (GLASM, GLSL, SPIRV)

2. Performance optimizations:
   - Replace InputTopologyVertices switch statement with a constexpr lookup table
   - Pre-calculate vertex counts and shifts to reduce register pressure
   - Eliminate redundant calculations in shader backends

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-11 16:28:25 +10:00
Zephyron
9bb2b769a4 video_core: Use safe memory reads for KeplerCompute inline methods
Changes:
- Remove special case for KeplerCompute inline methods that used unsafe reads in high
  accuracy mode
- Add special case to use safe reads for KeplerCompute inline methods even in normal
  accuracy mode

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-11 16:26:59 +10:00
Zephyron
54f2b4442e friend: Implement stubs for all service functions
- Add implementations for all previously unimplemented IFriendService functions
- Create IDaemonSuspendSessionService class and implement CreateDaemonSuspendSessionService
- Restructure code to separate method declarations from implementations
- Add helper structs/payloads for various friend-related data structures
- Update function documentation and logging messages

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-07 19:06:43 +10:00
Zephyron
1196001e08 audio_core: Update CurrentRevision from 11 to 15
Updates the audio core revision number to match newer firmware requirements, allowing the emulator to properly handle audio features from more recent Switch software.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-07 18:52:16 +10:00
Zephyron
330b14961a ui: Add Citron About Logo
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-07 18:49:10 +10:00
Zephyron
8c8778f761 desktop: Update StartupWMClass to match application ID
Changes the StartupWMClass from "citron" to "org.citron_emu.citron" to ensure proper icon display in GNOME and other desktop environments. Without this matching the application ID, a generic icon is displayed instead of the proper application icon.

Credit: Shikakiben (shikakiru)
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-07 18:45:59 +10:00
Zephyron
2fae273e9a nvdrv: Add dummy support for ioctl 0x13 in nvhost_ctrl_gpu
- This adds implementations for ioctl command 0x13 in both Ioctl1 and Ioctl3 functions, allowing newer titles like Super Mario Party Jamboree to boot by properly handling this command with a NotImplemented response rather than failing.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-07 18:39:17 +10:00
Zephyron
c4d62cfe15 chore: update vcpkg submodule to latest version
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-06 20:31:53 +10:00
Zephyron
19abd659e1 fix: correct MSVC version conditional syntax in CMakeLists.txt
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-06 20:20:15 +10:00
Zephyron
e63387260c build: Widen MSVC version support for bundled Qt and SDL2
- Updated CMake to allow MSVC versions newer than 2022 (MSVC_VERSION >= 1940) to use the bundled Qt 5.15.2 (msvc2019_64) and SDL2 2.28.2 (x86_64).
2025-05-06 19:08:36 +10:00