Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
GreemDev committed Nov 6, 2024
2 parents 0c88b9e + 8a064bc commit 6664ed1
Show file tree
Hide file tree
Showing 10 changed files with 110 additions and 3 deletions.
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,9 @@ Use the search function to see if a game has been tested already!
To run this emulator, your PC must be equipped with at least 8GiB of RAM;
failing to meet this requirement may result in a poor gameplay experience or unexpected crashes.

## Latest build
## Latest release

These builds are compiled automatically for each commit on the master branch.
Releases are compiled automatically for each commit on the master branch.
While we strive to ensure optimal stability and performance prior to pushing an update, our automated builds **may be unstable or completely broken**.

You can find the latest release [here](https://github.com/GreemDev/Ryujinx/releases/latest).
Expand All @@ -74,6 +74,7 @@ If you are planning to contribute or just want to learn more about this project

## Building

Building the project is for advanced users.
If you wish to build the emulator yourself, follow these steps:

### Step 1
Expand Down
Binary file modified distribution/macos/Ryujinx.icns
Binary file not shown.
2 changes: 1 addition & 1 deletion src/Ryujinx.Audio/Renderer/Dsp/AdpcmHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ private static short Saturate(int value)
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static short GetCoefficientAtIndex(ReadOnlySpan<short> coefficients, int index)
{
if ((uint)index > (uint)coefficients.Length)
if ((uint)index >= (uint)coefficients.Length)
{
Logger.Error?.Print(LogClass.AudioRenderer, $"Out of bound read for coefficient at index {index}");

Expand Down
4 changes: 4 additions & 0 deletions src/Ryujinx.HLE/HOS/Services/Hid/Hid.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using Ryujinx.HLE.HOS.Kernel.Memory;
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory;
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common;
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.DebugMouse;
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.DebugPad;
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Keyboard;
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Mouse;
Expand All @@ -28,6 +29,7 @@ public class Hid
public DebugPadDevice DebugPad;
public TouchDevice Touchscreen;
public MouseDevice Mouse;
public DebugMouseDevice DebugMouse;
public KeyboardDevice Keyboard;
public NpadDevices Npads;

Expand All @@ -44,6 +46,7 @@ static Hid()
CheckTypeSizeOrThrow<RingLifo<DebugPadState>>(0x2c8);
CheckTypeSizeOrThrow<RingLifo<TouchScreenState>>(0x2C38);
CheckTypeSizeOrThrow<RingLifo<MouseState>>(0x350);
CheckTypeSizeOrThrow<RingLifo<DebugMouseState>>(0x350);
CheckTypeSizeOrThrow<RingLifo<KeyboardState>>(0x3D8);
CheckTypeSizeOrThrow<Array10<NpadState>>(0x32000);
CheckTypeSizeOrThrow<SharedMemory>(Horizon.HidSize);
Expand All @@ -64,6 +67,7 @@ private void InitDevices()
DebugPad = new DebugPadDevice(_device, true);
Touchscreen = new TouchDevice(_device, true);
Mouse = new MouseDevice(_device, false);
DebugMouse = new DebugMouseDevice(_device, false);
Keyboard = new KeyboardDevice(_device, false);
Npads = new NpadDevices(_device, true);
}
Expand Down
29 changes: 29 additions & 0 deletions src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/DebugMouseDevice.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common;
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.DebugMouse;

namespace Ryujinx.HLE.HOS.Services.Hid
{
public class DebugMouseDevice : BaseDevice
{
public DebugMouseDevice(Switch device, bool active) : base(device, active) { }

public void Update()
{
ref RingLifo<DebugMouseState> lifo = ref _device.Hid.SharedMemory.DebugMouse;

ref DebugMouseState previousEntry = ref lifo.GetCurrentEntryRef();

DebugMouseState newState = new()
{
SamplingNumber = previousEntry.SamplingNumber + 1,
};

if (Active)
{
// TODO: This is a debug device only present in dev environment, do we want to support it?
}

lifo.Write(ref newState);
}
}
}
20 changes: 20 additions & 0 deletions src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,26 @@ public ResultCode ActivateMouse(ServiceCtx context)

return ResultCode.Success;
}

[CommandCmif(26)]
// ActivateDebugMouse(nn::applet::AppletResourceUserId)
public ResultCode ActivateDebugMouse(ServiceCtx context)
{
long appletResourceUserId = context.RequestData.ReadInt64();

context.Device.Hid.DebugMouse.Active = true;

// Initialize entries to avoid issues with some games.

for (int entry = 0; entry < Hid.SharedMemEntryCount; entry++)
{
context.Device.Hid.DebugMouse.Update();
}

Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId });

return ResultCode.Success;
}

[CommandCmif(31)]
// ActivateKeyboard(nn::applet::AppletResourceUserId)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System;

namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.DebugMouse
{
[Flags]
enum DebugMouseAttribute : uint
{
None = 0,
Transferable = 1 << 0,
IsConnected = 1 << 1,
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using System;

namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.DebugMouse
{
[Flags]
enum DebugMouseButton : uint
{
None = 0,
Left = 1 << 0,
Right = 1 << 1,
Middle = 1 << 2,
Forward = 1 << 3,
Back = 1 << 4,
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common;
using System.Runtime.InteropServices;

namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.DebugMouse
{
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct DebugMouseState : ISampledDataStruct
{
public ulong SamplingNumber;
public int X;
public int Y;
public int DeltaX;
public int DeltaY;
public int WheelDeltaX;
public int WheelDeltaY;
public DebugMouseButton Buttons;
public DebugMouseAttribute Attributes;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using Ryujinx.Common.Memory;
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common;
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.DebugMouse;
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.DebugPad;
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Keyboard;
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Mouse;
Expand Down Expand Up @@ -44,6 +45,12 @@ struct SharedMemory
/// </summary>
[FieldOffset(0x9A00)]
public Array10<NpadState> Npads;

/// <summary>
/// Debug mouse.
/// </summary>
[FieldOffset(0x3DC00)]
public RingLifo<DebugMouseState> DebugMouse;

public static SharedMemory Create()
{
Expand Down

0 comments on commit 6664ed1

Please sign in to comment.