Commit Graph

27130 Commits

Author SHA1 Message Date
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
Zephyron
3eec1ced93 feat(discord): Update Discord integration and game art fetching
- Updates the Discord application Client ID.
- Changes the game art source from static URLs on `citron-emu.org` to dynamically fetched images from `tinfoil.media` using the game's title ID.
- Removes the `GetGameString` function, as the URL formatting logic has changed.
- Modifies `UpdateGameStatus` and `Update` to accommodate the new image fetching mechanism and use the title ID.
- Adds new members to `DiscordImpl` to store title ID and cache image URLs.
- Updates copyright information in `discord_impl.cpp` and `discord_impl.h`.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-06 16:42:30 +10:00
Zephyron
48e823c0d3 build: Update external download URLs and copyright
- In `CMakeModules/DownloadExternals.cmake`:
    - The `package_base_url` for bundled externals is changed from `citron-emu` to `yuzu-mirror`.
- In `CMakeLists.txt`:
    - The `NASM_DOWNLOAD_URL` is updated to `yuzu-mirror`.
    - The download URL for the compatibility list is changed from `api.citron-emu.org` to `api.yuzu-citron-emu.org`.
    - The download URL for `clang-format` on Windows is updated to `yuzu-mirror`.
- Copyright years and project names are updated in both files.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-06 16:37:53 +10:00
Zephyron
fef3a61397 feat(common): Disable telemetry by default and update web API URL
- Disables the `enable_telemetry` setting by default.
- Updates the `web_api_url` to "https://api.ynet-fun.xyz".
- Updates the copyright year and project name.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-06 16:25:05 +10:00
Zephyron
a8f0af4a2b feat(core): Update HOS and NintendoSDK version constants
- Bumps HOS version from 12.1.0 to 20.0.1.
- Updates the corresponding `VERSION_HASH`, `DISPLAY_VERSION`, and
  `DISPLAY_TITLE` strings.
- Updates the copyright year and project name.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-06 16:22:24 +10:00
Zephyron
200094d596 dist: Add Citron branding assets
- Add Citron logo in multiple formats:
  - .bmp for legacy support
  - .ico for Windows applications
  - .svg for scalable graphics

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-06 16:17:46 +10:00
Zephyron
6a3374309f fix(core): Correct telemetry personalization string size and update copyright
- Updates the copyright year and project name in `telemetry_session.cpp`.
- Adjusts the size of the `personalization` array for telemetry ID generation to correctly accommodate the "citron Telemetry ID" string, preventing potential truncation.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-06 16:15:37 +10:00
Zephyron
ee55fb65ba Edit CopycitronSDLDeps.cmake 2025-05-06 06:13:00 +00:00