Switch 2: Compatibility Mode: Difference between revisions
No edit summary |
Add at least some basic info of nnCompatTrampoline instead of leaving it empty... |
||
| (8 intermediate revisions by 2 users not shown) | |||
| Line 7: | Line 7: | ||
These binaries are compiled with PAC enabled. | These binaries are compiled with PAC enabled. | ||
= NPDM Adjustments = | |||
* Game has access to SVC 0x54, 0x80 even though it's not in the game NPDM. | |||
* Game has CoreMask 0x3F (so access to core0-5) even though the game NPDM only has CoreMask 0x7. | |||
* It's unknown if the service whitelist is updated for the game when running in Compatibility mode. | |||
= Hooking = | = Hooking = | ||
| Line 16: | Line 20: | ||
Below is a breakdown what some of the hooks and what their purpose is. | Below is a breakdown what some of the hooks and what their purpose is. | ||
== Modules == | |||
Rtld is identical besides the extra page at the end of .bss for [[#CompatibilityParameter|CompatibilityParameter]]. | |||
The compat modules are loaded between the main module and the (sub)sdk* modules. | |||
The existing modules are not directly modified. | |||
== CompatibilityParameter == | == CompatibilityParameter == | ||
| Line 67: | Line 78: | ||
|- | |- | ||
|} | |} | ||
= ApplicationCompatibilityInfo = | |||
The [[Switch 2: Title list|ApplicationCompatibilityInfo]] SystemData contains "ApplicationCompatibilityInfo.json". | |||
The json "records" contains an array, each object entry then contains the following: | |||
* "application_id": "0x<lowercase hex ApplicationId>" | |||
* "target_max_version": <value> (normally u32-max) | |||
* "application_layer_info": This object contains various number fields, only fields needed by the current entry are present. "graphics_config", "misc_config", ... | |||
** The data from here is likely passed as input to [[#CompatibilityParameter|CompatibilityParameter]]. | |||
= nnCompatTrampoline = | = nnCompatTrampoline = | ||
This module contains, in particular, game-specific patches for at least 5 games. They follow a pattern of "nnCompatPatchFor****", where the last 5 digits are the game code (for example, "nnCompatPatchForAyl8a" for Metroid: Dread). | |||
= nnCompatThin = | = nnCompatThin = | ||
| Line 110: | Line 131: | ||
|- | |- | ||
| nn::os::ConvertToTick || Uses conversion ratio 31250000 instead of 19200000. | | nn::os::ConvertToTick || Uses conversion ratio 31250000 instead of 19200000. | ||
|- | |||
| gl*, _gl*, egl* || OpenGL API translation for new GPU? | |||
|- | |||
| vk* || Vulkan API translation for new GPU? | |||
|- | |||
| NvOsFopen || | |||
|- | |||
| NvOsGetTimeMS || Adjusted for new clock frequency. | |||
|- | |||
| nn::vi::* || Translation layer because vi:u was removed? | |||
|- | |||
| nn::pl::IsRunningOnOunce || Returns 1 instead of 0. | |||
|} | |} | ||