mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2026-04-28 01:13:06 +00:00
## Touchscreen Fix - Added `GetScreenPositionNullable` for touch coordinate validation - Returns `null` when touch is outside the rendered screen area - Files: src/Ryujinx.Input/IMouse.cs, src/Ryujinx.Input/HLE/TouchScreenManager.cs ## LibraryAppletMyPage (User Page) - Added Actions → Tools → User Page menu item - Launches the MyPage system applet (program ID 0x0100000000001013) - Files: src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml, MainMenuBarView.axaml.cs ## HLE Services Implementation ### HID System Server - 850: SetTouchScreenDefaultConfiguration - 851: GetTouchScreenDefaultConfiguration - 1200: AcquireConnectionTriggerTimeoutEvent - 1201: SendConnectionTrigger - 1202: AcquireDeviceRegisteredEventForControllerSupport - 1203: GetAllowedBluetoothLinksCount ### acc:aa (IBaasAccessTokenAccessor) - 0: EnsureCacheAsync - 1: LoadCache - 2: GetDeviceAccountId - 50: RegisterNotificationTokenAsync - 51: UnregisterNotificationTokenAsync ### nim (IShopServiceAsync) - Commands 0-5: Cancel, GetSize, Read, GetErrorCode, Request, Prepare ### LDN Monitor Service (NEW) - IMonitorServiceCreator: Added CreateMonitorService (command 0) - IMonitorService: GetStateForMonitor, GetNetworkInfoForMonitor, GetIpv4AddressForMonitor, GetDisconnectReasonForMonitor, GetSecurityParameterForMonitor, GetNetworkConfigForMonitor, AttachStateChangeEvent, InitializeMonitor, FinalizeMonitor ## Applet Infrastructure - ILibraryAppletSelfAccessor: Rewrite to support MiiEdit, MyPage applets - AppletStateMgr: Complete rewrite with proper state machine and focus handling - ICommonStateGetter: Updated ReceiveMessage and RequestToAcquireSleepLock
96 lines
2.5 KiB
C#
96 lines
2.5 KiB
C#
using System;
|
|
|
|
namespace ARMeilleure.CodeGen.Arm64
|
|
{
|
|
static class CallingConvention
|
|
{
|
|
private const int RegistersMask = unchecked((int)0xffffffff);
|
|
|
|
// Some of those register have specific roles and can't be used as general purpose registers.
|
|
// X18 - Reserved for platform specific usage.
|
|
// X29 - Frame pointer.
|
|
// X30 - Return address.
|
|
// X31 - Not an actual register, in some cases maps to SP, and in others to ZR.
|
|
private const int ReservedRegsMask = (1 << CodeGenCommon.ReservedRegister) | (1 << 18) | (1 << 29) | (1 << 30) | (1 << 31);
|
|
|
|
public static int GetIntAvailableRegisters()
|
|
{
|
|
return RegistersMask & ~ReservedRegsMask;
|
|
}
|
|
|
|
public static int GetVecAvailableRegisters()
|
|
{
|
|
return RegistersMask;
|
|
}
|
|
|
|
public static int GetIntCallerSavedRegisters()
|
|
{
|
|
return (GetIntCalleeSavedRegisters() ^ RegistersMask) & ~ReservedRegsMask;
|
|
}
|
|
|
|
public static int GetFpCallerSavedRegisters()
|
|
{
|
|
return GetFpCalleeSavedRegisters() ^ RegistersMask;
|
|
}
|
|
|
|
public static int GetVecCallerSavedRegisters()
|
|
{
|
|
return GetVecCalleeSavedRegisters() ^ RegistersMask;
|
|
}
|
|
|
|
public static int GetIntCalleeSavedRegisters()
|
|
{
|
|
return 0x1ff80000; // X19 to X28
|
|
}
|
|
|
|
public static int GetFpCalleeSavedRegisters()
|
|
{
|
|
return 0xff00; // D8 to D15
|
|
}
|
|
|
|
public static int GetVecCalleeSavedRegisters()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
public static int GetArgumentsOnRegsCount()
|
|
{
|
|
return 8;
|
|
}
|
|
|
|
public static int GetIntArgumentRegister(int index)
|
|
{
|
|
if ((uint)index < (uint)GetArgumentsOnRegsCount())
|
|
{
|
|
return index;
|
|
}
|
|
|
|
throw new ArgumentOutOfRangeException(nameof(index));
|
|
}
|
|
|
|
public static int GetVecArgumentRegister(int index)
|
|
{
|
|
if ((uint)index < (uint)GetArgumentsOnRegsCount())
|
|
{
|
|
return index;
|
|
}
|
|
|
|
throw new ArgumentOutOfRangeException(nameof(index));
|
|
}
|
|
|
|
public static int GetIntReturnRegister()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
public static int GetIntReturnRegisterHigh()
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
public static int GetVecReturnRegister()
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
}
|